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

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

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

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

思路:在頁(yè)面上添加一個(gè)地圖,以提供邊界,在地圖中隨機(jī)出現(xiàn)食物,給蛇身設(shè)置一個(gè)初始長(zhǎng)度,用鍵盤(pán)方向鍵控制蛇的走向,當(dāng)蛇觸碰到食物時(shí)(既坐標(biāo)重復(fù)時(shí)),增加蛇身長(zhǎng)度,碰到墻壁或自身時(shí),程序停止,游戲結(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實(shí)現(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)備了精彩的專(zhuān)題:javascript經(jīng)典小游戲匯總

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

相關(guān)文章

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

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

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

    JS指定音頻audio在某個(gè)時(shí)間點(diǎn)進(jìn)行播放

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

    GoJs連線(xiàn)繪圖模板Link使用示例詳解

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

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

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

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

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

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

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

    javascript高級(jí)的文件目錄排序代碼

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

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

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

    JavaScript this綁定過(guò)程深入詳解

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

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

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

最新評(píng)論

盘锦市| 井冈山市| 平凉市| 马边| 中卫市| 乌拉特后旗| 隆昌县| 名山县| 遂昌县| 旅游| 襄城县| 鸡泽县| 来安县| 陇西县| 宁乡县| 安塞县| 赤峰市| 金坛市| 芦溪县| 平度市| 黄平县| 武威市| 黔西县| 墨江| 唐海县| 雷山县| 巴楚县| 临颍县| 遂昌县| 若羌县| 巴中市| 滨海县| 塔城市| 惠安县| 庆阳市| 永济市| 玛曲县| 仙居县| 北流市| 固安县| 翼城县|