欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JavaScript寫個貪吃蛇小游戲的示例分析-創(chuàng)新互聯(lián)

小編給大家分享一下JavaScript寫個貪吃蛇小游戲的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

開江ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

貪吃蛇大家都玩過,但你會制作嘛?聽起來好像很難的樣子,其實(shí)非常的簡單,話不多說直接上代碼

我們先把dom結(jié)構(gòu)寫出來

<div id="content">
      <div id="snake">
          <div class="box head"></div>
          <div class="box"></div>

      </div>
  
    </div>

其中,content為整個布局的大盒子,snake就是蛇,里面的box就是他的身體,為了區(qū)分頭部我們給第一個box加了個head名字用于區(qū)分,下面我們再把css加上

<style>
    .box{
      width: 60px;
      height: 60px;
      background-color: red;
      position:absolute;
      left: 0;
      top: 0;
      line-height: 60px;
    }
    .head{
      background-color: yellowgreen;
    }
  </style>

我們給蛇的每一節(jié)的寬高設(shè)置為60像素,并給了一個定位,因?yàn)槿绻患佣ㄎ坏脑挓o法讓他脫離文檔流(在頁面中飄起來),而且后續(xù)也無法通過left和top來判斷他的坐標(biāo).

JavaScript寫個貪吃蛇小游戲的示例分析

好的這樣我們就得到了一條可愛的小蛇(然鵝并沒有看出來哪里可愛- -)。什么?你問我他的頭哪去了,很簡單,在給元素加了定位以后后面的元素會覆蓋掉前面的元素,所以只是頭部和身體重疊了你看不到而已。
隨后咱們得讓這條蛇動起來是吧,那么我們怎么讓他動起來呢?原理很簡單,我們可以設(shè)置一個定時器,每過一個時間就讓他動一下,而怎么讓他動呢,只需要設(shè)置一個數(shù)值,讓這個值每動一下就+=60,然后通過判斷是上下動還是左右動,來給元素的left與top賦值。我們把邏輯寫成代碼,就出來了如下的代碼

<script>
    var boxs = document.querySelectorAll(".box");
    var snake_x = 0;
    var snake_y = 0;
    var turn  = "right";
    setInterval(function(){
      snakeMove();
    },100)
    function snakeMove(){ 
      switch( turn ){
        case "right": snake_x += 60;break;
        case "left" : snake_x -= 60;break;
        case "top"  : snake_y -= 60;break;
        case "bottom": snake_y += 60;break;
      }

      for(var i = boxs.length - 1; i > 0 ; i --){
        boxs[i].style.left = boxs[i - 1].style.left;
        boxs[i].style.top = boxs[i - 1].style.top;
        
      }
      boxs[i].style.left = snake_x + "px";
      boxs[i].style.top = snake_y + "px";

    }
document.onkeydown = function(evt){
      var e = evt || event;
      var keyCode = e.keyCode || e.which;
      switch( keyCode ){
        case 37 : turn = "left";break;
        case 38 : turn = "top";break;
        case 39 : turn = "right";break;
        case 40 : turn = "bottom";break;
      }
    }

</script>

上述代碼中,我們給小蛇的初始位置的x和y的坐標(biāo)都設(shè)置為0,并且默認(rèn)初始向右走,通過鍵盤上方向鍵的輸入,來改變他的方向。其中,難點(diǎn)在于

for(var i = boxs.length - 1; i > 0 ; i --){
        boxs[i].style.left = boxs[i - 1].style.left;
        boxs[i].style.top = boxs[i - 1].style.top;
        
      }
      boxs[i].style.left = snake_x + "px";
      boxs[i].style.top = snake_y + "px";

這一塊代碼,這塊代碼的目的是讓后面的元素跟著前面的走,也就是讓蛇的每一塊身體都跟著上一塊去運(yùn)動,然后最后再給頭部設(shè)置為snake_x和snake_y當(dāng)前的值即可,這樣就形成了第一塊(頭部)坐標(biāo)為
snake_x,snake_y實(shí)時變化的值,第二塊為第一塊之前的值,第三塊為第二塊之前的值。。。以此類推就得到了一個身體跟著頭部走的效果

JavaScript寫個貪吃蛇小游戲的示例分析

但是當(dāng)你把代碼輸進(jìn)去以后一運(yùn)行會發(fā)現(xiàn),這條小蛇過于頑皮,以至于走到邊界以后還會無限的向前走,那這不行啊,總不能讓蛇跑了不是,所以得給小蛇加上一個邊界

  var snake_x_max = document.documentElement.clientWidth ;
    var snake_y_max = document.documentElement.clientHeight;
if(snake_x > snake_x_max){
        snake_x = 0;
      }
      if(snake_x < 0){
        snake_x = snake_x_max;
      }
      if(snake_y > snake_y_max){
        snake_y = 0;
      }
      if(snake_y < 0){
        snake_y = snake_y_max;
      }

這里我們設(shè)置x和y的大值為當(dāng)前窗口的寬高,然后通過if語句進(jìn)行判斷,如果當(dāng)前坐標(biāo)大于了大值,就講當(dāng)前坐標(biāo)歸0,如果小于0的話(也就是跑到了左邊的邊界),就將當(dāng)前坐標(biāo)設(shè)置為大值,這樣就可以得到一個邊界啦

JavaScript寫個貪吃蛇小游戲的示例分析

你以為這樣就完事啦?nonono,沒有食物吃的蛇怎么能叫做貪吃蛇呢,那是沒有靈魂噠。下面我們開始制作食物(不能讓蛇餓著是吧)。

<div id="food">
  
      </div>

然后給他加個css

#food{
    width: 60px;
    height: 60px;
    position: absolute;
    background: greenyellow;
  }

然后再綁定一下元素并將他的left和top值設(shè)為范圍內(nèi)隨機(jī)數(shù),這樣可以做到隨機(jī)位置生成

var fd=document.getElementById("food");
    fd.style.left=Math.random()*snake_x_max+"px";
    fd.style.top=Math.random()*snake_y_max+"px";

好的這樣我們就得到了一個隨機(jī)生成的食物

JavaScript寫個貪吃蛇小游戲的示例分析

不過我們的小蛇好像對食物并沒有什么興趣呢,路過以后并不會吃掉,所以我們得給他加一個碰撞檢測吧,碰撞檢測的邏輯很簡單,只需要讓食物的left值與頭部的left值相減的絕對值<=食物的大小,并且食物的top值與頭部的top值相減的絕對值<=食物的大小,設(shè)置小于等于是因?yàn)槿绻苯佑孟嗟葋砼袛嗟脑?,必須兩個元素完全重合才行,我們需要的是碰到邊緣就算遲到,所以用兩個數(shù)值相減小于等于來做。然后判斷當(dāng)頭部與食物發(fā)生碰撞時,將蛇的身體部分克隆一塊出來放到蛇的身體里面,并讓食物的位置重新刷新(適用克隆為偷懶方法,此偷懶方法僅適用于當(dāng)小蛇開局自帶一個身體的時候,如果小蛇開局不自帶身體的話,我們無法克隆已有身體,只能通過createElement去新創(chuàng)建一個身體塊出來并添加className后再添加到父元素中去才行)。下面我們把邏輯轉(zhuǎn)換為代碼

var dl=snake_x;
    var dt=snake_y;
    var fl=fd.style.left;
    var ft=fd.style.top;
    var dv=document.querySelectorAll("#snake div");
    var sk=document.getElementById("snake");
    var a2=Number(fl.substring(0,fl.indexOf("px")));
    var b2=Number(ft.substring(0,ft.indexOf("px")));
    if(Math.abs(dl-a2)<=60&&Math.abs(dt-b2)<=60){
       fd.style.left=Math.random()*1000+"px";
       fd.style.top=Math.random()*800+"px";
       sk.appendChild(dv[1].cloneNode());
       boxs = document.querySelectorAll(".box");
    }

其中那一大長串的substring的方法是因?yàn)楂@取到的left與top的值的格式是例如”200px”這樣的數(shù)組,無法進(jìn)行數(shù)學(xué)運(yùn)算,所以要把px給截掉,并將剩下的字符串”200”轉(zhuǎn)換成number類型才可以進(jìn)行數(shù)學(xué)運(yùn)算。

JavaScript寫個貪吃蛇小游戲的示例分析

以上是“JavaScript寫個貪吃蛇小游戲的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章標(biāo)題:JavaScript寫個貪吃蛇小游戲的示例分析-創(chuàng)新互聯(lián)
鏈接URL:http://aaarwkj.com/article40/ccjhho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、企業(yè)建站微信公眾號手機(jī)網(wǎng)站建設(shè)、商城網(wǎng)站關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
亚洲精品中文字幕一二三 | 人人妻人人澡人人爽的视频| 欧美日韩免费高清视视频| 日本欧美国产一区二区| 成人黄色动漫在线播放| 欧美日本国产在线一区二区 | 久久精品熟女亚洲av色| 蜜臀av成人精品蜜臀av| 日韩高清精品视频在线| 午夜福利激情视频在线| 亚洲黄色一区大陆av剧情| 精品人妻一区二区三区观看| 97国产精品成人免费视频| 亚洲综合av一区二区三区四区| 欧美色高清视频在线播放| 综合资源网日韩天天操| 永久免费成人在线视频| 亚洲午夜一区二区三区精品影院| 亚洲国产第一av导航| 精品中文人妻中文字幕| 亚洲综合国产中文字幕| 天堂社区人妻在线亚洲| 国产精品自产拍在线网站| 亚洲中文字幕第11页| 国产欧美日韩一级二级三级| 中文字幕人妻丝袜二区| 福利一区福利二区视频| 老色鬼久久亚洲av综合| 怡红院一区二区三区毛片| 性感美女国产av一区二区三区| 欧美影院波波在线影院| 日韩欧美国产精品专区| 亚洲一级特黄高清录像| 亚洲精品在线观看第一页| 亚洲欧洲精品专线九九| 国产精品午夜福利天堂| 亚洲国产欧美在线91| 久久精品国产亚洲av麻豆尤物| 午夜福利中文字幕在线亚洲| 国产激情盗摄一区二区三区| 九九九热这里只有精品|