最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js實現(xiàn)經(jīng)典貪吃蛇小游戲

 更新時間:2020年03月19日 08:41:29   作者:✧* ꧁檸檬ヤ汽水꧂✧*  
這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)經(jīng)典貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了js實現(xiàn)貪吃蛇小游戲的具體代碼,供大家參考,具體內(nèi)容如下

<script>
  
  class Map{
    constructor(){
      this.w = 800;
      this.h = 400;
      this.c = "#ccc";
      this.createEle();
    }
    createEle(){
      this.mapEle = document.createElement("div");
      this.mapEle.style.cssText = `width:${this.w}px;height:${this.h}px;background:${this.c};margin:0 auto;position:relative;border:solid 10px black;`;
      document.body.appendChild(this.mapEle);
    }
  }
  class Food{
    constructor(){
      this.w = 20;
      this.h = 20;
      this.c = "red";
      this.x = 0;
      this.y = 0;
      this.createEle();
    }
    createEle(){
      this.foodEle = document.createElement("div");
      this.foodEle.style.cssText = `width:${this.w}px;height:${this.h}px;background:${this.c};
position:absolute;left:${this.x * this.w}px;top:${this.y * this.h}px;`;
      m.mapEle.appendChild(this.foodEle);
    }
    randomPos(){
      this.x = random(0,(m.w-this.w) / this.w);
      this.y = random(0,(m.h-this.h) / this.h);
      this.foodEle.style.left = this.x * this.w + "px";
      this.foodEle.style.top = this.y * this.h + "px";
    }
  }
  class Snake{
    constructor(){
      this.w = 20;
      this.h = 20;
      this.body = [{
        ele:null,
        x:4,
        y:3,
        c:randomColor()
      },{
        ele:null,
        x:3,
        y:3,
        c:randomColor()
      },{
        ele:null,
        x:2,
        y:3,
        c:randomColor()
      }];
 
      this.d = "right";
 
      this.createEle();
    }
    createEle(){
      for(var i=0;i<this.body.length;i++){
        if(!this.body[i].ele){
          this.body[i].ele = document.createElement("div");
          m.mapEle.appendChild(this.body[i].ele);
        }
        this.body[i].ele.style.cssText = `width:${this.w}px;height:${this.h}px;background:${this.body[i].c};
position:absolute;left:${this.body[i].x * this.w}px;top:${this.body[i].y * this.h}px;`;
      }
      this.body[0].ele.innerHTML = "0";
 
      setTimeout(()=>{
        this.move();
      },300);
    }
    move(){
      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.d){
        case "left":
          this.body[0].x -= 1;
          break;
        case "right":
          this.body[0].x += 1;
          break;
        case "top":
          this.body[0].y -= 1;
          break;
        case "bottom":
          this.body[0].y += 1;
          break;
      }
      
      if(this.body[0].x < 0 || this.body[0].y < 0 || this.body[0].x > ((m.w-this.w) / this.w) || this.body[0].y > ((m.h-this.h) / this.h)){
        alert("撞墻了");
        return;
      }
 
      if(this.body[0].x === f.x && this.body[0].y === f.y){
        this.body.push({
          ele:null,
          x:this.body[this.body.length-1].x,
          y:this.body[this.body.length-1].y,
          c:randomColor()
        })
        f.randomPos();
      }
 
      for(var i=1;i<this.body.length;i++){
        if(this.body[0].x == this.body[i].x && this.body[0].y == this.body[i].y){
          alert("撞到自己了");
          return;
        }
      }
 
      this.createEle();
    }
    direct(type){
      
      switch(type){
        case 37:
          if(this.d === "right") break;
          this.d = "left";
          break;
        case 38:
          if(this.d === "bottom") break;
          this.d = "top";
          break;
        case 39:
          if(this.d === "left") break;
          this.d = "right";
          break;
        case 40:
          if(this.d === "top") break;
          this.d = "bottom";
          break;
      }
    }
  }
 
  function random(a,b){
    return Math.round(Math.random()*(a-b)+b)
  }
  function randomColor(){
    return `rgb(${random(0,255)},${random(0,255)},${random(0,255)})`
  }
 
  var m = new Map();
  
  var f = new Food();
  
    f.randomPos();
 
  var s = new Snake();
  document.onkeydown = function(eve){
    var e = eve || window.event;
    var code = e.keyCode || e.which;
    s.direct(code);
  }
 
</script>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IE瀏覽器IFrame對象內(nèi)存不釋放問題解決方法

    IE瀏覽器IFrame對象內(nèi)存不釋放問題解決方法

    IFrame對象占用的內(nèi)存資源在窗體關(guān)閉后不會釋放。彈出關(guān)閉反復(fù)多次后,IE瀏覽器內(nèi)存占用可超過數(shù)百M,嚴(yán)重時IE瀏覽器報錯
    2014-08-08
  • js動態(tài)生成form 并用ajax方式提交的實現(xiàn)方法

    js動態(tài)生成form 并用ajax方式提交的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s動態(tài)生成form 并用ajax方式提交的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 必備的JS調(diào)試技巧匯總

    必備的JS調(diào)試技巧匯總

    試想一下:出現(xiàn)了某個bug,有人用幾分鐘就搞定了,有人用了半天或者一天都找不到原因所在。你愿意當(dāng)前者還是后者呢?想當(dāng)前者的就請好好看完本篇文章吧。文中涉及較多Gif演示動畫請注意。
    2016-07-07
  • 常見Ajax下載文件方式以及報錯解決辦法

    常見Ajax下載文件方式以及報錯解決辦法

    AJAX(Asynchronous JavaScript and XML)是一種用于創(chuàng)建快速、動態(tài)和交互式網(wǎng)頁的技術(shù),它的主要優(yōu)勢在于能夠在不刷新整個網(wǎng)頁的情況下與服務(wù)器進(jìn)行數(shù)據(jù)交互,這篇文章主要給大家介紹了關(guān)于常見Ajax下載文件方式以及報錯解決辦法的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • JS判斷空對象的幾個方法大盤點

    JS判斷空對象的幾個方法大盤點

    在做數(shù)據(jù)交互的時候,我們經(jīng)常需要判斷數(shù)據(jù)或者對象是不是為空,避免當(dāng)接口異常時候前端頁面崩潰,下面這篇文章主要給大家介紹了關(guān)于JS判斷空對象的幾個方法,需要的朋友可以參考下
    2022-02-02
  • JavaScript組件開發(fā)完整示例

    JavaScript組件開發(fā)完整示例

    這篇文章主要介紹了JavaScript組件開發(fā)的方法,結(jié)合完整實例形式分析了組件的原理與實現(xiàn)技巧,代碼包含的詳盡的注釋,便于理解,需要的朋友可以參考下
    2015-12-12
  • 把json格式的字符串轉(zhuǎn)換成javascript對象或數(shù)組的方法總結(jié)

    把json格式的字符串轉(zhuǎn)換成javascript對象或數(shù)組的方法總結(jié)

    下面小編就為大家?guī)硪黄裫son格式的字符串轉(zhuǎn)換成javascript對象或數(shù)組的方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • JS實現(xiàn)程序暫停與繼續(xù)功能代碼解讀

    JS實現(xiàn)程序暫停與繼續(xù)功能代碼解讀

    程序暫停與繼續(xù)的實現(xiàn)方法有很多,在本文為大家介紹下js中是如果做到的,并對具體的功能代碼進(jìn)行注釋說明,感興趣的朋友不要錯過
    2013-10-10
  • javascript實現(xiàn)rgb顏色轉(zhuǎn)換成16進(jìn)制格式

    javascript實現(xiàn)rgb顏色轉(zhuǎn)換成16進(jìn)制格式

    本文給大家分享的是使用javascript實現(xiàn)rgb顏色轉(zhuǎn)換成16進(jìn)制格式的方法和示例代碼,有需要的小伙伴可以參考下。
    2015-07-07
  • 基于Cesium實現(xiàn)加載顯示熱力圖

    基于Cesium實現(xiàn)加載顯示熱力圖

    這篇文章主要介紹了如何利用Cesium實現(xiàn)加載顯示熱力圖,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定的幫助,需要的可以參考一下
    2022-06-06

最新評論

泰和县| 九江县| 益阳市| 郓城县| 五峰| 温泉县| 屯昌县| 尼木县| 西乌| 精河县| 织金县| 涿州市| 德阳市| 岳阳县| 麻阳| 湘潭市| 天祝| 广灵县| 阿拉善右旗| 榆中县| 彰化县| 蒙城县| 岐山县| 额尔古纳市| 太保市| 桐梓县| 正安县| 江孜县| 莲花县| 苗栗县| 金塔县| 德兴市| 延边| 成都市| 康平县| 荥经县| 涿鹿县| 长岛县| 张家口市| 石门县| 东源县|