<thead id="kdfuf"><font id="kdfuf"></font></thead>
<samp id="kdfuf"></samp>
    <nav id="kdfuf"><strong id="kdfuf"></strong></nav>
      中文字幕无码一区二区三区在线,久久精品人人做人人爽,国产一级内射无挡观看,十八禁在线黄色网站,日韩欧美国产另类久久久精品 ,少妇人妻偷人精品一区二区,久久午夜视频,亚洲春色AⅤ无码专区

      JavaScript制作貪吃蛇小游戲

      2022-1-25    前端達人

      目錄

      效果展示

      原理分析

       Game.js文檔

      Snake.js文檔

      Food.js文檔

      附上源代碼


      寫了這么久的代碼

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

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

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


      今天博主要給大家展現(xiàn)一個好玩的游戲

      貪吃蛇小游戲!

      嘿,你可別小瞧這東西!

      制作過程是從無到有

      等做完它

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


      效果展示

      原理分析

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

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

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

       如圖所示

       Game.js文檔

      所以我們在Game.js中添加表格節(jié)點

       
      
      1. function Game() {
      2. this.row = 25;
      3. this.col = 25;
      4. }
      5. Game.prototype.init = function() {
      6. this.dom = document.createElement('table');
      7. // 創(chuàng)建表格--父元素為document(頁面中創(chuàng)建表格)
      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中當蛇初始化時最左邊向右走的狀態(tài)

      如圖所示

       
      
      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. }

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

      因為蛇的長度先是不變的,而我們改變的也是改變這個四個格子的顏色,走一格頭部那一格顏色變?yōu)榉凵舶湍且桓竦念伾優(yōu)榘咨?


      接下來讓蛇通過我們按鍵來進行運動:放在一個監(jiān)聽事件內(nèi)

       
      
      1. // 設(shè)置鍵盤的事件監(jiān)聽
      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. }

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

       
      
      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. }


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

       
      
      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類,用來產(chǎn)生食物

       
      
      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來實現(xiàn)

       
      
      1. function Food(gameSnake) {
      2. var self = this;
      3. // 下面的 do-while 循環(huán)語句作用是先創(chuàng)建一個 row 和 col
      4. 然后判斷這個 row 和 col 是否在蛇的身上
      5. //do...while來創(chuàng)建食物
      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   作者:

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

      免責聲明:藍藍設(shè)計尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請及時與我們?nèi)〉寐?lián)系,我們立即更正或刪除。

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



      日歷

      鏈接

      個人資料

      藍藍設(shè)計的小編 http://www.tuitetiyu.cn

      存檔

      主站蜘蛛池模板: AV在线亚洲欧洲日产一区二区| 亚洲免费无码在线| 一二三四免费中文字幕| 国产成人亚洲精品专区高清| 中文字幕久久久人妻无码| V一区无码内射国产| 久久久婷婷五月亚洲97号色| 日韩欧美 a级| 久久伊人亚洲伊人色欲综合| 成人拍拍拍无遮挡免费视频| 国产69精品久久久久9999| 亚洲国产成人精品无码区二本| 精品国产免费第一区二区三区| 五月六月婷婷中文字幕在线| 日本猛少妇色XXXXX猛交| av网站在线看| 久久天天躁狠狠躁夜夜97| 国产一级 片内射视频播放麻豆| 无码精品国产91| 午夜毛片不卡免费观看视频 | 日本免费一级婬片A级中文字幕| 亚洲AV成人无码久久WWW| 亚洲欧美成aⅴ人在线观看| 江北区| 色婷婷久久综合中文久久一| 另类国产ts人妖系列视频| 免费视频一区二区三区四区| 欧美国产综合视频| 国内女主播自拍视频在线观看| 2021亚洲国产精品无码| 中文字幕av日韩精品一区二区| 秋霞电影网| 亚洲av永久无码精品天堂久久| 91精品久久久久久无码| 日韩曰批免费视频| 色噜噜人体337p人体| 亚洲国产精品一区二区成人片国内 | 国产日韩欧美亚洲精品中字 | 免费观看交性大片| 麻花豆传媒剧国产MV的特点| 南雄市|