明霞山资源网 Design By www.htccd.com
本文实例为大家分享了js实现贪吃蛇的具体代码,供大家参考,具体内容如下
游戏思路:
- 创建方块、控制按钮(showBlock)
- 方块移动(点击开始,不断创建并移除前面的方块,用到队列先进先出)
- 控制移动(doUp\doDown\doLeft\doRight,加入用键盘控制)
- 产生食物方块(generateFood)
- 吃到食物变长(当方块位置相同时,吃食物)
- 判断撞墙、撞到自己游戏结束
- 设置积分
<!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>
//定义参数
var snackBlock = {};
snackBlock.top = 20;
snackBlock.left = 20;
var firstDiv = showBlock(snackBlock.left, snackBlock.top, "red");
var snackDivArray = [];//装方块的数组
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;
}
});
//创建新的身体
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) {//产生方块
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>
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏 玩不停
java经典小游戏汇总
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
标签:
js,贪吃蛇
明霞山资源网 Design By www.htccd.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
明霞山资源网 Design By www.htccd.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。