javascript實(shí)現(xiàn)貪吃蛇小練習(xí)
本文實(shí)例為大家分享了js實(shí)現(xiàn)貪吃蛇的具體代碼,供大家參考,具體內(nèi)容如下
游戲思路:
- 創(chuàng)建方塊、控制按鈕(showBlock)
- 方塊移動(dòng)(點(diǎn)擊開(kāi)始,不斷創(chuàng)建并移除前面的方塊,用到隊(duì)列先進(jìn)先出)
- 控制移動(dòng)(doUp\doDown\doLeft\doRight,加入用鍵盤(pán)控制)
- 產(chǎn)生食物方塊(generateFood)
- 吃到食物變長(zhǎng)(當(dāng)方塊位置相同時(shí),吃食物)
- 判斷撞墻、撞到自己游戲結(jié)束
- 設(shè)置積分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <style> body { margin: 0; padding: 0; } .content { width: 800px; height: 400px; background-color: gray; display: absolute; } </style> <div id="content" class="content"> </div> <button onclick="start()">開(kāi)始游戲</button> <button onclick="doUp()">上</button> <button onclick="doDown()">下</button> <button onclick="doLeft()">左</button> <button onclick="doRight()">右</button> <div id="score">0</div> <script> //定義參數(shù) var snackBlock = {}; snackBlock.top = 20; snackBlock.left = 20; var firstDiv = showBlock(snackBlock.left, snackBlock.top, "red"); var snackDivArray = [];//裝方塊的數(shù)組 snackDivArray.push(firstDiv); var left = 1, right = 2, up = 3, down = 4; var direction = right; var food = generateFood();//生成食物 var hasEat = false; var score = 0; function generateFood() { var left = getRandomNum(39); var top = getRandomNum(19); var foodBlock = showBlock(left, top, "pink"); foodBlock.left = left; foodBlock.top = top; return foodBlock; } function getRandomNum(max) { return Math.round(Math.random() * max) * 20; } function start() { var interval = setInterval(function () { var newBlock = {}; switch (direction) { case up: newBlock.top = snackBlock.top - 20; newBlock.left = snackBlock.left; break; case down: newBlock.top = snackBlock.top + 20; newBlock.left = snackBlock.left; break; case left: newBlock.top = snackBlock.top; newBlock.left = snackBlock.left - 20; break; case right: newBlock.top = snackBlock.top; newBlock.left = snackBlock.left + 20; break; } var currentLeft = newBlock.left; var currentTop = newBlock.top; var eat = false; //吃食物 if (currentLeft == food.left && currentTop == food.top) { removeBlock(food); food = generateFood(); eat = true; hasEat = true; score += 10;//吃一個(gè)加10分 document.getElementById("score").innerHTML = score;//寫(xiě)入div } snackBlock = newBlock; //是否撞墻 if (currentLeft < 0 || currentLeft >= 800 || currentTop < 0 || currentTop >= 400) { alert("game over!"); clearInterval(interval); return; } if (eat == false) { //移除尾巴 removeBlock(snackDivArray.shift(div)); } //是否撞到自己 snackDivArray.forEach(function (item, index, array) { if (item.top == currentTop && item.left == currentLeft) { alert("game over!"); clearInterval(interval); return; } }); //創(chuàng)建新的身體 var div = showBlock(newBlock.left, newBlock.top, "red"); div.left = newBlock.left; div.top = newBlock.top; snackDivArray.push(div); }, 300); } //方向控制 function doUp() { if (direction == down && hasEat) { return; } direction = up; } function doDown() { if (direction == up && hasEat) { return; } direction = down; } function doRight() { if (direction == left && hasEat) { return; } direction = right; } function doLeft() { if (direction == right && hasEat) { return; } direction = left; } function showBlock(left, top, color) {//產(chǎn)生方塊 var content = document.getElementById("content"); var snackDiv = document.createElement("div"); snackDiv.style.width = "20px"; snackDiv.style.height = "20px"; snackDiv.style.left = left + "px"; snackDiv.style.top = top + "px"; snackDiv.style.background = color; snackDiv.style.position = "absolute"; content.appendChild(snackDiv); return snackDiv; } function removeBlock(div) {//移除方塊 div.parentNode.removeChild(div); } //鍵盤(pán)控制方向 document.onkeydown = function (e) { if (e && e.keyCode == 38) { doUp(); } else if (e && e.keyCode == 40) { doDown(); } else if (e && e.keyCode == 37) { doLeft(); } else if (e && e.keyCode == 39) { doRight(); } } </script> </body> </html>
更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于JavaScript實(shí)現(xiàn)div層跟隨滾動(dòng)條滑動(dòng)
項(xiàng)目需求是這樣的:在一個(gè)頁(yè)面放2個(gè)懸浮框,懸浮框隨頁(yè)面的上下滾動(dòng)有上下波動(dòng)的效果,最終固定在同一位置,下面通過(guò)本文給大家分享基于JavaScript實(shí)現(xiàn)div層跟隨滾動(dòng)條滑動(dòng)的相關(guān)資料,對(duì)js div跟隨滾動(dòng)條滑動(dòng)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01ES6?Promise.all的使用方法以及其細(xì)節(jié)詳解
Promise對(duì)象用于表示一個(gè)異步操作的最終完成(或失敗)及其結(jié)果值,下面這篇文章主要給大家介紹了關(guān)于ES6?Promise.all的使用方法以及其細(xì)節(jié)的相關(guān)資料,需要的朋友可以參考下2022-07-07來(lái)自騰訊的一個(gè)不固定高度得消息的滾動(dòng)特效
8月最后1天,趕緊補(bǔ)篇博客。貼個(gè)最近看到的騰訊的特效,寫(xiě)的還可以。先看效果。2010-09-09Javascript中獲取瀏覽器類型和操作系統(tǒng)版本等客戶端信息常用代碼
跟蹤一些最基本的客戶端訪問(wèn)信息,這里將一些公用的代碼總結(jié)下來(lái),需要的朋友可以參考下2016-06-06JavaScript EasyPager 分頁(yè)函數(shù)
好久不寫(xiě)js,手都有點(diǎn)生了。寫(xiě)個(gè)小東西熱手。2011-05-05javascript模擬地球旋轉(zhuǎn)效果代碼實(shí)例
javascript模擬地球旋轉(zhuǎn)效果,把一下代碼保存到HTML文件,打開(kāi)就可以看到一個(gè)旋轉(zhuǎn)的地球。請(qǐng)使用Chrome、Opera或者火狐瀏覽器查看,IE8不支持2013-12-12