<address id="ttjl9"></address>

      <noframes id="ttjl9"><address id="ttjl9"><nobr id="ttjl9"></nobr></address>
      <form id="ttjl9"></form>
        <em id="ttjl9"><span id="ttjl9"></span></em>
        <address id="ttjl9"></address>

          <noframes id="ttjl9"><form id="ttjl9"></form>

          JavaScript制作貪吃蛇小游戲

          2022-1-25    前端達人

          目錄

          效果展示

          原理分析

           Game.js文檔

          Snake.js文檔

          Food.js文檔

          附上源代碼


          寫了這么久的代碼

          是否你和我一樣感到枯燥乏味了呢?

          是否沒有前進的動力了呢?

          別忘了當時的你躊躇滿志將前端Web一舉拿下的斗志??!


          今天博主要給大家展現一個好玩的游戲

          貪吃蛇小游戲!

          嘿,你可別小瞧這東西!

          制作過程是從無到有

          等做完它

          你就能從中體會到比玩游戲還快樂的居然是打代碼!


          效果展示

          原理分析

          我們制作前為了代碼更清晰就分成幾個js文檔來編寫。

          其中Game.js可以看作是一個媒介的作用;Snake.js是當蛇初始化時在最左邊向右走的狀態;

           貪吃蛇在游戲中的運動可以想象成這條蛇是在一張25*25的表格中運動:

           如圖所示

           Game.js文檔

          所以我們在Game.js中添加表格節點

           
          
          1. function Game() {
          2. this.row = 25;
          3. this.col = 25;
          4. }
          5. Game.prototype.init = function() {
          6. this.dom = document.createElement('table');
          7. // 創建表格--父元素為document(頁面中創建表格)
          8. // var tr, td;
          9. for (var i = 0; i < this.row; i++) { //追加行
          10. var tr = document.createElement('tr');
          11. for (var j = 0; j < this.td; j++) { //追加列
          12. var td = document.createElement('col');
          13. td.appendChild(tr);
          14. }
          15. }
          16. };

          Snake.js文檔






          Snake.js中當蛇初始化時最左邊向右走的狀態

          如圖所示

           
          
          1. function Snake() {
          2. // 蛇的初始化身體
          3. this.body = [
          4. { 'row': 3, 'col': 5 },
          5. { 'row': 3, 'col': 4 },
          6. { 'row': 3, 'col': 3 },
          7. { 'row': 3, 'col': 2 }
          8. ];
          9. }
          10. Snake.prototype.render = function() {
          11. // 蛇頭的渲染
          12. game.setColorHead(this.body[0].row, this.body[0].col.'pink');
          13. // 蛇身的渲染
          14. for (var i = 1; i < this.body.length; i++) {
          15. game.setColor(this.body[i].row, this.body[i].col, 'cyan')
          16. }
          17. }

          蛇在運動的時候它的原理是“頭增尾刪”。

          因為蛇的長度先是不變的,而我們改變的也是改變這個四個格子的顏色,走一格頭部那一格顏色變為粉色,尾巴那一格的顏色變為白色。


          接下來讓蛇通過我們按鍵來進行運動:放在一個監聽事件內

           
          
          1. // 設置鍵盤的事件監聽
          2. Game.prototype.bindEvent = function() {
          3. var self = this;
          4. document.addEventListener('keydown', function(e) {
          5. // 用ASCII碼值判斷鍵盤方向
          6. switch (e.keyCode) {
          7. case 37: //左
          8. if (self.snake.direction == 'R') return; // 先進行判斷,如果當前的方向是向右移動,此時我們不能按左鍵
          9. self.snake.changeDirection('L');
          10. self.d = 'L';
          11. break;
          12. case 38: //上
          13. if (self.snake.direction == 'D') return; // 先進行判斷,如果當前的方向是向下移動,此時我們不能按上鍵
          14. self.snake.changeDirection('U');
          15. self.d = 'U';
          16. break;
          17. case 39: //右
          18. if (self.snake.direction == 'L') return; // 先進行判斷,如果當前的方向是向左移動,此時我們不能按右鍵
          19. self.snake.changeDirection('R');
          20. self.d = 'R';
          21. break;
          22. case 40: //下
          23. if (self.snake.direction == 'U') return; // 先進行判斷,如果當前的方向是向上移動,此時我們不能按下鍵
          24. self.snake.changeDirection('D');
          25. self.d = 'D';
          26. break;
          27. }
          28. })
          29. }

          接下來我們判定蛇是否撞到墻而結束

           
          
          1. // 死亡的判斷,超出了表格邊緣的部分
          2. if (this.body[0].col > game.col - 1 || this.body[0].col < 0 || this.body[0].row > game.row - 1 || this.body[0].row < 0) {
          3. alert('撞到墻了哦,一共吃掉了' + game.score + '顆草莓');
          4. this.body.shift();
          5. clearInterval(game.timer);
          6. location.reload();
          7. }


          接下來我們判定蛇是否撞到自己而結束

           
          
          1. // 自己撞到自己的時候會判定死亡
          2. for (var i = 1; i < this.body.length; i++) {
          3. // 如果當前蛇的頭部和身體的某一個部位的 row 和 col 完全重合的時候
          4. if (this.body[0].row == this.body[i].row && this.body[0].col == this.body[i].col) {
          5. alert('撞到自己了,吃掉了' + game.score + '顆草莓');
          6. this.body.shift();
          7. clearInterval(game.timer);
          8. location.reload();
          9. }
          10. }

          Food.js文檔


          食物food類,用來產生食物

           
          
          1. function Food(gameSnake) {
          2. // 食物的位置
          3. this.row = parseInt(Math.random() * gameSnake.row)
          4. this.col = parseInt(Math.random() * gameSnake.col)
          5. }
          6. Food.prototype.render = function() {
          7. game.setHTML(this.row, this.col);
          8. }

          食物隨機生成在單元格中,利用do...while來實現

           
          
          1. function Food(gameSnake) {
          2. var self = this;
          3. // 下面的 do-while 循環語句作用是先創建一個 row 和 col
          4. 然后判斷這個 row 和 col 是否在蛇的身上
          5. //do...while來創建食物
          6. do {
          7. // 食物的位置
          8. this.row = parseInt(Math.random() * gameSnake.row)
          9. this.col = parseInt(Math.random() * gameSnake.col)
          10. } while ((function() {
          11. // 遍歷蛇的 row col 然后和 food 新隨機出來的 row col 進行判斷,是否重合
          12. for (var i = 0; i < gameSnake.snake.body.length; i++) {
          13. if (self.row == gameSnake.snake.body[i].row && self.col == gameSnake.snake.body[i].col) {
          14. return true;
          15. }
          16. }
          17. return false;
          18. })());
          19. }

          文章來源:csdn   作者:

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務



          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://www.syprn.cn

          存檔

          亚洲va欧美va天堂v国产综合