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

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

基于JavaScript實現貪吃蛇游戲

瀏覽:27日期:2023-06-24 09:48:28

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

1.結構

創建一個盒子box作為蛇的身體,當前盒子中只有一個子元素,代表此時蛇的長度為1.在創建一個盒子food作為貪吃蛇的食物。

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

2.CSS

設置蛇和食物的樣式,這里注意蛇和食物都是絕對定位。

<style> *{ padding: 0px; margin: 0px; } #box div{ width: 30px; height: 30px; box-sizing: border-box; background: green; border: 1px solid black; position: absolute; } #food{ width: 30px; height: 30px; background: brown; position: absolute; } </style>

3.腳本

獲取蛇的身體和每一個子元素

var box = document.getElementById('box');var boxs = document.getElementById('box').children;

定義蛇頭的位置

var snackX = 0;var snackY = 0;

獲取屏幕寬度和高度,以此來設定墻的邊界,以限制蛇的移動范圍。

var cw = document.documentElement.clientWidth; var ch = document.documentElement.clientHeight; var minsnackX = 0; var maxsnackX = Math.floor(cw / boxs[0].offsetWidth)*boxs[0].offsetWidth; var minsnackY = 0; var maxsnackY = Math.floor(ch / boxs[0].offsetHeight)*boxs[0].offsetHeight;

定義初始的移動方向。

var turn = 'right';

獲取食物元素,并設置食物的位置坐標。

var foodele = document.getElementById('food'); var foodX,foodY;

蛇的初始化

for(var i = 0; i <6 ; i++){ box.appendChild(boxs[0].cloneNode(true)); }

刷新食物

function food(){ //此處的坐標要先獲取頁面最大支持的蛇身體的塊數,然后在塊數中隨機,然后乘以塊數的大小, //因為蛇的移動每一步都是固定的,想要判定食物和蛇頭重合就必須坐標是整塊的倍數。 foodX = parseInt( Math.random()*Math.floor(cw / boxs[0].offsetWidth))*boxs[0].offsetWidth; foodY = parseInt( Math.random()*Math.floor(ch / boxs[0].offsetHeight))*boxs[0].offsetHeight; //判定當食物的產生位置和蛇的任何一個位置重合時就重新生成食物。 for(var i = 0;i<boxs.length;i++){ if(foodX + 'px' === boxs[i].style.left && foodY + 'px' === boxs[i].style.top){ food(); } } foodele.style.left = foodX + 'px'; foodele.style.top = foodY + 'px'; }

調用food()方法 生成第一個食物

food();

設置定時器 每次執行一次蛇的運行方法

var timer = setInterval(function(){ snackMOve(); },150)

封裝一個蛇的運動方法

//移動和判定邊界 function snackMOve(){//此處為判定方向 根據判定的方向,向改方向前進一個方塊 switch(turn){ case 'right':snackX +=30;break; case 'left':snackX -=30;break; case 'bottom':snackY +=30;break; case 'top':snackY -=30;break; } //如果蛇越過了墻就從另一端出現 if(snackX > maxsnackX){ snackX = 0; } if(snackX < minsnackX){ snackX = maxsnackX; } if(snackY > maxsnackY){ snackY = 0; } if(snackY < minsnackY){ snackY = maxsnackY; } //從最后一個開始,每個元素跟隨上一個元素的位置 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[0].style.left = snackX + 'px'; boxs[0].style.top = snackY + 'px' ; //判定吃到食物 就長大和刷新 //當蛇頭位置移動之后與食物重合 那么刷新食物,并且在蛇的身體中插入一個克隆的元素,相當于長度+1 if(snackX === foodX && snackY === foodY){ food(); box.appendChild(boxs[0].cloneNode(true)); }else{ //判定撞死 //當蛇頭與身體中的任何一個元素重合,那么判定結束游戲,停止定時器 for(var i = 1;i<boxs.length;i++){ if(snackX + 'px' === boxs[i].style.left && snackY + 'px' === boxs[i].style.top){ clearInterval(timer); alert('失敗'); } } } }

蛇的運動方向

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

全部代碼

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <meta http-equiv='X-UA-Compatible' content='ie=edge'> <title>Document</title> <style> *{ padding: 0px; margin: 0px; } #box div{ width: 30px; height: 30px; box-sizing: border-box; background: green; border: 1px solid black; position: absolute; } #food{ width: 30px; height: 30px; background: brown; position: absolute; } </style></head><body> <div id='box'> <div></div> </div> <div id='food'></div> <script> var box = document.getElementById('box'); var boxs = document.getElementById('box').children; var snackX = 0; var snackY = 0; var cw = document.documentElement.clientWidth; var ch = document.documentElement.clientHeight; var minsnackX = 0; var maxsnackX = Math.floor(cw / boxs[0].offsetWidth)*boxs[0].offsetWidth; var minsnackY = 0; var maxsnackY = Math.floor(ch / boxs[0].offsetHeight)*boxs[0].offsetHeight; var turn = 'right'; var foodele = document.getElementById('food'); var foodX,foodY; for(var i = 0; i <6 ; i++){ box.appendChild(boxs[0].cloneNode(true)); } //隨機食物 function food(){ foodX = parseInt( Math.random()*Math.floor(cw / boxs[0].offsetWidth))*boxs[0].offsetWidth; foodY = parseInt( Math.random()*Math.floor(ch / boxs[0].offsetHeight))*boxs[0].offsetHeight; for(var i = 0;i<boxs.length;i++){ if(foodX + 'px' === boxs[i].style.left && foodY + 'px' === boxs[i].style.top){ food(); } } foodele.style.left = foodX + 'px'; foodele.style.top = foodY + 'px'; } food(); //設置定時器 移動 var timer = setInterval(function(){ snackMOve(); },150) //移動和判定邊界 function snackMOve(){ switch(turn){ case 'right':snackX +=30;break; case 'left':snackX -=30;break; case 'bottom':snackY +=30;break; case 'top':snackY -=30;break; } //根據邊界歸零 if(snackX > maxsnackX){ snackX = 0; } if(snackX < minsnackX){ snackX = maxsnackX; } if(snackY > maxsnackY){ snackY = 0; } if(snackY < minsnackY){ snackY = maxsnackY; } 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[0].style.left = snackX + 'px'; boxs[0].style.top = snackY + 'px' ; //判定吃到食物 就長大和刷新 if(snackX === foodX && snackY === foodY){ food(); box.appendChild(boxs[0].cloneNode(true)); }else{ //判定撞死 暫停計時器 刷新 for(var i = 1;i<boxs.length;i++){ // console.log(boxs[i].style.left); if(snackX + 'px' === boxs[i].style.left && snackY + 'px' === boxs[i].style.top){ clearInterval(timer); alert('失敗'); // console.log(1) } } } } //方向 document.onkeydown = function(eve){ var e = eve||event; var keyCode = e.keyCode||e.which; switch(keyCode){ case 37:if(turn === 'right'){break;}turn = 'left';break; case 38:if(turn === 'bottom'){break;}turn = 'top';break; case 39:if(turn === 'left'){break;}turn = 'right';break; case 40:if(turn === 'top'){break;}turn = 'bottom';break; } } </script></body></html>

總結

貪吃蛇的思路主要是有以下幾個部分

1.食物的隨機出現(不能隨機在蛇身上)2.定時器控制蛇的移動3.墻的判定4.蛇的運動邏輯5.運動方向的判定6.吃到食物的判定7.蛇頭與身體的判定(即游戲結束的判定)

小編還為大家準備了精彩的專題:javascript經典小游戲匯總

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
美女少妇全过程你懂的久久| 亚洲深深色噜噜狠狠爱网站| 青草久久视频| 国产一级久久| 日韩午夜一区| 99视频在线精品国自产拍免费观看| 久久91导航| 久久美女性网| 亚洲欧洲日本mm| 免费在线欧美视频| 亚洲精品在线二区| 日韩区一区二| 国产日产精品一区二区三区四区的观看方式| 亚洲色图综合| 日韩精品一级| 国产精品巨作av| 久久亚洲道色| 免费在线小视频| 五月精品视频| 亚洲专区欧美专区| 亚洲日产av中文字幕| 97久久中文字幕| 免费亚洲一区| 日韩毛片视频| 视频一区欧美精品| 国产探花一区| 亚洲精品**中文毛片| 日韩一区亚洲二区| 极品日韩av| 中文字幕乱码亚洲无线精品一区| 蜜桃视频在线观看一区| 欧美在线不卡| 色婷婷综合网| 一区二区小说| 日韩精品欧美大片| 精品三级国产| 蜜桃视频欧美| 日韩国产一二三区| 福利片在线一区二区| 久久国产电影| 日韩激情网站| 日韩欧美看国产| 蜜桃久久精品一区二区| 国产欧美日韩在线观看视频| 精品淫伦v久久水蜜桃| 久久激情婷婷| 日本一区中文字幕| 日韩理论片av| 中文字幕亚洲在线观看| 免费在线欧美黄色| 9色精品在线| 欧美精品不卡| 久久国产成人午夜av影院宅| 日韩激情啪啪| 亚洲一级特黄| 国产精品大片| 国产午夜精品一区二区三区欧美| 欧美中文一区| 久久婷婷激情| 日韩精品福利一区二区三区| 美女福利一区二区三区| 婷婷视频一区二区三区| 欧美sm一区| 国产精品主播| 最新日韩欧美| 国产不卡精品在线| 日本免费新一区视频| 婷婷综合六月| 国产精品一区高清| 欧美日韩国产高清| 久久天堂影院| 亚洲精品少妇| 国产综合婷婷| 精品一区二区三区中文字幕视频 | 日韩网站在线| 国产一区二区三区不卡视频网站| 伊人国产精品| 91精品啪在线观看国产18| 亚洲精选久久| 蜜桃一区二区三区| 国产999精品在线观看| 亚洲精品日韩久久| 欧美日韩在线播放视频| 欧美国产不卡| 亚洲精品观看| 激情久久久久久| 国产精品二区不卡| 国产精品九九| 日韩精品欧美成人高清一区二区| 日韩亚洲精品在线| 日韩在线二区| 成人在线免费观看91| 国产乱论精品| 欧美日韩调教| 男女性色大片免费观看一区二区| 成人久久久久| 国产一区二区精品福利地址| 青青草国产精品亚洲专区无| 久久高清国产| 黑丝美女一区二区| 日韩精品2区| 国产成人免费精品| 久久不卡国产精品一区二区| 日本成人在线网站| 日韩中文字幕无砖| 中文字幕免费一区二区| 亚洲综合国产| 黄色av一区| 亚洲精品一区二区妖精| 久久影院午夜精品| 成人污污视频| 国精品产品一区| 麻豆精品新av中文字幕| 日韩精品久久理论片| 石原莉奈在线亚洲二区| 91一区二区三区四区| 美女国产一区二区三区| 国产区精品区| 欧美一区二区三区免费看| 日韩精品三级| 青青在线精品| 国产亚洲精品美女久久| 国产亚洲人成a在线v网站| 国产日产精品一区二区三区四区的观看方式| 国产精品日韩久久久| 在线亚洲国产精品网站| 美女尤物久久精品| 99国产成+人+综合+亚洲欧美| 红桃视频国产精品| 噜噜噜久久亚洲精品国产品小说| 成人av动漫在线观看| 99久久亚洲精品蜜臀| 日产精品一区| 欧美成人综合| 国产精品久久久久久久久久妞妞 | 欧美日韩a区| 日本精品一区二区三区在线观看视频| 国产精品日本| 男女精品网站| 蜜桃av一区二区三区电影| 一本一道久久a久久| 亚洲欧洲av| 欧美亚洲tv| 国产精品porn| 成人午夜网址| 91精品啪在线观看国产18| 蜜桃视频欧美| 日韩精品一级二级| 91成人精品观看| 国产激情一区| 久久精品中文| 麻豆久久精品| 日韩av一区二区在线影视| 日韩成人一级| 久久精品网址| 久久美女性网| 亚洲乱码视频| 国产精品久久亚洲不卡| 中文字幕在线免费观看视频| 99久久亚洲精品| 免费成人在线视频观看| 日韩中文av| 成人午夜网址| 欧美精品一区二区久久| 日本亚洲最大的色成网站www | 亚洲精品国产精品粉嫩| 国产欧美日韩在线观看视频| 精品国产欧美| 婷婷成人综合| 免费看日韩精品| 国产伦精品一区二区三区视频 | 欧美一级久久| 国产v综合v| 三级欧美韩日大片在线看| 色狠狠一区二区三区| 国产精品激情电影| 久久久蜜桃一区二区人| 蜜臀精品久久久久久蜜臀| 美女性感视频久久| 欧美 日韩 国产一区二区在线视频 | 日韩国产欧美三级| 国产一区二区三区视频在线| 亚洲成av在线| 午夜天堂精品久久久久| 国产一区二区三区久久| 国产麻豆综合| 欧美精品97| 免费日韩av片| 老司机精品视频网| 欧美精品一线| 你懂的国产精品| 国产精品三上| 国产不卡一区| 亚洲日本欧美| 欧美sss在线视频| 国产精品一在线观看| 精品一区欧美| 国产精品www994| 亚洲一区二区三区高清不卡| 久久精品天堂|