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

原生JS實現(xiàn)貪吃蛇小游戲

 更新時間:2020年03月09日 09:52:10   作者:Tangerine.  
這篇文章主要為大家詳細(xì)介紹了原生JS貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

思路:在頁面上添加一個地圖,以提供邊界,在地圖中隨機出現(xiàn)食物,給蛇身設(shè)置一個初始長度,用鍵盤方向鍵控制蛇的走向,當(dāng)蛇觸碰到食物時(既坐標(biāo)重復(fù)時),增加蛇身長度,碰到墻壁或自身時,程序停止,游戲結(jié)束。

HTML結(jié)構(gòu):

<body>
 <div id="map"></div>
</body>

CSS樣式:

<style>
 #map{
  width: 600px;
  height: 300px;
  background: #ccc;
  border: 5px solid blacks;
  margin: 0 auto;
  position: relative;}
</style>

js實現(xiàn)功能:

<script>
 class Map{ //地圖
  constructor(){
   this.mapEle = document.getElementById("map");
   this.w = this.mapEle.offsetWidth;
   this.h = this.mapEle.offsetHeight;
  }
 }
 class Food{ //食物
  constructor(){
   this.w = 20;
   this.h = 20;
   this.x = 0;
   this.y = 0;
   this.c = "orange";
   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;border-radius: 40%;`;
   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"; //設(shè)置默認(rèn)行走方向
   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;color:#fff;border-radius: 40%;`;
   }
   this.body[0].ele.innerHTML = "00"
   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>

小編還為大家準(zhǔn)備了精彩的專題:javascript經(jīng)典小游戲匯總

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

相關(guān)文章

  • javascript實現(xiàn)的鼠標(biāo)鏈接提示效果生成器代碼

    javascript實現(xiàn)的鼠標(biāo)鏈接提示效果生成器代碼

    javascript實現(xiàn)的鼠標(biāo)鏈接提示效果生成器代碼...
    2007-06-06
  • JS指定音頻audio在某個時間點進(jìn)行播放

    JS指定音頻audio在某個時間點進(jìn)行播放

    這篇文章主要介紹了JS指定音頻audio在某個時間點進(jìn)行播放,獲取當(dāng)前音頻audio的長度,音頻時長格式轉(zhuǎn)化,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • GoJs連線繪圖模板Link使用示例詳解

    GoJs連線繪圖模板Link使用示例詳解

    這篇文章主要為大家介紹了GoJs連線繪圖模板Link使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 微信小程序嵌入H5頁面(web-view)的方法詳解

    微信小程序嵌入H5頁面(web-view)的方法詳解

    使用<web-view>標(biāo)簽?zāi)茉谛〕绦蛑写蜷_外部網(wǎng)頁,但是要打開的網(wǎng)頁的域名必須跟小程序的業(yè)務(wù)域名(業(yè)務(wù)域名可以在小程序的后臺管理界面添加)一致,否則在真機上是打不開的,下面這篇文章主要給大家介紹了關(guān)于微信小程序嵌入H5頁面(web-view)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • JavaScript利用split函數(shù)按規(guī)定截取字符串(獲取郵箱用戶名)

    JavaScript利用split函數(shù)按規(guī)定截取字符串(獲取郵箱用戶名)

    這個其實就是利用了js的split函數(shù),以@分割數(shù)組,一般用這個的地方不多,但這個思路應(yīng)用的比較廣泛。推薦大家學(xué)習(xí)。
    2009-12-12
  • 詳細(xì)聊一聊js防抖節(jié)流到底是什么

    詳細(xì)聊一聊js防抖節(jié)流到底是什么

    在項目開發(fā)中我們常常會去監(jiān)聽滾動事件或者用戶輸入框驗證事件,如果事件處理沒有頻率限制,當(dāng)用戶不斷觸發(fā)事件時,就會加重瀏覽器的負(fù)擔(dān),影響用戶的體驗,造成不必要的損失,這篇文章主要給大家介紹了關(guān)于js防抖節(jié)流到底是什么的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • javascript高級的文件目錄排序代碼

    javascript高級的文件目錄排序代碼

    這幾天在做一個文件管理的模塊,里面有排序的功能,產(chǎn)品經(jīng)理看了說希望能做出更加智能的文件排序功能,就像是win7的名稱排序一樣,主要就是文件名中的數(shù)字會按大小排序,而不是直接按ascii碼 ,這兩天晚上沒事,就先寫了這個排序方法,下個版本中就可以用上了
    2010-08-08
  • JavaScript Event事件學(xué)習(xí)第一章 Event介紹

    JavaScript Event事件學(xué)習(xí)第一章 Event介紹

    Events是每一個JavaScript程序核心。什么是事件處理,它有什么問題和怎樣寫出跨瀏覽器的代碼,我將在這一章做一個概述。我也會提供一些有精彩的關(guān)于事件處理程序的細(xì)節(jié)的文章。
    2010-02-02
  • JavaScript this綁定過程深入詳解

    JavaScript this綁定過程深入詳解

    這篇文章主要介紹了JavaScript this綁定過程,結(jié)合實例形式深入分析了JavaScript中this關(guān)鍵字的功能、原理、綁定方式及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-12-12
  • JS將所有對象s的屬性復(fù)制給對象r(原生js+jquery)

    JS將所有對象s的屬性復(fù)制給對象r(原生js+jquery)

    這篇文章主要介紹了js中將所有對象s的屬性復(fù)制給對象r的方法,原生js+jquery分別實現(xiàn)
    2014-01-01

最新評論

水富县| 惠东县| 揭西县| 嵊州市| 同江市| 青田县| 嵊泗县| 射洪县| 阳谷县| 石河子市| 三亚市| 沙洋县| 乌什县| 大余县| 巧家县| 英超| 昌都县| 虞城县| 理塘县| 定结县| 河曲县| 勃利县| 广丰县| 读书| 松阳县| 凌源市| 苏尼特右旗| 五大连池市| 香格里拉县| 灵寿县| 承德县| 依安县| 金溪县| 隆子县| 乐至县| 茂名市| 武陟县| 安庆市| 衡东县| 盘锦市| 临潭县|