摘要:利用制作簡單的貪吃蛇游戲首先,我們先來分析一下整個(gè)頁面的構(gòu)成。代碼如下因?yàn)槲覀冃枰嫒菀苿?dòng)端設(shè)備和端設(shè)備,所以我們需要在前加上媒體查詢樣式,并且在使用單位時(shí),需要用到而不是。
利用js制作簡單的貪吃蛇游戲
首先,我們先來分析一下整個(gè)頁面的構(gòu)成。一看可知,游戲框內(nèi)是一個(gè)盒子里面有許多的小方塊,我們可以利用 ul和li標(biāo)簽來制作蛇和食物。右側(cè)就是簡單的 2個(gè)p標(biāo)簽·一個(gè)select標(biāo)簽· 2個(gè)input標(biāo)簽而已。代碼如下
最佳歷史紀(jì)錄:0
當(dāng)前長度:0
因?yàn)槲覀冃枰芏嗟男「褡樱?li標(biāo)簽 我們將用利用js里的for循環(huán)來創(chuàng)建,這樣會(huì)使我們的代碼量減少,減輕我們的工作量,我們在介紹js代碼會(huì)詳細(xì)介紹,現(xiàn)在先不多說。我們接下來要為html文檔加上樣式,因?yàn)榇a比較簡單,所以我們可以將樣式隨意寫在什么地方。css代碼如下:
*{ margin: 0; padding: 0; } input{ outline: none; margin: auto; } .box{ width: 3.2rem; margin: auto; float: left; } .oul{ width: 3.14rem; height: 3.14rem; border:0.03rem solid peru; } .oul li{ list-style: none; width: 5%; height: 5%; float: left; } .box1{ width: 2rem; height: 1rem; padding-top: 0.3rem; font-size: 0.2rem; margin: auto; float: left; } #level{ width: 100%; height: 0.4rem; } #ls{ color:paleturquoise; margin-left: 0.1rem; } #dqcd{ color:paleturquoise; margin-left: 0.01rem; } #btn1{ width: 50%; height:0.3rem; margin-left: 0.4rem; margin-top: 0.2rem; background: palegreen; color: #fff; } #btn2{ width: 50%; height: 0.3rem; margin-left: 0.4rem; margin-top: 0.2rem; background: palegreen; color: #fff; }
因?yàn)槲覀冃枰嫒菀苿?dòng)端設(shè)備和pc端設(shè)備,所以我們需要在css前加上媒體查詢樣式,并且在使用單位時(shí),需要用到rem而不是px。
媒體查詢代碼如下:
@media screen and (min-width: 320px) { html { font-size: 100px; } } @media screen and (min-width: 360px) { html { font-size: 113px; } } @media screen and (min-width: 375px) { html { font-size: 117px; } } @media screen and (min-width: 384px) { html { font-size: 120px; } } @media screen and (min-width: 412px) { html { font-size: 128px; } } @media screen and (min-width: 414px) { html { font-size: 129px; } } @media screen and (min-width: 440px) { html { font-size: 138px; } } @media screen and (min-width: 480px) { html { font-size: 150px; } }
上面我們已經(jīng)將基本樣式都寫好,下面我們就要編輯js代碼
因?yàn)槲覀冃枰嫒菀苿?dòng)端設(shè)備,而現(xiàn)在的移動(dòng)設(shè)備大多數(shù)沒有鍵盤,所以我們需要引入一些庫來支持手指劃動(dòng),比如 bammer.js或者touch.js等等。我們這里使用的是touch.js。
在上面,我們并沒有在html文檔中建立 li標(biāo)簽,所以我們需要在js里建立,利用for循環(huán):
var oul = document.getElementById("oul"); var btn1 = document.getElementById("btn1"); var btn2 = document.getElementById("btn2"); var bgaudio = document.getElementById("bgaudio"); var si = document.getElementById("go"); var chi = document.getElementById("chi"); var dqcd = document.getElementById("dqcd"); var ls = document.getElementById("ls"); var level = document.getElementById("level"); // 首先我們先獲取各個(gè)標(biāo)簽的id,在后面會(huì)用到 var ox = document.createDocumentFragment(); function ab (){ for(var i = 0 ; i<400 ; i++){ var oli = document.createElement("li") ox.appendChild(oli) } } ab(); oul.appendChild(ox);
如果你建立后看的不直觀,你可以給 li標(biāo)簽 一個(gè)邊框,以便于觀看,由于我們需要看到每一個(gè)小格子的索引,所以我們在循環(huán)內(nèi)添加(oli.innerHTML = i),我們就可以清楚的看到每一個(gè)格子的索引值。
建立了游戲外邊框后,我們開始建立蛇的身體和蛇的食物。在每一次的刷新后,我們會(huì)發(fā)現(xiàn)蛇身體和食物的顏色都會(huì)隨機(jī)變化,所以我們需要建立一個(gè)隨機(jī)顏色的函數(shù),在每一次使用時(shí)直接調(diào)用就可以了。
function co (){ return "rgb("+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+")" }
建立蛇身,蛇身長五,所以我們初始化一個(gè)變量,然后利用for循環(huán)建立
var snk = []; snk = oul.children; var snkbody = []; var ox = document.createDocumentFragment(); for(var i=0;i<5;i++){ snkbody.push({pos:i,color:co()}) } // 創(chuàng)建蛇身 function cd (){ for(var j=0,l=snkbody.length;j然后我們?yōu)槟銥樯呓⑹澄铮俏覀冃枰⒁馐澄锊荒芘c蛇身在初始化到一起,所以我們需要如下代碼:
var food = [{pos:0,color:"red"}]; function isin (index){ for(var j=0,l=snkbody.length;j下面我們就需要讓蛇動(dòng)起來
var snkh = snkbody.slice(-1)[0].pos; var snkw = snkbody.slice(0,1)[0].pos; // 獲取蛇頭蛇尾位置 for(var k=0,l=snkbody.length;k然而我們像現(xiàn)在發(fā)現(xiàn)蛇雖然會(huì)走了,但是蛇尾的顏色并不會(huì)改變,所以我們還需要將蛇尾的顏色改變。
snk[snkw].style.background=0;如果我們需要改變蛇的前進(jìn)方向,我們需要清楚我們的設(shè)備,如果是移動(dòng)設(shè)備,我們需要使用手指滑動(dòng)方法,如果是pc設(shè)備,我們需要識別按鍵,所以我就使用了獲取body.width的方法,如果大于1024,即識別為pc端,否則為移動(dòng)端。
var bodywid = document.body.offsetWidth; if(bodywid>1024){ document.addEventListener("keydown",function(e){ e=e||window.event; switch(e.keyCode){ case 37:{ // left if(fxg==39)return false; fxg=e.keyCode; break; } case 38:{ if(fxg==40)return false; fxg=e.keyCode; break; // up } case 39:{ if(fxg==37)return false; fxg=e.keyCode; break; // right } case 40:{ if(fxg==38)return false; fxg=e.keyCode; break; // down } } },false); // 識別按鍵 }else{ oul.touch({ swipeLeft:function(){ kkk(37) }, swipeRight:function(){ kkk(39) }, swipeUp:function(){ kkk(38) }, swipeDown:function(){ kkk(40) }, }); // 劃動(dòng)改變函數(shù)kkk的值,使蛇改變方向 function kkk (e){ switch(e){ case 37:{ // left if(fxg==39)return false; fxg=e; break; } case 38:{ if(fxg==40)return false; fxg=e; break; // up } case 39:{ if(fxg==37)return false; fxg=e; break; // right } case 40:{ if(fxg==38)return false; fxg=e; break; // down } } } // 39:右 1:40 2:37 3:38 } if(fxg==40){ snkbody[l-1].pos=snkbody[l-1].pos+20; }else if(fxg==37){ snkbody[l-1].pos=snkbody[l-1].pos-1; } else if(fxg==38){ snkbody[l-1].pos=snkbody[l-1].pos-20; } else if(fxg==39){ snkbody[l-1].pos=snkbody[l-1].pos+1; } // 根據(jù)我們的索引可以看出,向下就是依次+20,向上就是-20,向左就是-1,向右就是+1,所以我們在按鍵之后改變蛇頭的方向即可我們的蛇現(xiàn)在就可以走了,我們還想讓他能夠吃到食物
if(snkh==food.pos){ snkbody.unshift({pos:snkw,color:food.color}); // 將食物放到蛇尾 snkfood(); // 再次刷新食物 chi.play(); // 播放吃食物音效 var snkbodycd = snkbody.length-5; // 獲取分?jǐn)?shù) dqcd.innerText=snkbodycd; // 刷新當(dāng)前分?jǐn)?shù) }我們在平時(shí)玩貪吃蛇的時(shí)候,碰壁也會(huì)死亡,所以我們還需要做一下碰壁處理
// 我們的小格子邊框是20個(gè),所以我們要在全局建立個(gè)數(shù)變量 var geshu = 20; // 之后根據(jù)索引找出各個(gè)邊框處小格子的規(guī)律,并且識別蛇頭方向,進(jìn)行碰壁處理 var fxg = 39; // 初始化方向?yàn)橄蛴?if((snkh+1)%geshu==0&&fxg==39){ sile(); } else if(snkh>=400-geshu&&fxg==40){ sile(); } else if(snkh%geshu==0&&fxg==37){ sile(); } else if(snkh我們在識別完墻壁后,我們還需要識別自己,讓蛇撞上自己之后,也會(huì)死亡。
for(var i =0,l=snkbody.length;i這樣我們的貪吃蛇游戲已經(jīng)完成了大半
下面就是我們將制作點(diǎn)擊按鈕和暫停按鈕btn1.onclick=function(){ sudu = level.value // 設(shè)置速度 clearInterval(ffffd) // 首先清除定時(shí)器,防止多次點(diǎn)擊定時(shí)器沖突 ffffd=setInterval(function(){ fzhs (); },sudu) // 將以上蛇開始運(yùn)動(dòng)的代碼放入一個(gè)名為fzhs的代碼中循環(huán) bgaudio.play(); // 播放背景音樂 } // 點(diǎn)擊開始 btn2.onclick=function(){ clearInterval(ffffd); // 清除定時(shí)器 bgaudio.pause(); // 聲音暫停 }在蛇死亡后,還需要死亡音效,彈出框,頁面刷新
function sile(){ var l = snkbody.length-5; // 計(jì)算蛇吃了幾個(gè)食物 var score = localStorage.getItem("score") if(l>score){ localStorage.setItem("score",l) } // 如果當(dāng)前分?jǐn)?shù)大于歷史最高分?jǐn)?shù),我們要將歷史最高分?jǐn)?shù)設(shè)置為當(dāng)前分?jǐn)?shù) si.play(); // 播放死亡音樂 alert("GameOver"); // 彈出GameOver location.reload(); 頁面刷新 return false; }我們還需要設(shè)置歷史最高分?jǐn)?shù)
var score = localStorage.getItem("score")||0; ls.innerHTML = score;這樣一個(gè)貪吃蛇小游戲就做完了,你還可以對樣式和js進(jìn)行改進(jìn),并告訴我,讓我們共同進(jìn)步!!!最后,我的github游戲奉上,希望你喜歡。
https://Smallmotor.github.io/...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91425.html
摘要:最近幫人做了個(gè)貪吃蛇的游戲交作業(yè)用,很簡單,界面如下開始界面游戲中界面是不是很簡單樸素。代碼在這里賦值,而不是在事件的循環(huán)中賦值,避免按鍵太快 最近幫人做了個(gè)貪吃蛇的游戲(交作業(yè)用),很簡單,界面如下:開始界面: showImg(https://segmentfault.com/img/bV49cP?w=638&h=478); 游戲中界面: showImg(https://segmen...
摘要:基本介紹一款移動(dòng)端貪吃蛇大作戰(zhàn)游戲。主要的游戲邏輯有貪吃蛇移動(dòng)碰撞檢測貪吃蛇碰撞碰撞墻壁和吃食物。貪吃蛇的身體如何跟隨頭部移動(dòng)需要分為兩種情況,在單位時(shí)間內(nèi)貪吃蛇移動(dòng)一單位長度和貪吃蛇移動(dòng)多單位長度。 基本介紹 一款移動(dòng)端貪吃蛇大作戰(zhàn)游戲。(只支持移動(dòng)端) 這是一個(gè)臨近 deadline 的課設(shè)項(xiàng)目,為了方便地使用TS,我直接使用angular-cli生成了TypeScript的項(xiàng)...
摘要:基于這個(gè)核心重新實(shí)現(xiàn)了一次貪吃蛇游戲,并且完善了游戲的關(guān)卡設(shè)計(jì),效果如下效果預(yù)覽詳細(xì)思路分析 貪吃蛇游戲想必沒人會(huì)感到陌生,這個(gè)游戲的js版本在網(wǎng)上也是一搜一大把,今天我要介紹的仍然是如何用js做一個(gè)貪吃蛇游戲,但在關(guān)鍵一步,蛇的運(yùn)動(dòng)的實(shí)現(xiàn)上略有不同。 貪吃蛇的js版本通常用連續(xù)的方塊元素來實(shí)現(xiàn)蛇身,蛇的運(yùn)動(dòng)處理一般是這樣的,讓蛇頭向運(yùn)動(dòng)方向偏移一格,其后的元素依次移向前一個(gè)元素的位置...
閱讀 9019·2021-11-18 10:02
閱讀 2593·2019-08-30 15:43
閱讀 2661·2019-08-30 13:50
閱讀 1377·2019-08-30 11:20
閱讀 2710·2019-08-29 15:03
閱讀 3632·2019-08-29 12:36
閱讀 931·2019-08-23 17:04
閱讀 620·2019-08-23 14:18