日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript寫個貪吃蛇小游戲(超詳細)

瀏覽:104日期:2023-06-23 15:19:27

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

我們先把dom結構寫出來

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

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

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

我們給蛇的每一節的寬高設置為60像素,并給了一個定位,因為如果不加定位的話無法讓他脫離文檔流(在頁面中飄起來),而且后續也無法通過left和top來判斷他的坐標.

JavaScript寫個貪吃蛇小游戲(超詳細)

好的這樣我們就得到了一條可愛的小蛇(然鵝并沒有看出來哪里可愛- -)。什么?你問我他的頭哪去了,很簡單,在給元素加了定位以后后面的元素會覆蓋掉前面的元素,所以只是頭部和身體重疊了你看不到而已。隨后咱們得讓這條蛇動起來是吧,那么我們怎么讓他動起來呢?原理很簡單,我們可以設置一個定時器,每過一個時間就讓他動一下,而怎么讓他動呢,只需要設置一個數值,讓這個值每動一下就+=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的坐標都設置為0,并且默認初始向右走,通過鍵盤上方向鍵的輸入,來改變他的方向。其中,難點在于

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

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

JavaScript寫個貪吃蛇小游戲(超詳細)

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

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

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

JavaScript寫個貪吃蛇小游戲(超詳細)

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

<div id='food'></div>

然后給他加個css

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

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

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

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

JavaScript寫個貪吃蛇小游戲(超詳細)

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

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的方法是因為獲取到的left與top的值的格式是例如”200px”這樣的數組,無法進行數學運算,所以要把px給截掉,并將剩下的字符串”200”轉換成number類型才可以進行數學運算。

JavaScript寫個貪吃蛇小游戲(超詳細)

這樣一個簡單的貪吃蛇就做好啦~啥?你問我什么什么類似碰到自己會死這樣更多的規則機制咋沒寫,肯定是因為我懶啊!我連createElement都懶得用直接克隆一個出來了,咋會勤快到把剩下這么多的機制補全呢哈哈。基礎機制我已經寫出來了,各種奇奇怪怪的機制還是留給小伙伴們自由發揮吧~PS:大家完全可以把頭部的背景圖片改成你小伙伴的照片,再把食物改成一些你想讓ta吃的東西,可以拿來惡搞啊哈哈哈

到此這篇關于JavaScript寫個貪吃蛇小游戲(超詳細)的文章就介紹到這了,更多相關js 貪吃蛇內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品精品国产三级a∨在线| 国产乱人伦丫前精品视频| 国产成人a视频高清在线观看| 青青在线精品| 日韩精品亚洲专区在线观看| 麻豆91在线播放| 日韩在线麻豆| 免费观看在线色综合| 午夜亚洲精品| 日韩制服丝袜先锋影音| 视频一区视频二区中文| 亚洲精品综合| 91精品国产自产在线丝袜啪| 国产视频一区二| 欧美黑人巨大videos精品| 久久97视频| 日韩欧美精品综合| 亚洲香蕉网站| 亚洲中午字幕| 亚洲精品一级| 国产精品色婷婷在线观看| 日韩动漫一区| 免费视频一区二区三区在线观看| 久久久精品区| 中文字幕人成乱码在线观看| 亚洲v在线看| 91高清一区| 免费精品视频最新在线| 日韩1区2区3区| 国产精品成人国产| 韩国一区二区三区视频| 蜜桃av在线播放| 欧美日韩少妇| 视频一区日韩精品| 久久99影视| 久久国产中文字幕| 亚洲欧美日韩精品一区二区 | 日韩国产一二三区| 精品视频久久| 欧美日韩国产在线一区| 日韩精品高清不卡| 国产精品精品| 蜜臀av国产精品久久久久 | 亚洲婷婷在线| 日韩激情一区二区| 久久精品二区亚洲w码 | 91精品一区国产高清在线gif| 鲁大师影院一区二区三区| 国产精品中文| 久久久久美女| 欧美日韩中出| 91精品一区二区三区综合| 日韩国产欧美一区二区三区| 伊人久久在线| 免费久久99精品国产| 国产一区二区色噜噜| 久久xxxx精品视频| 国产aⅴ精品一区二区三区久久 | 999久久久国产精品| 日韩激情啪啪| 播放一区二区| 日韩国产在线观看| 偷拍精品精品一区二区三区| 亚洲三级毛片| 国产精品久久久久av电视剧| 亚洲区第一页| 91tv亚洲精品香蕉国产一区| 日韩av资源网| 亚洲一级特黄| 麻豆一区二区三| 国产精品婷婷| 国产精品久久久久久久免费观看 | 欧美日韩亚洲一区三区| 亚洲高清久久| 麻豆国产欧美一区二区三区 | 9国产精品视频| 国产成人免费精品| 日韩不卡一区二区| 国产精品老牛| 国产成人免费| 69精品国产久热在线观看| 国产在线日韩| 精品视频亚洲| 国产日韩欧美在线播放不卡| 一区二区视频欧美| 中文在线资源| 国产欧美日韩精品一区二区三区| 在线日韩视频| 国产成人精品亚洲线观看| 国产一卡不卡| 蜜桃av一区二区| 婷婷综合五月| 日韩综合精品| 国产一区调教| 日韩三级久久| 99日韩精品| 今天的高清视频免费播放成人| 久久精品天堂| 久久黄色影视| 日韩一区二区三区精品视频第3页| 亚洲先锋成人| 99久久婷婷这里只有精品| 欧美xxxx中国| 久久久久黄色| 麻豆成人综合网| 国产精品mm| 国产精品一区毛片| 日韩高清欧美激情| 在线观看一区| 午夜av一区| 欧美日一区二区| 色天使综合视频| 日韩精品中文字幕第1页| 久久香蕉网站| 你懂的国产精品| 国产精品久久亚洲不卡| 欧美一区二区三区久久| 欧美伊人影院| 青草综合视频| 天堂va欧美ⅴa亚洲va一国产| 丝瓜av网站精品一区二区| 国产精品毛片在线| 香蕉久久久久久久av网站| 国产麻豆综合| 国产视频一区三区| 99视频在线精品国自产拍免费观看| 欧美日韩激情| 一区在线视频观看| 亚洲少妇一区| 亚洲免费专区| 亚洲不卡视频| 亚洲理论在线| 日本国产一区| 国产精品a级| 国产成人免费| 日韩在线中文| 成人av二区| 玖玖精品视频| 亚洲精品免费观看| 91精品视频一区二区| 欧美日韩亚洲一区| 久久精品国产精品亚洲毛片| 麻豆视频在线看| 亚洲午夜91| 在线精品视频一区| 国产美女亚洲精品7777| 久久精品国产久精国产爱| 亚洲天堂av影院| 亚洲国内精品| 视频一区二区中文字幕| 欧美午夜网站| 色婷婷亚洲mv天堂mv在影片| 精品一区欧美| 日本v片在线高清不卡在线观看| 91综合久久爱com| 久久精品女人| 婷婷综合社区| 天海翼亚洲一区二区三区| 国产欧美日韩精品一区二区三区| 国产一区精品福利| 婷婷精品进入| 欧美日韩91| 日韩精品诱惑一区?区三区| 亚洲在线免费| 久久99久久人婷婷精品综合| 欧美日韩免费看片| 免费中文字幕日韩欧美| 久久wwww| 久久久久国产精品一区三寸| 男女精品网站| 国产极品模特精品一二| 99久久精品国产亚洲精品| 深夜福利亚洲| 中文字幕在线高清| 亚洲天堂日韩在线| 精品久久中文| 中文在线不卡| 久久只有精品| 夜夜嗨av一区二区三区网站四季av| 日韩极品在线观看| 亚洲www啪成人一区二区| 日韩一区二区三免费高清在线观看 | 免费日韩视频| 国产精品久久久亚洲一区| 亚洲播播91| 亚洲精品亚洲人成在线观看| 国产一区二区三区成人欧美日韩在线观看| 999国产精品永久免费视频app| 日本不卡视频在线观看| 日韩免费久久| 日韩精彩视频在线观看| 电影亚洲精品噜噜在线观看| 亚洲精品极品| 欧洲在线一区| 日韩激情精品| 亚洲国产一区二区三区在线播放| 国产精品久久久亚洲一区| 亚洲一区二区三区高清| jizzjizz中国精品麻豆| 日产欧产美韩系列久久99|