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

js實現經典貪吃蛇小游戲

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • IE瀏覽器IFrame對象內存不釋放問題解決方法

    IE瀏覽器IFrame對象內存不釋放問題解決方法

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

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

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

    必備的JS調試技巧匯總

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

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

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

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

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

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

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

    把json格式的字符串轉換成javascript對象或數組的方法總結

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

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

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

    javascript實現rgb顏色轉換成16進制格式

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

    基于Cesium實現加載顯示熱力圖

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

最新評論

磐石市| 六安市| 广灵县| 漯河市| 莲花县| 朔州市| 平邑县| 岚皋县| 静宁县| 保靖县| 清水县| 天祝| 中方县| 伊吾县| 枞阳县| 宣恩县| 田东县| 太白县| 日照市| 遂昌县| 万年县| 当涂县| 菏泽市| 沂南县| 扎赉特旗| 博白县| 浦县| 平原县| 方正县| 黄骅市| 定西市| 仙居县| 威宁| 平邑县| 拜城县| 高要市| 六安市| 万山特区| 五华县| 斗六市| 甘孜县|