亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS實戰(zhàn)面向?qū)ο筘澇陨咝∮螒蚴纠?/h1>
 更新時間:2021年12月02日 09:13:46   作者:四季奶青全糖去冰@  
大家好,本篇文章主要講的是JS實戰(zhàn)面向?qū)ο筘澇陨咝∮螒蚴纠?,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下哦,方便下次瀏覽

思考

第一步思考蛇分為幾個部分,蛇頭和蛇身體是怎么形成的。

第二步思考蛇是怎么運動的;如何通過鍵盤控制蛇的走向。

第三步思考游戲在什么情況下會結(jié)束。

第四步思考食物是怎么產(chǎn)生的,產(chǎn)生的位置和蛇的位置有什么需要注意的點。

第五步思考蛇是怎么吃到食物的;吃到后蛇的身體會變長,食物又會產(chǎn)生新的。

第六步做完以后多玩幾次,享受一下自己的勞動成果。?。。?/p>

一、貪吃蛇效果圖

二、貪吃蛇分析

2.1 開始游戲功能

當(dāng)用戶進入游戲主界面時,可在界面中下方顯眼的位置找到“start”按鈕,點擊后用戶可進行新游戲。獲取button變量,給它添加一個addEventListener('click', function() {})點擊事件。

btnstart.addEventListener('click', function() {
     btnstart.style.display = 'none';
     //調(diào)用中介類
     game = new Game();
     var table = document.querySelector('table');
     table.addEventListener('click', function() {
        //清除定時器
        clearInterval(game.timer);
        btnstop.style.display = 'block';
     })
});

2.2 運動功能

2.2.1 蛇的不同方向的運動

當(dāng)用戶點擊”開始游戲“按鈕后,蛇的方向默認(rèn)從左到右方向移動。

//當(dāng)前的direction接受willDirection   !??!
this.direction = this.willDirection;
 
//蛇的不同方向的運動
switch (this.direction) {
     case "R":
            //向右移動
            this.body.unshift({ "row": this.body[0].row, "col": this.body[0].col + 1 });
            break;
     case "D":
            //向下移動
            this.body.unshift({ "row": this.body[0].row + 1, "col": this.body[0].col });
            break;
     case "L":
            //向左移動
            this.body.unshift({ "row": this.body[0].row, "col": this.body[0].col - 1 });
            break;
     case "T":
            //向上移動
            this.body.unshift({ "row": this.body[0].row - 1, "col": this.body[0].col });
            break;
}

2.2.2 鍵盤控制方向運動功能

用戶可通過使用鍵盤上的上下左右方位鍵控制蛇的移動方向,蛇在控制的方向上進行直線前進。

Game.prototype.bindEvent = function() {
    var self = this;
    //鍵盤事件
    document.onkeydown = function(e) {
        switch (e.keyCode) {
            //按左鍵
            case 37:
                //先進行判斷(如果當(dāng)前的方向是向右移動,此時我們不能按左鍵)
                if (self.snake.direction == 'R') return;
                // self.snake.direction = 'L';
                self.snake.changeDirection('L');
                self.d = "L";
                break;
                //按上鍵
            case 38:
                if (self.snake.direction == 'D') return;
                self.snake.changeDirection('T');
                self.d = "T";
                break;
                //按右鍵
            case 39:
                if (self.snake.direction == 'L') return;
                self.snake.changeDirection('R');
                self.d = "R";
                break;
                //按下鍵
            case 40:
                if (self.snake.direction == 'T') return;
                self.snake.changeDirection('D');
                self.d = "D";
 
                break;
        }
 
    }
 
};

2.3 吃食物功能

2.3.1 食物的產(chǎn)生

食物的位置:遍歷蛇的row和col,然后和隨機生成的row和col進行判斷是否重合。

var self = this; //指的是window
    //下面的do-while循環(huán)語句作用是先創(chuàng)建一個row和col,在判斷這個是否在蛇身上
    do {
        //食物的位置
        this.row = parseInt(Math.random() * gameSnake.row);
        this.col = parseInt(Math.random() * gameSnake.col);
    } while ((function() {
        //遍歷蛇的row和col,然后和隨機生成的row和col進行判斷,是否重合
        for (var i = 0; i < gameSnake.snake.body.length; i++) {
        if (gameSnake.snake.body[i].row == self.row && gameSnake.snake.body[i].col == self.col) {
             return true;
          }
       }
       return false;
})());

2.3.2 吃食物的過程

當(dāng)界面任意位置出現(xiàn)食物,用戶使用方位鍵控制蛇移動到食物周圍,當(dāng)蛇頭碰到食物時則表示貪吃蛇吃到此食物,界面上會在任意位置出現(xiàn)下一個食物,用戶再次控制蛇去吃這一食物。

//如果當(dāng)前蛇的頭部沒有和食物重合就代表沒有吃到食物,此時進行尾部刪除;
if (this.body[0].row == game.food.row && this.body[0].col == game.food.col) {
      //如果重合了就代表吃到了,不進行尾部刪除,只有頭部增加了
      //創(chuàng)建新的食物
      game.food = new Food(game);
      //讓幀編號歸0,因為蛇會躥一下
      //吃到食物,加分?jǐn)?shù)
      game.score++;
      game.f = 0;
} else {
      this.body.pop();
}

2.4 死亡判定功能

當(dāng)蛇頭在前進方向上撞到墻壁或蛇頭吃到蛇身時,給出死亡判定,并彈框給出用戶本次游戲得分。

2.4.1 觸邊死亡判斷(撞墻了)

if (this.body[0].col > game.col - 1 || this.body[0].row > game.row - 1 || this.body[0].col < 0 || this.body[0].row < 0) {
        //右下左上
        alert('游戲結(jié)束,您當(dāng)前的總分為:' + game.score + '分');
        this.body.unshift();
        clearInterval(game.timer);
}

2.4.2?自己撞到自己

for (var i = 1; i < this.body.length; i++) {
    if (this.body[0].col == this.body[i].col && this.body[0].row == this.body[i].row) {
        alert('游戲結(jié)束,您當(dāng)前的總分為:' + game.score + '分');
        clearInterval(game.timer);
    }
}

2.5 暫停/繼續(xù)游戲功能

btnstop.addEventListener('click', function() {
    btnstop.style.display = 'none';
    game.timer = setInterval(function() {
    // 定時器里面的核心就是游戲的渲染本質(zhì),清屏-更新-渲染
    game.f++;
    // 清屏
    game.clear();
    // 蛇的運動/更新
    // 蛇的更新速度  當(dāng)蛇邊長的時候,速度加快
    var during = game.snake.body.length < 30 ? 30 - game.snake.body.length : 1;
    // 蛇的更新
    game.f % during == 0 && game.snake.update();
    // 渲染蛇
    game.snake.render();
    // 渲染食物
    game.food.render();
    }, 20);
})

總結(jié)

貪吃蛇小游戲項目,需要理清楚思路。

到此這篇關(guān)于JS實戰(zhàn)面向?qū)ο筘澇陨咝∮螒蚴纠奈恼戮徒榻B到這了,更多相關(guān)JS貪吃蛇小游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論