javascript實現(xiàn)貪吃蛇小練習(xí)
更新時間:2020年07月05日 14:34:33 作者:余依忈
這篇文章主要為大家詳細介紹了javascript實現(xiàn)貪吃蛇的小練習(xí),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了js實現(xiàn)貪吃蛇的具體代碼,供大家參考,具體內(nèi)容如下
游戲思路:
- 創(chuàng)建方塊、控制按鈕(showBlock)
- 方塊移動(點擊開始,不斷創(chuàng)建并移除前面的方塊,用到隊列先進先出)
- 控制移動(doUp\doDown\doLeft\doRight,加入用鍵盤控制)
- 產(chǎn)生食物方塊(generateFood)
- 吃到食物變長(當(dāng)方塊位置相同時,吃食物)
- 判斷撞墻、撞到自己游戲結(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()">開始游戲</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;//吃一個加10分
document.getElementById("score").innerHTML = score;//寫入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);
}
//鍵盤控制方向
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)專題,分享給大家:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于JavaScript實現(xiàn)div層跟隨滾動條滑動
項目需求是這樣的:在一個頁面放2個懸浮框,懸浮框隨頁面的上下滾動有上下波動的效果,最終固定在同一位置,下面通過本文給大家分享基于JavaScript實現(xiàn)div層跟隨滾動條滑動的相關(guān)資料,對js div跟隨滾動條滑動相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2016-01-01
ES6?Promise.all的使用方法以及其細節(jié)詳解
Promise對象用于表示一個異步操作的最終完成(或失敗)及其結(jié)果值,下面這篇文章主要給大家介紹了關(guān)于ES6?Promise.all的使用方法以及其細節(jié)的相關(guān)資料,需要的朋友可以參考下2022-07-07
Javascript中獲取瀏覽器類型和操作系統(tǒng)版本等客戶端信息常用代碼
跟蹤一些最基本的客戶端訪問信息,這里將一些公用的代碼總結(jié)下來,需要的朋友可以參考下2016-06-06
JavaScript EasyPager 分頁函數(shù)
好久不寫js,手都有點生了。寫個小東西熱手。2011-05-05

