为了账号安全,请及时绑定邮箱和手机立即绑定

正在回答

3 回答

只是自己写的js游戏,不懂的问我

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<title>JS贪吃蛇-练习</title> 

<style type="text/css"> 

#pannel table { 

border-collapse: collapse; 

#pannel table td { 

border: 1px solid #808080; 

width: 10px; 

height: 10px; 

font-size: 0; 

line-height: 0; 

overflow: hidden; 

#pannel table .snake { 

background-color: green; 

#pannel table .food { 

background-color: blue; 

</style> 

<script type="text/javascript"> 

var Direction = new function () { 

this.UP = 38; 

this.RIGHT = 39; 

this.DOWN = 40; 

this.LEFT = 37; 

}; 

var Common = new function () { 

this.width = 20; /*水平方向方格数*/ 

this.height = 20; /*垂直方向方格数*/ 

this.speed = 250; /*速度 值越小越快*/ 

this.workThread = null; 

}; 

var Main = new function () { 

var control = new Control(); 

window.onload = function () { 

control.Init("pannel"); 

/*开始按钮*/ 

document.getElementById("btnStart").onclick = function () { 

control.Start(); 

this.disabled = true; 

document.getElementById("selSpeed").disabled = true; 

document.getElementById("selSize").disabled = true; 

}; 

/*调速度按钮*/ 

document.getElementById("selSpeed").onchange = function () { 

Common.speed = this.value; 

/*调大小按钮*/ 

document.getElementById("selSize").onchange = function () { 

Common.width = this.value; 

Common.height = this.value; 

control.Init("pannel"); 

}; 

}; 

/*控制器*/ 

function Control() { 

this.snake = new Snake(); 

this.food = new Food(); 

/*初始化函数,创建表格*/ 

this.Init = function (pid) { 

var html = []; 

html.push("<table>"); 

for (var y = 0; y < Common.height; y++) { 

html.push("<tr>"); 

for (var x = 0; x < Common.width; x++) { 

html.push('<td id="box_' + x + "_" + y + '"> </td>'); 

html.push("</tr>"); 

html.push("</table>"); 

this.pannel = document.getElementById(pid); 

this.pannel.innerHTML = html.join(""); 

}; 

/*开始游戏 - 监听键盘、创建食物、刷新界面线程*/ 

this.Start = function () { 

var me = this; 

this.MoveSnake = function (ev) { 

var evt = window.event || ev; 

me.snake.SetDir(evt.keyCode); 

}; 

try { 

document.attachEvent("onkeydown", this.MoveSnake); 

} catch (e) { 

document.addEventListener("keydown", this.MoveSnake, false); 

this.food.Create(); 

Common.workThread = setInterval(function () { 

me.snake.Eat(me.food); me.snake.Move(); 

}, Common.speed); 

}; 

/*蛇*/ 

function Snake() { 

this.isDone = false; 

this.dir = Direction.RIGHT; 

this.pos = new Array(new Position()); 

/*移动 - 擦除尾部,向前移动,判断游戏结束(咬到自己或者移出边界)*/ 

this.Move = function () { 

document.getElementById("box_" + this.pos[0].X + "_" + this.pos[0].Y).className = ""; 

//所有 向前移动一步 

for (var i = 0; i < this.pos.length - 1; i++) { 

this.pos[i].X = this.pos[i + 1].X; 

this.pos[i].Y = this.pos[i + 1].Y; 

//重新设置头的位置 

var head = this.pos[this.pos.length - 1]; 

switch (this.dir) { 

case Direction.UP: 

head.Y--; 

break; 

case Direction.RIGHT: 

head.X++; 

break; 

case Direction.DOWN: 

head.Y++; 

break; 

case Direction.LEFT: 

head.X--; 

break; 

this.pos[this.pos.length - 1] = head; 

//遍历画蛇,同时判断游戏结束 

for (var i = 0; i < this.pos.length; i++) { 

var isExits = false; 

for (var j = i + 1; j < this.pos.length; j++) 

if (this.pos[j].X == this.pos[i].X && this.pos[j].Y == this.pos[i].Y) { 

isExits = true; 

break; 

if (isExits) { this.Over();/*咬自己*/ break; } 

var obj = document.getElementById("box_" + this.pos[i].X + "_" + this.pos[i].Y); 

if (obj) obj.className = "snake"; else { this.Over();/*移出边界*/ break; } 

this.isDone = true; 

}; 

/*游戏结束*/ 

this.Over = function () { 

clearInterval(Common.workThread); 

alert("游戏结束!"); 

/*吃食物*/ 

this.Eat = function (food) { 

var head = this.pos[this.pos.length - 1]; 

var isEat = false; 

switch (this.dir) { 

case Direction.UP: 

if (head.X == food.pos.X && head.Y == food.pos.Y + 1) isEat = true; 

break; 

case Direction.RIGHT: 

if (head.Y == food.pos.Y && head.X == food.pos.X - 1) isEat = true; 

break; 

case Direction.DOWN: 

if (head.X == food.pos.X && head.Y == food.pos.Y - 1) isEat = true; 

break; 

case Direction.LEFT: 

if (head.Y == food.pos.Y && head.X == food.pos.X + 1) isEat = true; 

break; 

if (isEat) { 

this.pos[this.pos.length] = new Position(food.pos.X, food.pos.Y); 

food.Create(this.pos); 

}; 

/*控制移动方向*/ 

this.SetDir = function (dir) { 

switch (dir) { 

case Direction.UP: 

if (this.isDone && this.dir != Direction.DOWN) { this.dir = dir; this.isDone = false; } 

break; 

case Direction.RIGHT: 

if (this.isDone && this.dir != Direction.LEFT) { this.dir = dir; this.isDone = false; } 

break; 

case Direction.DOWN: 

if (this.isDone && this.dir != Direction.UP) { this.dir = dir; this.isDone = false; } 

break; 

case Direction.LEFT: 

if (this.isDone && this.dir != Direction.RIGHT) { this.dir = dir; this.isDone = false; } 

break; 

}; 

/*食物*/ 

function Food() { 

this.pos = new Position(); 

/*创建食物 - 随机位置创建立*/ 

this.Create = function (pos) { 

document.getElementById("box_" + this.pos.X + "_" + this.pos.Y).className = ""; 

var x = 0, y = 0, isCover = false; 

/*排除蛇的位置*/ 

do { 

x = parseInt(Math.random() * (Common.width - 1)); 

y = parseInt(Math.random() * (Common.height - 1)); 

isCover = false; 

if (pos instanceof Array) { 

for (var i = 0; i < pos.length; i++) { 

if (x == pos[i].X && y == pos[i].Y) { 

isCover = true; 

break; 

} while (isCover); 

this.pos = new Position(x, y); 

document.getElementById("box_" + x + "_" + y).className = "food"; 

}; 

function Position(x, y) { 

this.X = 0; 

this.Y = 0; 

if (arguments.length >= 1) this.X = x; 

if (arguments.length >= 2) this.Y = y; 

</script> 

</head> 

<body> 

<div id="pannel" style="margin-bottom: 10px;"></div> 

<select id="selSize"> 

<option value="20">20*20</option> 

<option value="30">30*30</option> 

<option value="40">40*40</option> 

</select> 

<select id="selSpeed"> 

<option value="500">速度-慢</option> 

<option value="250" selected="selected">速度-中</option> 

<option value="100">速度-快</option> 

</select> 

<input type="button" id="btnStart" value="开始" /> 

</body> 

</html> 


2 回复 有任何疑惑可以回复我~
#1

lz498806332 提问者

非常感谢!
2016-07-01 回复 有任何疑惑可以回复我~

好玩!

0 回复 有任何疑惑可以回复我~

贼棒!

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

求js写的游戏

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信