用jquery制作2048小游戏(超详细)

先放个效果图吧
在这里插入图片描述

首先,先把html结构搭好。新建一个html文件,设置好标题2048,按钮New Game以及score:0,这里按钮是用a标签来将javascript中的newgame函数给传进来,score后面的分数由于是动态的,所以给它添加一个span标签,并加上一个id,代码如下

    <header>
        <h1>2048</h1>
        <a href="javascript:newgame();" id="newgamebutton">New Game</a> <!-- 点击a标签后,执行一个js的自定义函数newgame() -->
        <a href="javascript:undo();" id="undobutton">Undo</a> <!-- 点击a标签后,执行返回上一步的操作 -->
        <p>score: <span id="score">0</span></p>
    </header>

然后将所有的格子布置好,这里是用div标签来表示每个格子,后续将会用相对定位,绝对定位以及js中的函数来编写每个格子的位置。代码如下

<div id="grid_container">
    <div class="grid_cell" id="grid_cell_0_0"></div>
    <div class="grid_cell" id="grid_cell_0_1"></div>
    <div class="grid_cell" id="grid_cell_0_2"></div>
    <div class="grid_cell" id="grid_cell_0_3"></div>

    <div class="grid_cell" id="grid_cell_1_0"></div>
    <div class="grid_cell" id="grid_cell_1_1"></div>
    <div class="grid_cell" id="grid_cell_1_2"></div>
    <div class="grid_cell" id="grid_cell_1_3"></div>

    <div class="grid_cell" id="grid_cell_2_0"></div>
    <div class="grid_cell" id="grid_cell_2_1"></div>
    <div class="grid_cell" id="grid_cell_2_2"></div>
    <div class="grid_cell" id="grid_cell_2_3"></div>

    <div class="grid_cell" id="grid_cell_3_0"></div>
    <div class="grid_cell" id="grid_cell_3_1"></div>
    <div class="grid_cell" id="grid_cell_3_2"></div>
    <div class="grid_cell" id="grid_cell_3_3"></div>
</div>

现在html结构已经搭完了,开始编写css样式。新建一个css文件,这里css样式其实没什么好讲的,各块内容多大字号,什么背景颜色,padding,margin为多少都是看自己喜好,该居中的居中,我设的大盒子长宽为500px,每个格子长宽为100px,代码如下

header {
    margin: 0 auto;
    width: 500px;
    text-align: center;
}

header h1 {
    font-family: Arial;
    font-size: 40px;
    font-weight: bold;
}

#newgamebutton {
    /* 为了设置各方向的padding和margin,将其变成块元素 */
    display: block;
    margin: 20px auto;
    width: 100px;
    color: white;
    background-color: #8f7a66;
    text-decoration: none;
    padding: 10px;
    border-radius: 10px;
    font-family: Arial;
}

#newgamebutton:hover {
    background-color: #9f8b77;
}

#undobutton {
    display: inline-block;
    margin: 5px 20px;

    width: 100px;
    padding: 10px 10px;
    background-color: #8f7a66;

    font-family: Arial;
    color: white;

    border-radius: 10px;

    text-decoration: none;
}

#undobutton:hover {
    background-color: #9f8b77;
}

header p {
    font-family: Arial;
    font-size: 25px;
    margin: 20px auto;
}

#grid_container {
    width: 460px;
    height: 460px;
    padding: 20px;
    margin: 30px auto;
    border-radius: 10px;
    background-color: #bbada0;
    /* 给大盒子设置相对定位 */
    position: relative;
}

.grid_cell {
    width: 100px;
    height: 100px;
    border-radius: 6px;
    background-color: #ccc0b3;
    /* 给小盒子设置绝对定位 */
    position: absolute;
}

css样式设置完后,就可以开始编写js程序了,新建一个js文件。

首先先想清楚我们需要设置什么。从头开始看,我们用a标签定义了一个按钮,在a标签中调用了一个js的函数newgame,那么点击New Game按钮会发生什么呢?初始化,以及产生两个随机数。

初始化中又有什么功能?每一个格子的数字全部初始化为0(0这个数字可以自己随便取),那么我们就需要定义一个数组专门存放数字。并且分数score也归零。

var board = []; //存放数字的数组
var score = 0; //存放得分
var hasConflicted = []; //存放是否冲突的数组
let preValue = [];//存放每一步时每个格子的值
let preScore = [];//存放每一步时的得分

此处我们定义了一个数组hasConflicted ,现在先不讲,等到最后所有功能完成了我们再讲。另外我们之前给每个格子设置了绝对定位,但是还没设置具体的位置,那么在此处一并设置了。代码如下

$(function () {
    newgame();
})

// 初始化
function newgame() {
    for (var i = 0; i < 4; i++) {
        for (var j = 0; j < 4; j++) {
            var gridCell = $("#grid_cell_" + i + "_" + j); // 定义变量gridCell来编写每个格子的位置
            gridCell.css("top", getPosTop(i, j));
            gridCell.css("left", getPosLeft(i, j)); //只需定义格子的左上角即可
        }
    }

    for (var i = 0; i < 4; i++) {
        board[i] = [];
        hasConflicted[i] = [];
        for (var j = 0; j < 4; j++) {
            board[i][j] = 0; //把board定义为二维数组来更方便地表达出每个格子,board为0即这个格子没有数字,不为0即有数字
            hasConflicted[i][j] = false; //初始化时需要将每个格子是否冲突的属性定义为false
        }
    }

    updateBoardView(); //定义此函数来将数字放到该格子中

    generateOneNumber(); //每次初始化游戏都会随机产生两个数字
    generateOneNumber();

    score = 0; //初始化
    updateScore(score);
}

先看第一段循环,此处定义了一个变量gridCell来方便编写每个格子的位置,然后又调用了两个函数getPosTop和getPosLeft。
在这里插入图片描述
可以看到每个格子的顶部距离大盒子的顶部都是20px+120px乘纵坐标数,同理,左端也是20px+120px乘横坐标数。因此代码如下

function getPosTop(i, j) {
    return 20 + i * 120; //每个格子的上方与大盒子顶端的距离
}

function getPosLeft(i, j) {
    return 20 + j * 120; //每个格子的左边与大盒子左边的距离
}

再接着看newgame函数,由于board是存放每个格子的数字的数组,因此它是一个二维数组,所以第二个循环就是完成这件事的,此处我是将board初始化为0来代表这个格子没有数字,大家也可以定义为其他数字。hasConflicted最后再讲。

然后就是定义了一个函数updateBoardView,这个函数是用来将每个数字放到相应的格子中去的。所以我们每次进行上下左右的操作时,都要调用该函数。代码如下

function updateBoardView() {
    $(".number_cell").remove(); //由于每一次操作都要调用该函数,所以每次调用之前都要先将上次操作后产生的数字清除
    for (var i = 0; i < 4; i++) {
        for (var j = 0; j < 4; j++) {
            $("#grid_container").append("<div class='number_cell' id='number_cell_" + i + "_" + j + "'>"); //给每个格子添加数字
            var theNumberCell = $("#number_cell_" + i + "_" + j); //定义该变量来编写每个格子中数字的css样式
            if (board[i][j] == 0) {
                theNumberCell.css("width", "0"); //当该位置没有数字时,宽高设为0就行
                theNumberCell.css("height", "0");
                theNumberCell.css("top", getPosTop(i, j));
                theNumberCell.css("left", getPosLeft(i, j));
            } else {
                theNumberCell.css("width", "100px");
                theNumberCell.css("height", "100px");
                theNumberCell.css("top", getPosTop(i, j));
                theNumberCell.css("left", getPosLeft(i, j));
                theNumberCell.css("background-color", getNumberBackgroundColor(board[i][j])); //定义该函数来存放不同数字的背景颜色
                theNumberCell.css("color", getNumberColor(board[i][j])); //定义该函数来存放不同数字的颜色
                theNumberCell.text(board[i][j]); //将数字值赋予给相应的格子
            }
            hasConflicted[i][j] = false; //由于每一次操作都要调用该函数,所以每次调用之前都要先将每个格子是否冲突的属性定义为false
        }
    }
}

我们刚说了,每一次操作都要调用该函数,那么相应的,每一次操作后,每个格子中的数字都要先删掉,然后再赋值,第一行就是完成这件事。

然后由于不同的格子有不同的数字,所以我们得定义一个变量theNumberCell来方便编写。要定义该变量,我们就得先给每个格子设置一个number_cell的类和id,所以我们先动态添加一个html标签。

添加完标签后,定义变量theNumberCell,然后又由于没有数字的格子和有数字的格子样式不一样,所以此处分开讨论。

当该位置没有数字时(即board=0),也就是不显示数字,那么宽高设为0就行,位置的话我们之前设置了两个位置函数,这里直接调用就行。当该位置有数字时,宽高设为100px,位置照样调用位置函数,背景颜色和数字的颜色我们定义了两个函数,最后将该数字放到该格子中去就行。

这里新加了一堆div标签,所以我们再给它们添加一下css样式,代码如下

.number_cell {
    font-family: Arial;
    font-size: 30px;
    font-weight: bold;
    line-height: 100px;
    text-align: center;
    border-radius: 6px;
    position: absolute;
}

背景颜色和数字颜色的函数我就直接给代码了,没什么好说的

function getNumberBackgroundColor(number) {
    switch (number) {
        case 2:
            return "#eee4da";
            break;
        case 4:
            return "#ede0c8";
            break;
        case 8:
            return "#f2b179";
            break;
        case 16:
            return "#f59563";
            break;
        case 32:
            return "#f67c5f";
            break;
        case 64:
            return "#f65e3b";
            break;
        case 128:
            return "#edcf72";
            break;
        case 256:
            return "#edcc61";
            break;
        case 512:
            return "#9c0";
            break;
        case 1024:
            return "#33b5e5";
            break;
        case 2048:
            return "#09c";
            break;
        case 4096:
            return "#a6c";
            break;
        case 8192:
            return "#93c";
            break;
    }
    return "black";
}

function getNumberColor(number) {
    if (number <= 4) {
        return "#776e65";
    } else {
        return "white";
    }
}

回到newgame函数中,那么现在updateBoardView这个函数也讲完了,之后的就是随机生成两个数字的函数。代码如下

function generateOneNumber() {
    if (nospace(board)) { //先判断还有没有空位置
        return false;
    } else {
        //随机生成一个位置
        var randx = parseInt(Math.floor(Math.random() * 4));
        var randy = parseInt(Math.floor(Math.random() * 4));
        var times = 0;
        while (times < 50) {
            if (board[randx][randy] == 0) {
                break; //判断该位置是否有数字,若没有,则直接跳出循环,若有,则继续生成randx和randy
            } else {
                randx = parseInt(Math.floor(Math.random() * 4));
                randy = parseInt(Math.floor(Math.random() * 4));
            }
            times++;
        }
        if (times == 50) {
            for (var i = 0; i < 4; i++) { //若算法运行了50次后仍然没有找到空位置,则人工采用for循环来找
                for (var j = 0; j < 4; j++) {
                    if (board[i][j] == 0) {
                        randx = i;
                        randy = j;
                    }
                }
            }
        }
        //随机生成一个数字(2或者4)
        var randNumber = Math.random() < 0.5 ? 2 : 4; //当随机数小于0.5时,取2,否则取4
        //把数字放进空位置
        board[randx][randy] = randNumber;
        showNumberWithAnimation(randx, randy, randNumber); //给生成数字的动作添加动画
        return true;
    }
}

要想生成数字,首先得判断一下还有没有空位置,此处调用了一个新函数。怎么判断有没有空位置呢?遍历所有的格子,如果有格子的数字为0,那么就有空位置,全部遍历完都没有为0的数字的话,就没有空位置,代码如下

function nospace(board) {
    for (var i = 0; i < 4; i++) {
        for (var j = 0; j < 4; j++) {
            if (board[i][j] == 0) {
                return false;
            }
        }
    }
    return true;
}

回到generateOneNumber函数中,判断完后,就该生成数字了。生成数字有两步,先随机生成一个空位置,再随机生成一个数字。

先来看第一步,怎么随机生成一个空位置呢?由于每个格子的坐标都是从0开始的(从html处编写的grid_cell的id也可以看出),所以坐标值的话就随机取[0,1,2,3]即可,此处采用Math.random(),该语句代表随机生成0到1的数,所以将它*4后再取floor即可,由于此处生成的还是浮点型数据,我们采用一个parseInt将其改成整型数据。

范围取好后,再决定随机取哪个位置。此处我们定义一个变量times来代表循环次数,设置一个步数50步。循环中,我们就采用一个if语句便可以完成,该位置没有数字就跳出循环,有数字就继续寻找。如果50步仍然没有找到空位置,那么我们就人为地利用两个for循环来寻找。

随机位置生成后,再随机生成数字。此处我们仍然使用Math.random()语句来完成,如果随机生成的数字小于0.5,就取2,否则就取4.

最后就是将该随机数字放进该随机位置,并且此处我们使用了一个动画来显示该数字。代码如下

function showNumberWithAnimation(i, j, randNumber) {
    var numberCell = $("#number_cell_" + i + "_" + j);
    numberCell.css({
        "background-color": getNumberBackgroundColor(randNumber), //当numberCell从没有数字变到有数字,或者从一个数字变成另一个数字时,该numberCell的css样式要发生改变
        "color": getNumberColor(randNumber)
    });
    numberCell.text(randNumber);

    numberCell.animate({
        "width": "100px",
        "height": "100px",
        "top": getPosTop(i, j),
        "left": getPosLeft(i, j)
    }, 50);
}

传入了3个参数,横纵坐标值以及该位置的数字。首先定义一个变量numberCell,由于该位置从没有数字变成有数字时,或者从一个数字变成另一个数字时,css样式会发生改变,所以此处仍然要定义一波该变量的背景颜色以及数字颜色,直接调用这两个函数就行,最后就是自定义动画了,宽高和位置照旧,然后赋予一个50ms的时间来完成该动画。

至此,generateOneNumber函数完成,再回到newgame函数中,最后还初始化了一个score,将其变为0。newgame函数也完成。这时我们已经完成了整个页面的布局,效果图应该是和最开始放的那张图一样。

然后我们要编写的就是操作上下左右的程序了。首先编写一个键盘keydown的事件,代码如下

$(document).keydown(function (event) {
    switch (event.keyCode) { //键盘敲击事件,此处为keyCode不是keycode
        case 37: //左
            if (moveLeft()) {
                setTimeout("generateOneNumber()", 210); //先要判断是否能够向左动,向左动了后会随机产生一个数字,并判断游戏是否结束
                setTimeout("isgameover()", 300);
            }
            break;
        case 38: //上
            if (moveTop()) {
                setTimeout("generateOneNumber()", 210);
                setTimeout("isgameover()", 300);
            }
            break;
        case 39: //右
            if (moveRight()) {
                setTimeout("generateOneNumber()", 210);
                setTimeout("isgameover()", 300);
            }
            break;
        case 40: //下
            if (moveDown()) {
                setTimeout("generateOneNumber()", 210);
                setTimeout("isgameover()", 300);
            }
            break;
        default:
            break;
    }
})

这里首先要注意的是keyCode处的C是大写的,这个bug我当初找了好久…

先看向左动,首先写了一个if语句,如果可以向左动的话,那么会随机产生一个数字,并且需要判断会不会游戏结束,这个setTimeout我们留到后面一起讲。

先来看看moveLeft这个函数,代码如下

function moveLeft() {
    if (canMoveLeft(board)) {
        for (var i = 0; i < 4; i++) {
            for (var j = 1; j < 4; j++) {
                if (board[i][j] != 0) {
                    for (var k = 0; k < j; k++) {
                        if (board[i][k] == 0 && noBlockHorizontal(i, k, j, board)) { //寻找可以移动到的位置board[i][k]
                            showMoveAnimation(i, j, i, k); //添加移动时的动画
                            board[i][k] = board[i][j];
                            board[i][j] = 0;
                            continue;
                        } else if (board[i][k] == board[i][j] && noBlockHorizontal(i, k, j, board) && !hasConflicted[i][k]) {
                            showMoveAnimation(i, j, i, k);
                            board[i][k] += board[i][j];
                            board[i][j] = 0;
                            score += board[i][k]; //分数叠加
                            updateScore(score); //将分数动态传回#score
                            hasConflicted[i][k] = true; //每一次移动后都要将该位置是否存在冲突的属性设为true
                            continue;
                        }
                    }
                }
            }
        }
        setTimeout("updateBoardView()", 200); //由于每一次操作,board都会发生变化,所以每一次操作都要调用updateBoardView()
        return true;
    } else {
        return false;
    }
}

首先要判断能不能向左动,此处我们分析一下,最左边的那一列格子是肯定不能向左动的,所以我们只需要遍历右边的那三列就行,所以定义了一个新函数,代码如下

function canMoveLeft(board) {
    for (var i = 0; i < 4; i++) {
        for (var j = 1; j < 4; j++) {
            if (board[i][j] != 0) {
                if (board[i][j - 1] == 0 || board[i][j - 1] == board[i][j]) { //当board[i][j]处左边的格子没有数字或者数字和它自身相等时,该格子可以左移
                    return true;
                }
            }
        }
    }
    return false;
}

可以看到先遍历右边的三列,如果某个位置有数字的话,它什么情况下可以左移呢?如果它左边那个格子没有数字或者数字和它相等的话,是不是就可以左移了,该函数即可完成。

回到moveLeft函数,当可以左移时,我们就需要进行左移的操作了。照样我们遍历右边的三列,先找到某个有数字的位置board[i][j],然后它要左移的话是不是得先找到一个格子可以让它左移,所以此处给出一个for循环来寻找j左边的所有格子,再来一一判断。

如果找到了某个格子没有数字,并且他们俩之间没有障碍物,此时就可以进行左移的操作了。没有障碍物的函数代码如下

function noBlockHorizontal(row, col1, col2, board) {
    for (var i = col1 + 1; i < col2; i++) {
        if (board[row][i] != 0) {
            return false;
        }
    }
    return true;
}

就是寻找某一行的两列之间有没有数字为0,遍历一遍就行。再回到moveLeft函数,此处我们给移动的动作添加了一个动画,代码如下

function showMoveAnimation(fromx, fromy, tox, toy) {
    var numberCell = $("#number_cell_" + fromx + "_" + fromy);
    numberCell.animate({
        "top": getPosTop(tox, toy),
        "left": getPosLeft(tox, toy)
    }, 200);
}

就是简单的用到了四个坐标值而已,然后添加了200ms的时间来完成该动画。

再回到moveLeft函数,添加完动画后,将board[i][k]处的数字由0变成board[i][j]的数字,并且board[i][j]自己的数字变为0 。

然后当board[i][k]处的数字等于board[i][j]的数字时,照样先添加一个动画,然后board[i][k]处的数字加上board[i][j]的数字,board[i][j]的数字也变为0,分数同时也会叠加,并且分数要动态地传回score中,所以此处定义了一个函数,代码如下

function updateScore(score) {
    $("#score").text(score);
}

再回到moveLeft函数,hasConflicted后面再讲,我们之前讲过,每做一次操作就需要调用updateBoardView函数,所以在此处循环完后,调用一次该函数,此处设置了一个200ms的setTimeout,是因为我们在showMoveAnimation函数中给动画添加的完成时间是200ms,如果我们不给updateBoardView添加一个200ms的延迟的话,就会发现动画还没完成,数字就已经显示出来了。

至此,moveLeft就已经讲完了,后面的moveRight,moveTop,moveDown大家可以自己试着写一下,就不细讲了,此处我给出moveRight的代码

function moveRight() {
    if (canMoveRight(board)) {
        for (var i = 0; i < 4; i++) {
            for (var j = 2; j >= 0; j--) {
                if (board[i][j] != 0) {
                    for (var k = 3; k > j; k--) {
                        if (board[i][k] == 0 && noBlockHorizontal(i, j, k, board)) {
                            showMoveAnimation(i, j, i, k);
                            board[i][k] = board[i][j];
                            board[i][j] = 0;
                            continue;
                        } else if (board[i][k] == board[i][j] && noBlockHorizontal(i, j, k, board) && !hasConflicted[i][k]) {
                            showMoveAnimation(i, j, i, k);
                            board[i][k] += board[i][j];
                            board[i][j] = 0;
                            score += board[i][k];
                            updateScore(score);
                            hasConflicted[i][k] = true;
                            continue;
                        }
                    }
                }
            }
        }
        setTimeout("updateBoardView()", 200);
        return true;
    } else {
        return false;
    }
}

此处有一个地方稍微需要思考一下,为什么在第二个for循环处j是从大往小写,而不是跟moveLeft处一样从小到大遍历?

答案揭晓!如果此处是从小到大遍历的话,我们玩的时候会发现一个问题,当左边两列或者三列有数字时,这时我们按右键,会发现最左边的那一列不会右移,为什么呢?因为j从0开始循环的话,算法会发现最左边一列的右边有数字,无法右移,所以右移的算法应该要先从最右边开始遍历,等右边的数字移动完了再移动左边的。

同理,下面的那个定义k的for循环也就得跟着从大往小变化。

当其他的几个操作编写完之后,我们在键盘keydown事件中还编写了一个isgameover函数,此时来定义它,代码如下

function isgameover() {
    if (nospace(board) && nomove(board)) {
        alert("game over"); //当没有空位且不能移动时游戏结束
    }
}

什么时候会gameover呢?当所有的格子都有数字且都不能移动时,游戏就结束了,我这里就简答地写了一个弹窗,nomove函数的代码如下

function nomove(board) {
    if (canMoveLeft(board) || canMoveRight(board) || canMoveTop(board) || canMoveDown(board)) {
        return false;
    }
    return true;
}

我们之前已经定义了判断是否可以左移右移上移下移的函数,这里直接调用就行。

现在理论上是可以玩了,但是我们玩的时候还会发现一个问题。例如现在某一行数字是这样的,2,2,4,8,这时我们按左移的话,如果是原版2048,这里会变成4,4,8,0。但是我们编写的程序会直接变成16,0,0,0。所以我们得编写一个功能让某个格子在一次操作时该格子的数字只能变化一次。

就是我们之前已经出现过的hasConflicted,当时我是说后面再讲,首先我们先定义一个空数组

var hasConflicted = []; //存放是否冲突的数组

由于它也是每个格子都有的属性,所以也得把它变成一个二维数组,这是newgame函数的代码

// 初始化
function newgame() {
    for (var i = 0; i < 4; i++) {
        for (var j = 0; j < 4; j++) {
            var gridCell = $("#grid_cell_" + i + "_" + j); // 定义变量gridCell来编写每个格子的位置
            gridCell.css("top", getPosTop(i, j));
            gridCell.css("left", getPosLeft(i, j)); //只需定义格子的左上角即可
        }
    }

    for (var i = 0; i < 4; i++) {
        board[i] = [];
        hasConflicted[i] = [];
        for (var j = 0; j < 4; j++) {
            board[i][j] = 0; //把board定义为二维数组来更方便地表达出每个格子,board为0即这个格子没有数字,不为0即有数字
            hasConflicted[i][j] = false; //初始化时需要将每个格子是否冲突的属性定义为false
        }
    }

    updateBoardView(); //定义此函数来将数字放到该格子中

    generateOneNumber(); //每次初始化游戏都会随机产生两个数字
    generateOneNumber();

    score = 0; //初始化
    updateScore(score);
}

初始化当然要将它的属性设为false,也就是这个格子还没有变化过,然后我们为了防止上述问题的出现,就得在每次操作时加上一个判定

function moveLeft() {
    if (canMoveLeft(board)) {
        for (var i = 0; i < 4; i++) {
            for (var j = 1; j < 4; j++) {
                if (board[i][j] != 0) {
                    for (var k = 0; k < j; k++) {
                        if (board[i][k] == 0 && noBlockHorizontal(i, k, j, board)) { //寻找可以移动到的位置board[i][k]
                            showMoveAnimation(i, j, i, k); //添加移动时的动画
                            board[i][k] = board[i][j];
                            board[i][j] = 0;
                            continue;
                        } else if (board[i][k] == board[i][j] && noBlockHorizontal(i, k, j, board) && !hasConflicted[i][k]) {
                            showMoveAnimation(i, j, i, k);
                            board[i][k] += board[i][j];
                            board[i][j] = 0;
                            score += board[i][k]; //分数叠加
                            updateScore(score); //将分数动态传回#score
                            hasConflicted[i][k] = true; //每一次移动后都要将该位置是否存在冲突的属性设为true
                            continue;
                        }
                    }
                }
            }
        }
        setTimeout("updateBoardView()", 200); //由于每一次操作,board都会发生变化,所以每一次操作都要调用updateBoardView()
        return true;
    } else {
        return false;
    }
}

可以看到在else if中最后还加了一个!hasConflicted[i][k],意思是该位置还没有变化过,可以移动,然后将它的属性设为true,这时该位置在这一次循环时就已经不能再变化了,这时上述问题就已经解决好了。那么在这次操作完后在哪将它的属性由true变回false呢?我们不是调用了一个updateBoardView函数了嘛,在这里将它设置回去就可以了,一定要记得设置回去,不然下次操作这个位置就不能变化了。

function updateBoardView() {
    $(".number_cell").remove(); //由于每一次操作都要调用该函数,所以每次调用之前都要先将上次操作后产生的数字清除
    for (var i = 0; i < 4; i++) {
        for (var j = 0; j < 4; j++) {
            $("#grid_container").append("<div class='number_cell' id='number_cell_" + i + "_" + j + "'>"); //给每个格子添加数字
            var theNumberCell = $("#number_cell_" + i + "_" + j); //定义该变量来编写每个格子中数字的css样式
            if (board[i][j] == 0) {
                theNumberCell.css("width", "0"); //当该位置没有数字时,宽高设为0就行
                theNumberCell.css("height", "0");
                theNumberCell.css("top", getPosTop(i, j));
                theNumberCell.css("left", getPosLeft(i, j));
            } else {
                theNumberCell.css("width", "100px");
                theNumberCell.css("height", "100px");
                theNumberCell.css("top", getPosTop(i, j));
                theNumberCell.css("left", getPosLeft(i, j));
                theNumberCell.css("background-color", getNumberBackgroundColor(board[i][j])); //定义该函数来存放不同数字的背景颜色
                theNumberCell.css("color", getNumberColor(board[i][j])); //定义该函数来存放不同数字的颜色
                theNumberCell.text(board[i][j]); //将数字值赋予给相应的格子
            }
            hasConflicted[i][j] = false; //由于每一次操作都要调用该函数,所以每次调用之前都要先将每个格子是否冲突的属性定义为false
        }
    }
}

然后我们之前还有个地方没讲,之前讲键盘keydown事件时还设置了两个setTimeout

$(document).keydown(function (event) {
    switch (event.keyCode) { //键盘敲击事件,此处为keyCode不是keycode
        case 37: //左
            if (moveLeft()) {
                setTimeout("generateOneNumber()", 210); //先要判断是否能够向左动,向左动了后会随机产生一个数字,并判断游戏是否结束
                setTimeout("isgameover()", 300);
            }
            break;
        case 38: //上
            if (moveTop()) {
                setTimeout("generateOneNumber()", 210);
                setTimeout("isgameover()", 300);
            }
            break;
        case 39: //右
            if (moveRight()) {
                setTimeout("generateOneNumber()", 210);
                setTimeout("isgameover()", 300);
            }
            break;
        case 40: //下
            if (moveDown()) {
                setTimeout("generateOneNumber()", 210);
                setTimeout("isgameover()", 300);
            }
            break;
        default:
            break;
    }
})

这里不加setTimeout的话,会导致已经弹窗游戏结束了,最后一个数字还没有生成,所以给它加一个时间,分别设置为210ms和300ms,这时就大功告成了。

最后再添加一个返回上一步Undo的操作。思路就是将每一步的数据(每个格子的值和得分)存入数组中,需要时读取出来即可。

首先定义两个空数组

let preValue = [];//存放每一步时每个格子的值
let preScore = [];//存放每一步时的得分

然后记录下每一步的数据。我是在每一次移动的函数中,在移动操作之前先读取当前位置的数据,例如下面这段代码就是在moveLeft函数的开头

for (let i = 0; i < 4; i++) {
    for (let j = 0; j < 4; j++) {
        preValue.push(board[i][j]);
    }
}
preScore.push(score);

然后在moveRight(),moveDown()和moveTop()的开头都加上这一段。之后就是书写undo函数。由于数据是倒着进数组的,所以读取时也要倒着读。其实这就是一个栈,后进先出。

function undo() {
    let obj = {};
    for (let i = 0; i < 4; i++) {
        for (let j = 0; j < 4; j++) {
            if (obj[board[i][j]]) {
                obj[board[i][j]]++;
            } else {
                obj[board[i][j]] = 1;
            }
        }
    }
    for (let key in obj) {
        if (key == 0 && obj[key] == 14) { //当场上只有两个格子有数字即newgame时,按下undo无反应
            return false;
        }
    }
    for (let i = 3; i >= 0; i--) {
        for (let j = 3; j >= 0; j--) {
            board[i][j] = preValue.pop();
        }
    }
    score = preScore.pop();
    updateBoardView();
    updateScore(score);
}

至此所有功能已经书写完。

代码已经上传到gitee上了,请自取:
https://gitee.com/azsx582/game-2048.git

第一次写这么长的博客,废话有点多,观众老爷们凑合着看吧。有错误的话欢迎大家指出来,共同进步!

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
一、J Query实例大全 1)AjaxJavaScript资源 1.JS+CSS仿腾讯QQ首页搜索框无刷新换肤效果代码 2.js+css简单后台二级树形菜单demo示例 3.JS+CSS美化经典Select选项框插件 4.JS+CSS通用一个页面同时三个焦点图轮换效果完整实例 5.JS+CSS网页版模拟QQ登录框界面特效示例 6.JS+flash立柱广告代码仿百度MP3搜索右侧可伸缩的立柱广告效果 7.JS版本黑色动感二级菜单导航模块代码 穿越火线游戏网 8.JS经典3款风格QQ客服在线浮动右侧与左侧代码 9.JS精简网页音乐播放器 浮动在页面顶部像工具栏 10.强JS网页版泡泡龙游戏下载 11.兼容各浏览器JS+CSS水平和垂直无缝图片滚动效果代码 12.漂亮暖色调js+flash平滑过渡大屏图片切换的广告代码 13.实用国外JS内容选项卡DEMO下载 14.推荐通用文字图片JS不间断滚动封装类 代替Marquee 15.站长推荐全新兼容DIV+CSS版中国地图 JS+DIV+CSS支持热点效果的中国地图 16.支持4级树形 展开菜单插件dTree原版下载 2)JQuery Tab 1.jQuery.Switchable常见网页UI组件(整合Tabs、Slide、Scrollable等插件) 2.jQuery层拖拽插件之jquery仿QQ空间的模块拖动功能插件下载 3.jQuery动感图标切换网页Tab选项卡导航代码 4.jquery封装Tab标签选项卡,内含动画版选项卡及滑动门 5.jQuery实现flash动感切换选项卡TAB插件示例 6.jquery制作自动播放的TAB切换特效 7.基于jQuery简单的Tab滑动门菜单代码(jQuery MoveTab) 8.简单jquery选项卡插件下载(支持鼠标移上切换、点击切换、Ajax方式切换等) 9.漂亮Tab插件之jQuery自动切换轮播Tab选项卡示例代码 10.实用jquery+CSS实现流畅tab切换效果(Coda-Slider 1.1.1)插件 11.实用jquery标签Tab插件下载可切换不同的颜色 12.推荐jquery仿淘宝网商品排行榜展示切换效果,适合电子商务网站使用 13.一款jQuery黑金钢动感Tab选项卡代码 14.站长推荐jQuery动画翻转选项卡(flip风格) 3)表单验证 1.jquery+css美化select下拉菜单插件(Stylish Select v0.3)下载 2.jQuery+CSS实现多项选择文本框的插件下载 3.jQuery表单验证插件EasyValidator 2.0带TIP提示效果 4.jQuery导航插件下载之支持三级的Menu暖色、动画、折叠功能的导航菜单 5.jquery美化CheckBox的插件下载 6.jQuery美化表单漂亮插件jqtransform下载 7.jquery强大表单字符输入限制插件jQuery AlphaNumeric下载 8.jQuery实现表格带排序功能的源码 9.jquery实现动感隐藏登录入口代码 10.jQuery限制input或texteara字符输入限制字数控制插件下载 11.jQuery支持三级菜单的酷华丽炫彩动感多级渐显菜单下载 12.jQuery制作登录按钮实现Ajax带状态提示 13.jvalidate无刷新表单验证插件示例下载 14.分享jquery无刷新多功能表单验证插件并漂亮美化表单及错误输入提示效果 15.简单jQuery+CSS实现验证表单红色提示效果 16.简单表单input输入框提示插件1.0下载 17.另种效果的jQuery EasyValidator表单验证插件demo示例下载 18.漂亮绿色多级动感仿flash效果的jquery网站导航菜单 19.实用jQuery列表多项选择插件 20.实用jquery实现鼠标滚轮控制改变文本框数字的插件 21.实用jquery使用ul模拟表单select列表效果 22.实用jQuery无限级导航菜单源码下载 23.适合于网站注册的jQuery用户注册条款插件下载(带特效) 24.提升用户体验jquery Ajax表单输入检测验证示例代码 25.推荐jQuery美化Select下拉单选框模拟插件V1.3.6版本下载 26.推荐jQuery美化select下拉框样式漂亮效果 27.下载jQuery网页表单美化修饰插件(jQtransForm美化表单) 28.一款jquery实现表单输入提示的Autobox插件(基于jquery.ui) 29.一款美化表单下拉列表、复选框等的jquery combobox插件实例 30.站长必备jquery实现combox自动筛选,高亮显示功能 4)菜单 1.jquery+CSS炫丽横向多级滑动导航菜单 2.jQuery+CSS漂亮蓝色三级菜单下载 3.jquery+css实现简洁两级横向导航菜单,带动态效果 4.jQuery+CSS实现竖形动感导航菜单效果 5.jquery+div漂亮SmartMenu下拉菜单气泡透明效果 6.jQuery+div实现flash炫彩菜单插件下载 7.jquery+div实用漂亮精致的多级导航栏菜单插件代码示例 8.jQuery+ul实现漂亮竖直下拉菜单 9.jquery仿google首页图标动画菜单效果实现模拟鼠标动画菜单的代码 10.jquery仿卓越亚马逊网鼠标移到按钮弹出菜单的效果代码 11.jquery浮动变化的个性菜单插件floatmenu下载 12.jQuery黑色风格仿Flash版下滑菜单效果 13.jquery黑色循环滚动菜单特效插件下载 14.jquery灰色简洁风格横向三级网站导航菜单 15.jquery简洁动感支持三级的黑色导航菜单 16.jquery类似TAB一样的动感菜单下载 17.jquery绿色动感滑动下拉多级导航菜单代码下载 18.jQuery美化复选框Checkbox和radio单选框的插件hcheckbox示例 19.jQuery漂亮Flash卡通动感菜单示例 20.jQuery漂亮动感二级网站导航菜单源码下载 21.jquery漂亮苹果系统动画效果的导航菜单示例 22.jquery平滑效果黑色横向与纵向多级下拉菜单插件(支持5级) 23.jquery实现的动感菜单导航条源码 24.jquery实用滚动下拉菜单代码 25.jquery鼠标移动出现下拉菜单及提示特效代码 26.jquery外国滚动型多级展开菜单插件(jGlideMenu)下载 27.jquery自由滚动切换 标签式导航菜单示例 28.博客Blog横向jquery动态滑动菜单插件示例 29.打包50种实例的大型树形菜单控件JSTree(基于jQuery)下载 30.打包两款实用jquery+div横向滑动的下滑菜单代码(兼容性好)下载 31.非常帅jquery仿雅虎网大菜单导航代码 32.分享jquery带阴影效果折叠菜单dropdown给大家 33.分享下载jquery+Css黑色风格版的手风琴菜单,带动感效果 34.分享一款jquery收缩展开的多级导航(附带手风琴效果示例) 35.国外漂亮动感jquery三级导航菜单插件(横向自动展开)下载 36.基于jquery美化表单效果的插件 37.兼容性好的jquery+div漂亮黑色动感下拉菜单 38.简单jquery背景滑动菜单插件示例 39.经典jQuery三级省、市、县级联菜单下载 40.漂亮jQuery+CSS橙黄色两级导航菜单示例下载 41.漂亮jQuery+CSS竖直菜单下拉展开菜单(手风琴)动画缓冲效果 42.漂亮jQuery四级滑出菜单插件带动画效果适合大多数网站 43.漂亮绿色jquery下拉菜单导航条源码下载 44.漂亮实用jquery绿色风格水平二级导航菜单 45.适合后台的jquery二级下滑菜单带展开与合拢功能 46.树形菜单jquery.popup支持文本框弹出层选择项插件 47.通用性强的jquery带箭头跟随的垂直菜单组(jquery vmenu)插件下载 48.推荐jQuery黑色多级横向菜单导航(带动画效果) 49.学习jQuery简单伸缩菜单代码实例 50.一款jquery仿flash滑动左侧菜单插件代码下载 51.一款jQuery实现伸缩型菜单源码下载 52.一款jQuery制作仿FLASH动感导航菜单效果(附PSD) 53.又一款jquery蓝色经典的三级动画网站菜单 54.又一款黑色风格jQuery支持多级的动感下拉菜单源码 55.增加用户体验之jQuery黑色下拉菜单插件下载 56.站长必备jQuery横向动感菜单代码下载 57.站长必备jQuery可展开与折叠的竖向手风琴内容展示菜单 58.支持3级的jquery天蓝色动画菜单下载,适合艺术类、儿童类网站使用 5)对话框 1.jquery仿div透明模态弹出窗插件下载 2.jquery实现多风格消息弹出框插件jGrowl下载 3.jQuery弹出层插件PopupDiv-v1.0下载(支持ajax、居中等效果) 4.jQuery炫淡入淡出效果DIV渐变居中弹出框插件下载 5.jquery黑色+蓝色风格DIV提示框示例 6.一款jQuery+DIV居中淡入淡出信息提示框示例 7.一款jQuery可拖动提示窗插件(对话框Dialog插件) 8.一款基于jQuery实现的多功能弹出窗插件weebox及示例代码 9.一款支持拖拽的jQuery层弹出窗口(TipsWindown1.0版本)下载 10.分享一款jquery Ajax弹出对话框插件SimpleModal 11.下载jQuery对话框Dialog弹出层插件演示与使用说明 12.实用jQuery漂亮浮动层插件,精美Dialog代码 13.带关闭按钮jquery+div消息弹出层代码例子 14.推荐jQuery+CSS实现图片放大浮动层带关闭按钮 15.通用jQuery对话框dialog或popup弹出层或提示窗口插件下载 6)工具提示 1.jquery+div随屏幕滚动特效(支持设置参数滚动) 2.jQuery字符插件之适合留言板的jquery文本框输入字符限制插件下载 3.jquery实现Tooltip提示(文字、链接、地图锚点),自带5种不同样式 4.jQuery实现支付宝隐藏层提示信息内容的功能 5.jquery实现鼠标划过网址名称显示网站截图功能 6.jQuery带Tips动画提示通用表单验证插件下载(jquery validate),动画效果漂亮 7.jQuery鼠标移到下载地址滑出气泡提示效果的插件 8.又一款jquery实现链接Tip演示下载 9.常用jQuery弹出式链接提示效果Tooltip源码下载 10.相当牛的jQuery动感TipBox,鼠标移上去会动的提示框哦 11.简单实用jQuery用于登录弹出层例子代码(带动画的弹出层) 12.综合jquery实现表格隔行换色和鼠标经过提示效果源码 7)日历插件 1.jQuery简洁漂亮点阵数字时钟显示日期的插件 2.一款简单jQuery日历选择器代码 3.基于jquery实现倒计时钟插件下载,Flip-Down Clock特效效果 4.基于jquery实现多功能日历插件(weekcalendar)1.2版本下载 5.实用漂亮jQuery网页日历插件datePicker下载 6.简洁实用jquery日期选择插件之jQuery datePicker下载 8)图片展示 1.2款jQuery图片自动切换常用广告代码 2.jquery+css五屏焦点图淡入淡出+圆形按钮切换广告图片代码 3.jQuery+CSS实用图片收缩与放大效果插件 4.jquery+div实现同时滑动切换的图文展示特效插件下载 5.jquery+div带动画按钮图片手动与自动切换的特效代码 6.jquery一页多用的飞飞图片幻灯插件演示 7.jquery仿flash产品图片多角度展示特效代码 8.jquery仿flash图片放大相册的插件代码(Zoomer Gallery)下载 9.jquery仿flash的图片幻灯片播放特效实例完整版 10.jquery仿LightBox图片盒子单击逐渐放大的图片展示的插件下载 11.jquery仿Lightbox的插件jQuery UI.ariaLightbox点击图片放大显示插件下载 12.jQuery仿动感flash自动滚动图片切换广告插件 13.jQuery仿新浪新闻图片浏览器(支持鼠标左右滚动控制图片切换) 14.jquery仿苏宁易购商城产品图片全方位展示功能 15.jquery制作漂亮按钮示例打包 16.jQuery动态切换网页背景的大块图片的导航栏代码 17.jquery图文排行混合互相切换效果(仿Vancl效果) 18.jQuery图片插件之鼠标放在图片上出现动态的hover效果插件 19.jQuery图片自动轮播淡入淡出的幻灯插件iFadeSlide 20.jQuery大气banner带时间线自动播放的焦点图轮番切换代码 21.jquery定时自动切换banner广告图片动画插件示例 22.jquery实现LightBox图片点击放大效果的图片盒子插件 23.jQuery实现slider图片滚动,单个滚动,成组滚动示例 24.jQuery实现产品图片循坏旋转的代码 25.jQuery实现动态图文分组排序切换源码 26.jQuery实现图片3D旋转特效插件 v1.1版本下载 27.jQuery实现图片3D立体感的前后轮番展示特效 28.jQuery实现图片取景器仿相机拍照功能的插件photoShoot 29.jQuery实现图片变色特效插件与实例下载如jquery图片变灰色 30.jquery实现图片可拖动展示的实例下载 31.jQuery实现拖动滚动条的缩略图排列插件下载 32.jQuery实现焦点图片Flash自动平滑渐变效果 33.jQuery实现鼠标移到链接提示显示图片功能插件 34.jquery实现鼠标经过链接放大图片特效代码 35.jquery实用Banner大图片横向切换效果 36.jquery实用产品图片展示动感切换效果源码 37.jquery平滑交换真彩色的图片逐渐变为黑白图像的代码 38.jquery异步加载图片的插件jqGalScroll下载 39.jquery微型相册插件Micro Image Gallery下载 40.jQuery把图片放大及变亮特效插件下载 41.jquery拖动滚动条控制图片滚动及图片放大特效的示例 42.jquery旋转式图片切换并带图片放大功能 43.jQuery漂亮网页右上角双层撕角广告代码 44.jquery漂亮网页布局综合定时器、切换间隔、滚动时间、滚动图片个数等示例 45.jQuery演示Ajax加载并显示图片的相片画廊实例 46.jQuery版Sexy Lightbox 2.3内容修饰框插件下载(支持HTML,flash,图片,视频等) 47.jquery版自动滚动图片动画特效插件可处理图片JSON数据源 48.jQuery电子商务网站产品展示插件之仿苏宁易购商城产品图展示特效 49.jquery相册播放器插件实现无序图片列表转换成有序并播放 50.jQuery移动网页背景图浮云流水特效 51.jquery简单控制上下、左右四方向滚动的特效插件下载 52.jquery缩略图滚动特效之带小图的网页元素滚动轮播插件 53.jquery网站顶部滑动广告插件 54.jquery自动播放图片滚动漂浮式效果的示例 55.jquery贴图旋转及缩放插件下载 56.jquery门户网站首页全屏弹性伸缩至小屏的广告代码(非常实用) 57.jQuery黑色动感Ajax无刷新动态分组图片效果代码 58.jquery黑色风格左右带箭头的图片浏览控制插件下载 59.jQuery鼠标滑动图片显示标题与简介的滑动动感特效代码 60.jQuery鼠标移上小图显示大缩略图功能 61.js仿淘宝网鼠标经过缩略图放大图片效果的jQuery Fancy Hover Effect完整实例 62.Supersized jQuery全屏相册图片自动切换插件 63.[荐]jquery仿flash漂亮横向图片滚动效果完整版(兼容性非常好) 64.[荐]jQuery焦点图幻灯切换插件Tab选项卡(soChange 1.4)下载 65.一款jQuery仿flash放大图片的相册插件 66.一款jQuery仿苹果mac os系统经典菜单效果源码 67.一款jQuery动感左右滚动图片切换插件带缩图一起滚动 68.一款jQuery实现banner图片轮显、广告切换、图片幻灯插件EasySlide下载 69.一款jquery实现图片放大插件imgBox下载 70.一款jQuery实现漂亮精美相册插件源码 71.一款jQuery左右箭头控制大图滚动切换的代码 72.一款jquery常用产品图片放大效果插件下载 73.一款jQuery插件slide幻灯片切换图片宽高自适应 74.一款jQuery漂亮淡出淡入焦点大图切换源码 75.一款jquery缩略图商品切换放大展示功能插件 76.一款使用jQuery左右控制横向图片滚动的代码 77.一款基于jquery定时图片切换代码下载 78.一款实用经典jQuery图片切换展示插件下载 79.下载jQuery动感广告图片翻转插件(PictureRoll)示例版 80.下载JQuery淡入淡出效果插件InnerFade 81.下载jquery走马灯效果图片连续滚动的实例 82.几种简单实用jQuery焦点图片自动切换效果 83.分享jquery仿LightBox动感多样式图片放大插件zoomimage下载 84.分享jquery仿当当网店铺图片轮番切换(同时显示图片说明)代码下载 85.分享一款jQuery thumbnail惟美的图片Tip提示效果 86.分享一款jquery仿lightbox无刷新图片显示插件PrettyPhoto下载 87.分享多款jQuery图片预加载切换效果(上下滚动、淡入淡出渐变等) 88.动感十足jquery仿腾讯图片滚动浏览功能(带左右控制按钮)MovingBoxes插件下载 89.参考JQZOOM插件使用jQuery仿京东网产品展示切换及放大效果的代码 90.又一款jquery自动轮播焦点图+内容的广告代码 91.又一款非常不错的jQuery+div大气新闻图片切换插件代码(AnythingSlider)下载 92.基于jQuery带时间轴宽屏图片切换源码 93.基于jQuery的横向无缝图片滚动插件jcarousel 94.实用jquery焦点图源码2 95.常用jQuery新闻焦点图片切换效果插件 96.强大jQuery实现3D文字三维旋转效果代码下载 97.很帅的jquery焦点图切换源码可用于产品大图展示 98.很帅的jQuery鼠标移动预览图展示+简介内容展示特效代码 99.打包jQuery实用3个焦点图切换自动切换特效的代码 100.打包jquery拖动条拖动图片缩略图及放大图片效果插件(翻版thickbox插件) 101.打包基于jQuery对图片边框修饰插件示例下载(支持图片阴影效果、顶部banner效果、邮票边框、毛边相框、云朵包围效果) 102.推荐jquery仿Flash大banner图片切换播放特效,非常完美 103.推荐jQuery仿新浪QQ绝好图片轮播效果带左右控制插件 104.推荐jQuery兼容所有浏览器的自定义多样式图片幻灯片插件(KinSlideshow)下载 105.推荐jquery动画制作示例图片滚动和飞行乌鸦,车窗效果,非常强大 106.推荐jQuery实用缩略图广告效果插件下载 107.推荐jQuery模拟Windows视窗的效果实现相册图片拖动特效插件 108.推荐jQuery网站首页三幅banner切换大图广告自动滚动代码下载 109.推荐jQuery购物类产品图片放大插件jqzoom v2.0下载 110.推荐实用jquery图片截取代码下载 111.站长推荐jQuery产品展示专用的图片幻灯+缩略图、左右控制按钮实例下载 112.站长推荐一款非常精美的jQuery 1.4漂亮相册程序打包给大家 113.站长素材推荐jQuery带箭头控制左右图片滚动效果 114.第二款jQuery左右移动图片+内容展示插件代码 115.简单jQuery实现产品图片自动左右滚动插件下载 116.编辑推荐jQuery帅模拟图片翻页的展示Flash特效效果 117.适合网站内容推广淡入淡出特效的jQuery焦点图结合文字导航切换特效(很精美) 118.非常不错jQuery放大镜实例包下载(可放大图片与区域放大的AnythingZoomer插件) 119.非常不错jQuery网页内容图片分类插件带特效 120.非常实用的jquery幻灯切换广告源码 121.非常帅的jQeruy图片切换拖影变清淅的神奇特效 122.非常漂亮jQuery左右切换三屏大幅焦点图广告代码下载 二、CSS + DIV 1)CSS网页模版 1.一款DIV绿色效果网页模板 2.一款浅蓝色DIV+CSS企业软件宣传全站模板 3.一款深蓝色DIV商务网页模板 4.一款潮流前线CSS网页模板 5.一款简洁漂亮棕褐色网页模板(DIV+CSS实现) 6.一款纯DIV+CSS商店模板下载 7.一款纯DIV+CSS灰色风格的网页模板 8.个性网页模板之用花装饰的DIV网站模板打包 9.公司类模板下载之专业公司DIV+CSS网页模板 10.公司类网页模板推荐大气的公司CSS模板下载 11.博客模板下载之DIV+CSS实现纸张效果博客模板 12.博客模板下载之灰色blog模板 13.商业模板下载之纯DIV+CSS制作深褐色商务网页模板 14.圣诞节日网页模板之欢乐圣诞纯DIV网站模板下载 15.圣诞节模板下载之圣诞礼物CSS网页模板 16.室内装饰类企业网页模板下载 17.工程类公司DIV网页模板源码下载 18.整套完整版纯DIV+CSS律师事务所类整站全套模板 19.深蓝色DIV公司类网页模板下载 20.深蓝色网页模板整理2 21.漂亮HTML网页模板纯DIV编写 22.漂亮模板推荐之水鸭色DIV+CSS网页模板 23.漂亮纯DIV+CSS绿色风格网页模板 24.漂亮网页模板下载之DIV+CSS木质性网站模板 25.漂亮英文DIV+CSS餐厅网站模板源码 26.简单纯DIV橙色网页模板 27.纯DIV+CSS制作的黑绿风格植物类网站模板 28.纯绿色博客类DIV网页模板 29.经典黑色DIV公司网页模板 30.绿色清新效果DIV网页模板 31.网页博客模板下载之DIV+CSS黄色博客模板 32.适合旅游类DIV+CSS网站模板源码 2)DIV+CSS实例 1.CSS导航菜单之颜色淡绿色水平导航菜单源码 2.CSS橙色一级导航菜单示例 3.CSS绿色网站导航菜单 4.css菜单系列之纯CSS灰色下拉菜单源码 5.css菜单系列之纯CSS黄色垂直左栏导航菜单 6.DIV仿支付宝导航菜单实例 7.jQuery+CSS实现蓝色垂直导航菜单带提示效果 8.jQuery实现车门滑动效果菜单源码,很帅哦 9.Jquery经典插件收集 10.使用jquery实现清新蓝色CSS二级菜单 11.兼容IEFF浏览器不规则TAB选项卡源码 12.实用网站快速导航CSS按钮菜单源码(漂亮CSS导航按钮菜单) 13.强烈推荐一款jQuery+CSS仿iPhone手机面板导航效果源码 14.推荐实用OA系统左侧DIV+CSS菜单源码(漂亮OA界面菜单源码下载) 15.推荐实用的jQuery+CSS水平二级导航菜单源码(黑蓝效果) 16.政府类网站支持二级纯CSS导航菜单源码 17.漂亮CSS小图标mini导航效果 18.漂亮滑动透明效果CSS水平导航菜单源码 19.简单实用CSS蓝色垂直导航菜单(UL、LI结合实现) 20.简单实用亮黑色纯CSS水平导航菜单 21.纯CSS+图片实现橙色网站水平菜单实例 22.纯CSS实现棕黄色水平导航菜单源码 23.纯CSS实现水平梯形CSS导航菜单(很简单) 24.纯CSS实现蓝色圆角水平网站导航菜单 25.纯CSS实现黑色水平CSS导航菜单源码 26.纯CSS菜单系列之橙色块状水平导航类CSS菜单 27.纯DIV+CSS灰色网站导航菜单 自适应长度菜单背景 28.非常漂亮2010猪八戒网站导航菜单源码
史上最全韩顺平毕业班视频------这里只有10月份,8,9,11月份在另外一个文件下。 传智播客PHP就业班视频课程列表 8-11 1.html介绍 html运行原理① 8-11 2.html运行原理② html文件基本结构 html元素和属性 8-11 3.符号实体 url说明 链接 发送电邮 8-11 4.图像 表格 实际应用-菜谱 课堂练习-课程表 8-11 5.无序列表 有序列表 框架 8-12 1.浮动窗口 表单及表单控件① 8-12 2.表单及表单控件② 8-12 3.多媒体页面 标签汇总① 地图映射1 8-12 4.多媒体页面 标签汇总① 地图映射2 8-12 5.多媒体页面 标签汇总① 地图映射3 8-12 6.多标签汇总② 线包字效果 测试题 8-13 1.div+css开山篇 8-13 2.初识css 类选择器 id选择器 html选择器 8-13 3.通配符选择器 父子选择器 8-13 4.选择器使用细节 块元素?托心谠? 盒子模型 盒子模型经典应用① 8-13 5.盒子模型经典应用② 作业布置 8-15 1.div+css作业评讲① 8-15 2.div+css作业评讲② 8-15 3.div+css作业评讲③ 8-15 4.浮动 8-15 5.网站推荐 定位 8-15 6.仿sohu首页面布局 可爱屋首页面 8-16 1.动态网页技术介绍 php基本介绍 8-16 2.php快速入门 bs和cs介绍 8-16 3.web服务器介绍 apache服务器安装 8-16 4.apache服务器使用及配置① 启动和停止 端口配置 8-16 5.apache服务器使用及配置② apache目录结构 8-16 6.apache服务器使用及配置③ apache虚拟目录 8-17 1.apache服务器使用及配置④ apache虚拟主机 web访问时序图 8-17 2.apache服务器使用及配置⑤ 作业点评 提出apache和php整合的需求 8-17 3.php开发环境的搭建和使用① appserv套件安装 8-17 4.php开发环境的搭建和使用② 自定义安装 8-17 5.php开发环境的搭建和使用③ 安装并配置discuz论坛 8-19 1.解答学生问题--一个ip绑定多个域名 8-19 2.php运行过程时序图 php书写规范 8-19 3.php基本语法介绍 php数据类型介绍 8-19 4.整型细节说明 8-19 5.布尔细节 浮点数细节 字符串细节 算术运算符① 8-19 6.算术运算符② 比较运算符 逻辑运算符 8-20 1.三元运算符 类型运算符 运算符优先级 8-20 2.顺序控制 分支控制(if ifelse switch) 程序流程图 8-20 3.循环控制①(for) 8-20 4.循环控制②(while dowhile) 打印金字塔案例 8-20 5.打印金字塔案例评讲 布置练习题 8-22 1.break语句 continue语句 常量 8-22 2.函数基本概念 函数快速入门 8-22 3.函数使用函数调用初步理解 8-22 4.函数调用深入理解 函数使用注意事项① 8-22 5.函数使用注意事项② 函数作业布 8-23 1.函数再回顾 自定义函数 8-23 2.位运算① 8-23 3.位运算② 8-23 4.数组介绍 数组的创建 ?榈谋槔? 8-23 5.数组的引用 数组使用细节① 8-23 6.数组使用细节② 数组运算符 数组作业评讲① 数组小结 8-24 1.回顾 8-24 2.选择排序 插入排序 快速排序 8-24 3.选择排序 插入排序 快速排序 8-24 4.顺序查找 二分查找 8-24 5.多维数组 数组作业评讲② 8-24 6.数组作业评讲③ 8-24 7.类与对象的基本概念 8-26 1.成员属性 如何创建对象 8-26 2.对象在内存中存在形式 函数传递对象方式 8-26 3.函数传递基本数据类型和数组方式 成员方法① 8-26 4.成员方法② 8-26 5.作业评讲 8-27 mysql1 8-27 mysql2 8-28 1.mysql 8-28 2.mysql 8-28 3.mysql 8-28 4.mysql 8-28 5.mysql 8-28 6.mysql 8-30 1.mysql 8-30 2.mysql 8-30 3.mysql 8-30 4.mysql 8-30 5.mysql 8-31 1 8-31 2.外键、索引 8-31 3.事务处理 8-31 4 8-31 5 8-31 6 9-10 1.回顾 9-10 2.错误和异常处理介绍 处理错误方式①-die 9-10 3.处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 9-13 1.http协议深度剖析②-http响应详解(302 304码运用) 9-13 2.http协议深度剖析③-http响应详解(禁用缓存设置) 9-13 3.http协议深度剖析④-http响应详解(文件下载) 9-13 4.http协议深度剖析⑤-http响应详解(作业评讲) 9-13 5.php数据库编程①-使用mysql扩展库 9-13 6.php数据库编程②-使用mysql扩展库 9-13 7.php数据库编程③-使用mysql扩展库 9-14 1.回顾 9-14 2.php数据库编程④-使用mysql扩展库(在线词典案例) 9-14 3.php数据库编程⑤-使用mysql扩展库(在线词典案例) 9-14 4.php数据库编程⑥-使用mysqli扩展库 9-14 5.php数据库编程⑦-使用mysqli扩展库 9-14 6.php数据库编程⑧-使用mysqli扩展库(布置练习) 9-14 7.php数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制) 9-17 1.回顾 9-17 2.php数据库编程(10)-使用mysqli扩展库增强(预处理技术) 9-17 3.php数据库编程(11)-使用mysqli扩展库增强(预处理技术) 9-17 4.预定义全局数组①-原理分析 $_GET 9-17 5.预定义全局数组②-$_POST $_REQUEST 9-17 6.预定义全局数组③-$_SERVER $_ENV $GLOBALS 9-17 7.zend studio使用 项目开发五个阶段 雇员管理系统① 9-19 1.回顾 9-19 2.雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层模式雇员分页 9-20 3.雇员管理系统⑦-分层模式整体翻页 9-20 4.雇员管理系统⑧-分层模式通用分页模块 9-20 5.雇员管理系统⑨-mvc模式介绍 9-21 1.回顾 9-21 2.mvc模式①-用mvc模式改进网站结构 9-21 3.mvc模式②-用mvc模式改进网站结构 9-21 4.cookie①-cookie原理介绍 创建cookie 获取cookie 9-21 5.cookie②-更新cookie 删除cookie cookie运用案例 9-21 6.cookie③-雇员管理系统使用cookie技术 1.显示上传登录时间2.保留登录id 9-23 1回顾 9-23 2.session①-session原理介绍 保存session 9-23 3.session②-获取session 更新session 删除session session细节和原理深入讨 9-23 4.session③-购物车 cookie禁用后如何使用session session防用户非法登录 9-23 5.session④-验证码防恶意攻击 9-23 6.session⑤-session配置 session的gc机制 自定义session处理器 9-24 0.回顾 9-24 1.回顾2 9-24 2.php文件编程①-文件操作原理 如何获取文件信息 如何读文件 9-24 3.php文件编程②-如何写文件 拷贝文件 创建和删除(文件夹、文件) 9-24 4.php文件编程③-文件的上传和下载 文件上传细节讨论 9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 javascript数据类型三大类型 9-26 5 javascript算术运算符及位运算 9-26 6 javascript三大流程控制 9-27 1 课程回顾 9-27 2 循环控制 金字塔的输出 9-27 3 循环控制 js的调试方法 9-27 4 函的数定义分类及使用 9-27 5 函数的调用 递归及深入使用 9-27 6 一维?榧笆樵谀诖嬷械拇嬖谛问? 9-27 7 常用数组的属性及使用方法 9-28 1课程回顾 9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程回顾 9-30 2 javascript的闭包 js变量作用域 9-30 3 仿级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 编?绦Q閤ml 9-5 3.php xml编程③-内部dtd 外边dtd dtd元素 dtd修饰符 9-5 4.php xml编程④-dtd属性 引用实体 参数实体 ide开发xml 9-5 5.php xml编程⑤-复杂的dtd综合练习 9-5 6.php xml编程⑥-dom基本概念 phpdom编程(1) 9-6 1.回顾 9-6 2.php xml编程⑦-phpdom编程(2) 9-6 3.php xml编程⑧-phpdom编程(3) 综合练习-基于xml的在线词典 9-6 4.php xml编程⑨-综合练习-基于xml的在线词典 phpdom使用xpath 9-6 5.php xml编程(10)-SimpleXML 9-7 1.回顾 9-7 2.析构方法 9-7 3.static关键字(静态变量) 9-7 4.static关键字(静态方法) 面向对象编程三大特性① 9-7 5.面向对象编程三大特性② 9-7 6.面向对象编程三大特性③ 9-9 1.回顾 9-9 2.面向对象编程三大特性④ 9-9 3.面向对象编程三大特性⑤ 抽象类 9-9 4.接口 9-9 5.继承与实现比较 final const 9-9 6.面向对象编程综合练习 10-10 1 课程回顾 10-10 2 正则表达式 10-10 3 正则表达式 子表达式 引用 反向捕获 10-10 4 正则表达式 元字符 语法 10-10 5 元字符 实例应用 10-10 6 供求信息网讲解1 10-10 7 供求信息网讲解2 10-11 1 供求信息网3 10-11 2 供求信息网4 10-11 3 供求信息网5 10-11 4 供求信息网6 10-15 1 zendframe手动部署 自动部署 10-15 2 zendframe架构讲解 10-15 3 view layout布局 10-15 4 view helper视图助手 10-15 5 遗留问题解决 10-15 6 zf重新部署 10-15 7 zf controller讲解 10-16 1 model讲解 controller view调用 10-16 2 投票系统讲解1 10-16 3 投票系统讲解2 10-16 4 投票系统讲解3 10-16 5 投票系统讲解4 10-18 1 模板技术讲解 10-18 2 smarty常用功能 10-18 3 smarty常用功能 10-18 4 smarty功能讲解 10-18 5 smarty流程控制 10-18 6 10-18 7 smarty include使用 10-19 1 smarty实例 注册 10-19 2 smarty实例 注册2 10-19 3 smarty实例 注册3 10-19 4 smarty 字符串 自定义插件 缓存 10-19 5 smarty 字符串 自定义插件 缓存 10-19 6 smarty实例应?? 10-19 7 smarty实例应用2 10-19 8 smarty实例应用3 10-20 1 smarty应用 更换网站皮肤 10-20 2 smarty应用 更换网站皮肤2 10-20 3 smarty应用 更换网站皮肤3 10-20 4 smarty应用 更换网站皮肤4 10-20 5 smarty二级联动 10-20 6 smarty完成静态化 10-20 7 10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 json 10-22 4 ajax如何处理json格式返回数据 10-22 5 ajax应用 省市联动 10-22 6 ajax应用 黄金市场报价 10-23 1 简易在线聊天室1 10-23 2 简易在线聊天室2 10-23 3 简易在线聊天室3 10-23 4 简易在线聊天室4 10-23 5 简易在线聊天室5 10-23 6 简易在线聊天室6 10-25 1 jquery框架 jquery对象与dom对象区别及混合使用 10-25 2 jquery id选择器 层次选择器 10-25 3 jquery过滤选择器及练习题讲解 10-25 4 内容过滤器 可见度过滤器及练习讲解 10-26 1 课程回顾 10-26 2 属性过滤选择器 10-26 3 子元素选择器 表单对象属性选择器 10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和兄弟元素的方法 10-27 6 练习题讲解 10-27 7 jquery和ajax整合使用的方法 10-29 1 svn安装及常用操作 10-29 2 svn常用操作 实例讲解1 10-29 3 svn常用操作 实例讲解2 10-29 4 svn常用操作 实例讲解3 10-29 5 svn常用操作 实例讲解4 10-30 1 linux简介 10-30 2 虚拟机安装 linux安装 10-30 3 常用命令 远程控制软件使用 10-30 4 vi编辑器使用 linux目录讲解 10-4 1 课程回顾 10-4 2 js面向对象多态 10-4 3 js内部对象和系统函数 10-4 5 js内部类 string array 10-4 6 js对象数组 常用系统函数 10-4 7 js事件 事件驱动机制 10-4 8 10-5 1 课程回顾 10-5 2 js dom编程 10-5 3 dom编程实例 乌龟抓鸡 10-5 4 dom编程实例 乌龟抓鸡2 10-5 5 dom层次关系 dom对象 10-5 6 dom实例讲解 小人行走 10-7 1 课程回顾 10-7 2 dom对象详解 10-7 3 dom对象详解2 10-7 4 document对象 10-7 5 乌龟抓鸡游戏加强版 10-7 6 常用dom对象node节点属性讲解 10-7 7 坦克大战初步讲解 10-8 1 课程回顾 乌龟抓鸡游戏bug修复 10-8 2 style对象 10-8 3 style对象实例讲解 10-8 4 form forms对象 img对象 link对象 table对象 10-8 5 table实例讲解 10-8 6 正则表达式 11-1 1 常用命令讲解 用户管理 运行级别 11-1 2 常用开发命令讲解2 11-1 3 常用开发命令讲解3 11-1 4 文件所在组 所有组 其它组讲解 11-2 lamp安装(php和apache的整合)2011-11-2-3 11-2 lamp安装之-mysql的安装和配置(2011-11-2-2) 11-2 rpm命令+samba安装(2011-11-2-5) 11-2 在linux下安装phpmyadmin软(2011-11-2-4) 11-5-1(上次课回顾) 11-5-2(页面静态化介绍) 11-5-3新闻管理系统(页面真静态) 11-5-4(真静态) 11-5-5(伪静态) 11-6 1(memcache原理介绍) 11-6 2-1(memcache的telnet操作,安装和基本使用) 11-6 2-2(memcach3的php的操作) 11-6 4(mysql数据库优化1) 11-6 5(mysql数据库优化 11-6 6(mysql数据库优化 11-8 商务网站项目1_1 11-8 商务网站项目1_2 11-8 商务网站项目1_3 11-9 商务网站项目2_1 11-9 商务网站项目2_2 11-9 商务网站项目2_3 11-9 商务网站项目2_4-单例模式 11-9 商务网站项目2_5 11-10 商务网站项目3_1 11-10 商务网站项目3_2 11-10 商务网站项目3_3 11-12 商务网站项目4_1 11-12 商务网站项目4_2 11-12 商务网站项目4_3-订单提交 11-13 商务网站项目4_4(没声音) 11-13 商务网站项目4_5 11-13 商务网站项目4_6 11-15 商务网站项目5_ec二次开发 11-17 yii_store项目1 11-19 yii框架_store项目 11-19 yii框架_store项目 11-19 yii框架_store项目 11-19 yii框架_store项目 11-19 yii框架_store项目 11-20-yii框架_store项目 11-20-yii_store项目 11-20-yii_store项目 11-20-yii_store项目 11-20-yii_store项目 11-22 yii_store项目 11-22 yii_store项目 11-23 yii_store项目 11-23 yii_store项目 11-24 yii_store项目 11-24 yii_store项目 11-24 yii_store项目 11-25 yii_store项目
传智播客PHP就业班视频课程列表 8-11 1.html介绍 html运行原理① 8-11 2.html运行原理② html文件基本结构 html元素和属性 8-11 3.符号实体 url说明 链接 发送电邮 8-11 4.图像 表格 实际应用-菜谱 课堂练习-课程表 8-11 5.无序列表 有序列表 框架 8-12 1.浮动窗口 表单及表单控件① 8-12 2.表单及表单控件② 8-12 3.多媒体页面 标签汇总① 地图映射1 8-12 4.多媒体页面 标签汇总① 地图映射2 8-12 5.多媒体页面 标签汇总① 地图映射3 8-12 6.多标签汇总② 线包字效果 测试题 8-13 1.div+css开山篇 8-13 2.初识css 类选择器 id选择器 html选择器 8-13 3.通配符选择器 父子选择器 8-13 4.选择器使用细节 块元素?托心谠? 盒子模型 盒子模型经典应用① 8-13 5.盒子模型经典应用② 作业布置 8-15 1.div+css作业评讲① 8-15 2.div+css作业评讲② 8-15 3.div+css作业评讲③ 8-15 4.浮动 8-15 5.网站推荐 定位 8-15 6.仿sohu首页面布局 可爱屋首页面 8-16 1.动态网页技术介绍 php基本介绍 8-16 2.php快速入门 bs和cs介绍 8-16 3.web服务器介绍 apache服务器安装 8-16 4.apache服务器使用及配置① 启动和停止 端口配置 8-16 5.apache服务器使用及配置② apache目录结构 8-16 6.apache服务器使用及配置③ apache虚拟目录 8-17 1.apache服务器使用及配置④ apache虚拟主机 web访问时序图 8-17 2.apache服务器使用及配置⑤ 作业点评 提出apache和php整合的需求 8-17 3.php开发环境的搭建和使用① appserv套件安装 8-17 4.php开发环境的搭建和使用② 自定义安装 8-17 5.php开发环境的搭建和使用③ 安装并配置discuz论坛 8-19 1.解答学生问题--一个ip绑定多个域名 8-19 2.php运行过程时序图 php书写规范 8-19 3.php基本语法介绍 php数据类型介绍 8-19 4.整型细节说明 8-19 5.布尔细节 浮点数细节 字符串细节 算术运算符① 8-19 6.算术运算符② 比较运算符 逻辑运算符 8-20 1.三元运算符 类型运算符 运算符优先级 8-20 2.顺序控制 分支控制(if ifelse switch) 程序流程图 8-20 3.循环控制①(for) 8-20 4.循环控制②(while dowhile) 打印金字塔案例 8-20 5.打印金字塔案例评讲 布置练习题 8-22 1.break语句 continue语句 常量 8-22 2.函数基本概念 函数快速入门 8-22 3.函数使用函数调用初步理解 8-22 4.函数调用深入理解 函数使用注意事项① 8-22 5.函数使用注意事项② 函数作业布 8-23 1.函数再回顾 自定义函数 8-23 2.位运算① 8-23 3.位运算② 8-23 4.数组介绍 数组的创建 ?榈谋槔? 8-23 5.数组的引用 数组使用细节① 8-23 6.数组使用细节② 数组运算符 数组作业评讲① 数组小结 8-24 1.回顾 8-24 2.选择排序 插入排序 快速排序 8-24 3.选择排序 插入排序 快速排序 8-24 4.顺序查找 二分查找 8-24 5.多维数组 数组作业评讲② 8-24 6.数组作业评讲③ 8-24 7.类与对象的基本概念 8-26 1.成员属性 如何创建对象 8-26 2.对象在内存中存在形式 函数传递对象方式 8-26 3.函数传递基本数据类型和数组方式 成员方法① 8-26 4.成员方法② 8-26 5.作业评讲 8-27 mysql1 8-27 mysql2 8-28 1.mysql 8-28 2.mysql 8-28 3.mysql 8-28 4.mysql 8-28 5.mysql 8-28 6.mysql 8-30 1.mysql 8-30 2.mysql 8-30 3.mysql 8-30 4.mysql 8-30 5.mysql 8-31 1 8-31 2.外键、索引 8-31 3.事务处理 8-31 4 8-31 5 8-31 6 9-10 1.回顾 9-10 2.错误和异常处理介绍 处理错误方式①-die 9-10 3.处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 9-13 1.http协议深度剖析②-http响应详解(302 304码运用) 9-13 2.http协议深度剖析③-http响应详解(禁用缓存设置) 9-13 3.http协议深度剖析④-http响应详解(文件下载) 9-13 4.http协议深度剖析⑤-http响应详解(作业评讲) 9-13 5.php数据库编程①-使用mysql扩展库 9-13 6.php数据库编程②-使用mysql扩展库 9-13 7.php数据库编程③-使用mysql扩展库 9-14 1.回顾 9-14 2.php数据库编程④-使用mysql扩展库(在线词典案例) 9-14 3.php数据库编程⑤-使用mysql扩展库(在线词典案例) 9-14 4.php数据库编程⑥-使用mysqli扩展库 9-14 5.php数据库编程⑦-使用mysqli扩展库 9-14 6.php数据库编程⑧-使用mysqli扩展库(布置练习) 9-14 7.php数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制) 9-17 1.回顾 9-17 2.php数据库编程(10)-使用mysqli扩展库增强(预处理技术) 9-17 3.php数据库编程(11)-使用mysqli扩展库增强(预处理技术) 9-17 4.预定义全局数组①-原理分析 $_GET 9-17 5.预定义全局数组②-$_POST $_REQUEST 9-17 6.预定义全局数组③-$_SERVER $_ENV $GLOBALS 9-17 7.zend studio使用 项目开发五个阶段 雇员管理系统① 9-19 1.回顾 9-19 2.雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层模式雇员分页 9-20 3.雇员管理系统⑦-分层模式整体翻页 9-20 4.雇员管理系统⑧-分层模式通用分页模块 9-20 5.雇员管理系统⑨-mvc模式介绍 9-21 1.回顾 9-21 2.mvc模式①-用mvc模式改进网站结构 9-21 3.mvc模式②-用mvc模式改进网站结构 9-21 4.cookie①-cookie原理介绍 创建cookie 获取cookie 9-21 5.cookie②-更新cookie 删除cookie cookie运用案例 9-21 6.cookie③-雇员管理系统使用cookie技术 1.显示上传登录时间2.保留登录id 9-23 1回顾 9-23 2.session①-session原理介绍 保存session 9-23 3.session②-获取session 更新session 删除session session细节和原理深入讨 9-23 4.session③-购物车 cookie禁用后如何使用session session防用户非法登录 9-23 5.session④-验证码防恶意攻击 9-23 6.session⑤-session配置 session的gc机制 自定义session处理器 9-24 0.回顾 9-24 1.回顾2 9-24 2.php文件编程①-文件操作原理 如何获取文件信息 如何读文件 9-24 3.php文件编程②-如何写文件 拷贝文件 创建和删除(文件夹、文件) 9-24 4.php文件编程③-文件的上传和下载 文件上传细节讨论 9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 9-26 2 javascript基本介绍 9-26 3 javascript变量 标识符规范 9-26 4 javascript数据类型三大类型 9-26 5 javascript算术运算符及位运算 9-26 6 javascript三大流程控制 9-27 1 课程回顾 9-27 2 循环控制 金字塔的输出 9-27 3 循环控制 js的调试方法 9-27 4 函的数定义分类及使用 9-27 5 函数的调用 递归及深入使用 9-27 6 一维?榧笆樵谀诖嬷械拇嬖谛问? 9-27 7 常用数组的属性及使用方法 9-28 1课程回顾 9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程回顾 9-30 2 javascript的闭包 js变量作用域 9-30 3 仿级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 编?绦Q閤ml 9-5 3.php xml编程③-内部dtd 外边dtd dtd元素 dtd修饰符 9-5 4.php xml编程④-dtd属性 引用实体 参数实体 ide开发xml 9-5 5.php xml编程⑤-复杂的dtd综合练习 9-5 6.php xml编程⑥-dom基本概念 phpdom编程(1) 9-6 1.回顾 9-6 2.php xml编程⑦-phpdom编程(2) 9-6 3.php xml编程⑧-phpdom编程(3) 综合练习-基于xml的在线词典 9-6 4.php xml编程⑨-综合练习-基于xml的在线词典 phpdom使用xpath 9-6 5.php xml编程(10)-SimpleXML 9-7 1.回顾 9-7 2.析构方法 9-7 3.static关键字(静态变量) 9-7 4.static关键字(静态方法) 面向对象编程三大特性① 9-7 5.面向对象编程三大特性② 9-7 6.面向对象编程三大特性③ 9-9 1.回顾 9-9 2.面向对象编程三大特性④ 9-9 3.面向对象编程三大特性⑤ 抽象类 9-9 4.接口 9-9 5.继承与实现比较 final const 9-9 6.面向对象编程综合练习 10-10 1 课程回顾 10-10 2 正则表达式 10-10 3 正则表达式 子表达式 引用 反向捕获 10-10 4 正则表达式 元字符 语法 10-10 5 元字符 实例应用 10-10 6 供求信息网讲解1 10-10 7 供求信息网讲解2 10-11 1 供求信息网3 10-11 2 供求信息网4 10-11 3 供求信息网5 10-11 4 供求信息网6 10-15 1 zendframe手动部署 自动部署 10-15 2 zendframe架构讲解 10-15 3 view layout布局 10-15 4 view helper视图助手 10-15 5 遗留问题解决 10-15 6 zf重新部署 10-15 7 zf controller讲解 10-16 1 model讲解 controller view调用 10-16 2 投票系统讲解1 10-16 3 投票系统讲解2 10-16 4 投票系统讲解3 10-16 5 投票系统讲解4 10-18 1 模板技术讲解 10-18 2 smarty常用功能 10-18 3 smarty常用功能 10-18 4 smarty功能讲解 10-18 5 smarty流程控制 10-18 6 10-18 7 smarty include使用 10-19 1 smarty实例 注册 10-19 2 smarty实例 注册2 10-19 3 smarty实例 注册3 10-19 4 smarty 字符串 自定义插件 缓存 10-19 5 smarty 字符串 自定义插件 缓存 10-19 6 smarty实例应?? 10-19 7 smarty实例应用2 10-19 8 smarty实例应用3 10-20 1 smarty应用 更换网站皮肤 10-20 2 smarty应用 更换网站皮肤2 10-20 3 smarty应用 更换网站皮肤3 10-20 4 smarty应用 更换网站皮肤4 10-20 5 smarty二级联动 10-20 6 smarty完成静态化 10-20 7 10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 json 10-22 4 ajax如何处理json格式返回数据 10-22 5 ajax应用 省市联动 10-22 6 ajax应用 黄金市场报价 10-23 1 简易在线聊天室1 10-23 2 简易在线聊天室2 10-23 3 简易在线聊天室3 10-23 4 简易在线聊天室4 10-23 5 简易在线聊天室5 10-23 6 简易在线聊天室6 10-25 1 jquery框架 jquery对象与dom对象区别及混合使用 10-25 2 jquery id选择器 层次选择器 10-25 3 jquery过滤选择器及练习题讲解 10-25 4 内容过滤器 可见度过滤器及练习讲解 10-26 1 课程回顾 10-26 2 属性过滤选择器 10-26 3 子元素选择器 表单对象属性选择器 10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和兄弟元素的方法 10-27 6 练习题讲解 10-27 7 jquery和ajax整合使用的方法 10-29 1 svn安装及常用操作 10-29 2 svn常用操作 实例讲解1 10-29 3 svn常用操作 实例讲解2 10-29 4 svn常用操作 实例讲解3 10-29 5 svn常用操作 实例讲解4 10-30 1 linux简介 10-30 2 虚拟机安装 linux安装 10-30 3 常用命令 远程控制软件使用 10-30 4 vi编辑器使用 linux目录讲解 10-4 1 课程回顾 10-4 2 js面向对象多态 10-4 3 js内部对象和系统函数 10-4 5 js内部类 string array 10-4 6 js对象数组 常用系统函数 10-4 7 js事件 事件驱动机制 10-4 8 10-5 1 课程回顾 10-5 2 js dom编程 10-5 3 dom编程实例 乌龟抓鸡 10-5 4 dom编程实例 乌龟抓鸡2 10-5 5 dom层次关系 dom对象 10-5 6 dom实例讲解 小人行走 10-7 1 课程回顾 10-7 2 dom对象详解 10-7 3 dom对象详解2 10-7 4 document对象 10-7 5 乌龟抓鸡游戏加强版 10-7 6 常用dom对象node节点属性讲解 10-7 7 坦克大战初步讲解 10-8 1 课程回顾 乌龟抓鸡游戏bug修复 10-8 2 style对象 10-8 3 style对象实例讲解 10-8 4 form forms对象 img对象 link对象 table对象 10-8 5 table实例讲解 10-8 6 正则表达式 11-1 1 常用命令讲解 用户管理 运行级别 11-1 2 常用开发命令讲解2 11-1 3 常用开发命令讲解3 11-1 4 文件所在组 所有组 其它组讲解 11-2 lamp安装(php和apache的整合)2011-11-2-3 11-2 lamp安装之-mysql的安装和配置(2011-11-2-2) 11-2 rpm命令+samba安装(2011-11-2-5) 11-2 在linux下安装phpmyadmin软(2011-11-2-4) 11-5-1(上次课回顾) 11-5-2(页面静态化介绍) 11-5-3新闻管理系统(页面真静态) 11-5-4(真静态) 11-5-5(伪静态) 11-6 1(memcache原理介绍) 11-6 2-1(memcache的telnet操作,安装和基本使用) 11-6 2-2(memcach3的php的操作) 11-6 4(mysql数据库优化1) 11-6 5(mysql数据库优化 11-6 6(mysql数据库优化 11-8 商务网站项目1_1 11-8 商务网站项目1_2 11-8 商务网站项目1_3 11-9 商务网站项目2_1 11-9 商务网站项目2_2 11-9 商务网站项目2_3 11-9 商务网站项目2_4-单例模式 11-9 商务网站项目2_5 11-10 商务网站项目3_1 11-10 商务网站项目3_2 11-10 商务网站项目3_3 11-12 商务网站项目4_1 11-12 商务网站项目4_2 11-12 商务网站项目4_3-订单提交 11-13 商务网站项目4_4(没声音) 11-13 商务网站项目4_5 11-13 商务网站项目4_6 11-15 商务网站项目5_ec二次开发 11-17 yii_store项目1 11-19 yii框架_store项目 11-19 yii框架_store项目 11-19 yii框架_store项目 11-19 yii框架_store项目 11-19 yii框架_store项目 11-20-yii框架_store项目 11-20-yii_store项目 11-20-yii_store项目 11-20-yii_store项目 11-20-yii_store项目 11-22 yii_store项目 11-22 yii_store项目 11-23 yii_store项目 11-23 yii_store项目 11-24 yii_store项目 11-24 yii_store项目 11-24 yii_store项目 11-25 yii_store项目

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值