亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS實現的貪吃蛇游戲完整實例

2019-11-19 12:16:14
字體:
來源:轉載
供稿:網友

本文實例講述了JS實現的貪吃蛇游戲。分享給大家供大家參考,具體如下:

思想:

1、設計蛇:屬性有寬、高、方向、狀態(有多少節),方法:顯示,跑

2、設計食物:屬性寬、高

3、顯示蛇:根據狀態向地圖里加元素

4、蛇跑起來:下一節到前一節的位置,蛇頭根據方向變,刪除原來的蛇,新建蛇;當出界時,死亡,初始化;當蛇頭吃到自己的時候,死亡,初始化

5、食物被吃掉,蛇加一節,去掉原來的食物,生成新的食物

6、添加定時器,綁定按鍵

完整示例:

<!doctype html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport"     content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">  <meta http-equiv="X-UA-Compatible" content="ie=edge">  <title>Document</title>  <style type="text/css">    body {      margin: 0;      padding: 0;    }    .main {      width: 800px;      height: 400px;      margin: 50px auto;    }    .btn {      width: 100px;      height: 40px;    }    .map {      position: relative;      width: 800px;      height: 400px;      background: #ccc;    }  </style></head><body><div class="main">  <button class="btn" id="begin">開始游戲</button>  <div class="map" id="map"></div>  <script type="text/javascript">    var map = document.getElementById('map');    // 使用構造方法創建蛇,    function Snake()    {      // 設置蛇的寬、高、默認走的方向      this.width = 10;      this.height = 10;      this.direction = 'right';      // 記住蛇的狀態,當吃完食物的時候,就要加一個,初始為3個小點為一個蛇,      this.body = [        {x:2, y:0},  // 蛇頭,第一個點        {x:1, y:0},  // 蛇脖子,第二個點        {x:0, y:0}  // 蛇尾,第三個點      ];      // 顯示蛇      this.display = function() {        // 創建蛇        for (var i=0; i<this.body.length; i++) {          if (this.body[i].x != null) {  // 當吃到食物時,x==null,不能新建,不然會在0,0處新建一個            var s = document.createElement('div');            // 將節點保存到狀態中,以便于后面刪除            this.body[i].flag = s;            // 設置寬高            s.style.width = this.width + 'px';            s.style.height = this.height + 'px';            s.style.borderRadius = "50%";            s.style.background = "rgb(" + Math.floor(Math.random()*256) + "," + Math.floor(Math.random()*256) + "," + Math.floor(Math.random()*256) + ")";            // 設置位置            s.style.position = 'absolute';            s.style.left = this.body[i].x * this.width + 'px';            s.style.top = this.body[i].y * this.height + 'px';            // 添加進去            map.appendChild(s);          }        }      };      // 讓蛇跑起來,后一個元素到前一個元素的位置      // 蛇頭根據方向處理,所以i不能等于0      this.run = function() {        // 后一個元素到前一個元素的位置        for (var i=this.body.length-1; i>0; i--) {          this.body[i].x = this.body[i-1].x;          this.body[i].y = this.body[i-1].y;        }        // 根據方向處理蛇頭        switch(this.direction)        {          case "left":            this.body[0].x -= 1;            break;          case "right":            this.body[0].x += 1;            break;          case "up":            this.body[0].y -= 1;            break;          case "down":            this.body[0].y += 1;            break;        }        // 判斷是否出界,一蛇頭判斷,出界的話,        if (this.body[0].x < 0 || this.body[0].x > 79 || this.body[0].y < 0 || this.body[0].y > 39) {          clearInterval(timer);  // 清除定時器,          alert("你瞎嗎?撞死了!");          // 刪除舊的          for (var i=0; i<this.body.length; i++) {            if (this.body[i].flag != null) {  // 如果剛吃完就死掉,會加一個值為null的              map.removeChild(this.body[i].flag);            }          }          this.body = [  // 回到初始狀態,            {x:2, y:0},            {x:1, y:0},            {x:0, y:0}          ];          this.direction = 'right';          this.display();  // 顯示初始狀態          return false;  // 結束        }        // 判斷蛇頭吃到食物,xy坐標重合,        if (this.body[0].x == food.x && this.body[0].y == food.y) {          // 蛇加一節,因為根據最后節點定,下面display時,會自動賦值的          this.body.push({x:null, y:null, flag: null});          // 清除食物,重新生成食物          map.removeChild(food.flag);          food.display();        }        // 吃到自己死亡,從第五個開始與頭判斷,因為前四個永遠撞不到        for (var i=4; i<this.body.length; i++) {          if (this.body[0].x == this.body[i].x && this.body[0].y == this.body[i].y) {            clearInterval(timer);  // 清除定時器,            alert("傻子!你怎么能吃自己呢?");            // 刪除舊的            for (var i=0; i<this.body.length; i++) {              if (this.body[i].flag != null) {  // 如果剛吃完就死掉,會加一個值為null的                map.removeChild(this.body[i].flag);              }            }            this.body = [  // 回到初始狀態,              {x:2, y:0},              {x:1, y:0},              {x:0, y:0}            ];            this.direction = 'right';            this.display();  // 顯示初始狀態            return false;  // 結束          }        }        // 先刪掉初始的蛇,在顯示新蛇        for (var i=0; i<this.body.length; i++) {          if (this.body[i].flag != null) {  // 當吃到食物時,flag是等于null,且不能刪除            map.removeChild(this.body[i].flag);          }        }        // 重新顯示蛇        this.display();      }    }    // 構造食物    function Food()    {      this.width = 10;      this.height = 10;      this.display = function() {        var f = document.createElement('div');        this.flag = f;        f.style.width = this.width + 'px';        f.style.height = this.height + 'px';        f.style.background = 'red';        f.style.borderRadius = '50%';        f.style.position = 'absolute';        this.x = Math.floor(Math.random()*80);        this.y = Math.floor(Math.random()*40);        f.style.left = this.x * this.width + 'px';        f.style.top = this.y * this.height + 'px';        map.appendChild(f);      }    }    var snake = new Snake();    var food = new Food();    snake.display();  // 初始化顯示    food.display();    // 給body加按鍵事件,上下左右    document.body.onkeydown = function(e) {      // 有事件對象就用事件對象,沒有就自己創建一個,兼容低版本瀏覽器      var ev = e || window.event;      switch(ev.keyCode)      {        case 38:          if (snake.direction != 'down') {  // 不允許返回,向上的時候不能向下            snake.direction = "up";          }          break;        case 40:          if (snake.direction != "up") {            snake.direction = "down";          }          break;        case 37:          if (snake.direction != "right") {            snake.direction = "left";          }          break;        case 39:          if (snake.direction != "left") {            snake.direction = "right";          }          break;      }    };    // 點擊開始時,動起來    var begin = document.getElementById('begin');    var timer;    begin.onclick = function() {      clearInterval(timer);      // timer = setInterval(snake.run(), 500);  // 先執行run函數,把執行得到的結果,每500毫秒執行一次,不會在執行內部代碼      timer = setInterval("snake.run()", 500); // 小技巧,每500毫秒執行字符串,字符串執行內部代碼    };  </script></div></body></html>

使用在線HTML/CSS/JavaScript代碼運行工具http://tools.VeVB.COm/code/HtmlJsRun測試上述代碼,可得到如下運行效果:

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數學運算用法總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript數組操作技巧總結》、《JavaScript排序算法總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩va亚洲va欧洲va国产| 久久久999精品视频| 国产主播在线一区| 国产精品mp4| 97国产真实伦对白精彩视频8| 97在线看免费观看视频在线观看| 日本国产高清不卡| 亚洲在线免费视频| 亚洲最新在线视频| 91在线观看免费高清完整版在线观看| 在线视频亚洲欧美| 亚洲天堂男人天堂| 欧美成人精品三级在线观看| 国产精品电影网| 亚洲娇小xxxx欧美娇小| 亚洲专区中文字幕| 亚洲欧美三级在线| 国产精品久久久久久av福利| 国产精品视频网站| 欧美另类极品videosbestfree| 亚洲全黄一级网站| 午夜精品99久久免费| 高清欧美性猛交xxxx| 国产欧美va欧美va香蕉在| 精品亚洲精品福利线在观看| 亚洲国产91色在线| 国产97在线观看| 亚洲福利在线视频| 国产欧美精品一区二区| 欧美老女人性视频| 欧美极品少妇与黑人| 欧美成年人网站| 久久夜色精品亚洲噜噜国产mv| 久久久女人电视剧免费播放下载| 亚洲成人精品视频在线观看| 欧美限制级电影在线观看| 超碰精品一区二区三区乱码| 精品一区二区三区四区| 97久久久久久| 人人爽久久涩噜噜噜网站| 精品偷拍各种wc美女嘘嘘| 91chinesevideo永久地址| 欧美黄色小视频| 欧美精品少妇videofree| www.久久撸.com| 一本色道久久综合狠狠躁篇怎么玩| 亚洲欧洲国产精品| 欧美另类极品videosbest最新版本| 久久久这里只有精品视频| 久久久99免费视频| 97色在线视频观看| 97在线视频国产| 日韩av毛片网| 亚洲午夜久久久影院| 欧美日韩视频免费播放| xxxxx91麻豆| 不卡av电影院| 亚洲精品欧美一区二区三区| 久久国产精品免费视频| 久久成人综合视频| 久久精品电影一区二区| 亚洲国产小视频在线观看| 精品色蜜蜜精品视频在线观看| 欧美中文字幕在线播放| 亚洲一区二区久久| 久久久免费av| 国产专区欧美专区| 久久久电影免费观看完整版| 日韩av手机在线观看| 97福利一区二区| 91精品国产乱码久久久久久久久| 午夜精品www| 欧美视频13p| 日日狠狠久久偷偷四色综合免费| 欧美日韩中文字幕在线| 国产v综合ⅴ日韩v欧美大片| 色樱桃影院亚洲精品影院| 国产在线观看精品| 欧美日韩亚洲激情| 亚洲一区二区三区在线视频| 91丝袜美腿美女视频网站| 国产女人18毛片水18精品| 国产69久久精品成人| 欧美一级视频免费在线观看| 日韩在线免费观看视频| 欧美日韩国产色| 欧美极品在线播放| 91久久久久久久久久久| 日本一区二区三区四区视频| 欧美精品福利在线| 日韩欧美黄色动漫| 欧美激情第1页| 成人欧美一区二区三区在线湿哒哒| 国内外成人免费激情在线视频| 欧美精品电影免费在线观看| 亚洲欧美成人一区二区在线电影| 日韩av在线免播放器| 国产免费一区二区三区香蕉精| 日韩经典一区二区三区| 欧美日韩成人精品| 欧美大尺度激情区在线播放| 久久久极品av| 在线观看欧美成人| 国产情人节一区| 日韩精品在线免费| 青青青国产精品一区二区| 日韩亚洲欧美成人| 奇米四色中文综合久久| 国产精品日韩欧美| 亚洲一区二区中文| 日韩av黄色在线观看| 精品成人国产在线观看男人呻吟| 精品中文字幕乱| 97精品视频在线播放| 国产精品成人一区二区| 久久久久久一区二区三区| 欧美日韩中文字幕综合视频| 久久99久久久久久久噜噜| 亚洲欧美一区二区三区四区| 琪琪第一精品导航| 91大神在线播放精品| 精品久久久久久久久久久| 欧美午夜激情视频| www.亚洲一区| 日本三级久久久| 蜜臀久久99精品久久久无需会员| 欧美精品第一页在线播放| 欧美重口另类videos人妖| 日韩在线视频免费观看高清中文| 美乳少妇欧美精品| 欧美一性一乱一交一视频| 69av视频在线播放| 久久中文字幕视频| 亚洲欧美一区二区激情| 日本精品va在线观看| 久久韩剧网电视剧| 国产精品扒开腿做爽爽爽视频| 亚洲国产精品va在线看黑人动漫| 日日狠狠久久偷偷四色综合免费| 亚洲自拍偷拍网址| 亚洲美女性视频| 一级做a爰片久久毛片美女图片| 国产欧美精品一区二区三区-老狼| 久久综合免费视频| 91国内免费在线视频| 亚洲欧洲一区二区三区久久| 亚洲伊人第一页| 久久国产精品久久久久| 精品久久久久久亚洲精品| 国产成人在线精品| 色无极影院亚洲| 亚洲欧美999| 精品亚洲一区二区三区在线播放| 欧美视频免费在线观看| 欧美第一页在线| 午夜精品视频网站| 久久九九亚洲综合| 欧美一区二区三区免费观看| 最近2019年好看中文字幕视频| 韩日欧美一区二区| 国产日产欧美a一级在线| 成人午夜一级二级三级| 久久精品视频在线观看| 97欧美精品一区二区三区|