87,909
社区成员
发帖
与我相关
我的任务
分享
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>wujinjian </title>
<script type="text/javascript">
var snakeBodyW_H=20; //蛇身大小
var ModeEnum = {First:"first",Next:"next"}
var DirectEnum ={Left:"left",Right:"right",Up:"up",Down:"down"};
var components = {};
var handlers = {};
function $Find(id)
{
if(!components[id])
{
if(id=="SnakeGame")
{
components[id] = new SnakeGame();
}
else if(id=="snake")
{
components[id] = new Snake();
}
else if(id=="foods")
{
components[id] = new Food();
}
}
return components[id];
}
function $Get(id)
{
return document.getElementById(id);
}
function $CreateDelegate(instance, method) {
/// <param name="instance" mayBeNull="true"></param>
/// <param name="method" type="Function"></param>
/// <returns type="Function"></returns>
return function() {
return method.apply(instance, arguments);
}
}
function InitGame() {
document.getElementById("tx_id").value = "第 1 关";
var snakeGame = $Find("SnakeGame");
if(snakeGame)
{
snakeGame.set_snakeId("snake");
snakeGame.set_foodsId("foods");
snakeGame.ResetStart();
}
}
function SnakeGame()
{
this._sd=250;
this._timer=null;
this._foodsId=null;
this._snakeId=null;
this._direction = null;
this._mode = ModeEnum.First;
this._isPass = false;
}
SnakeGame.prototype = {
ResetStart: function() {
document.getElementById("start_bt_id").disabled = true;
if (this._mode == ModeEnum.First)
document.getElementById("tx_id").value = "第 1 关";
this._timer = null;
this._direction = DirectEnum.Right;
var foods = $Find(this._foodsId);
var snake = $Find(this._snakeId);
snake.set_footDivObjId("food_div_id");
snake.set_mapDivObjId("map_id");
foods.set_footDivObjId("food_div_id");
foods.ResetFoods();
snake.ResetSnake();
snake.Initialize();
this._startGame();
},
_startGame: function() {
// debugger;
//初始化蛇身的个数,这里是3个
this._timer = setInterval(this.raise_move, this._sd);
},
_moveSnake: function() {
this.raise_move();
},
//判断蛇是否吃到食物
IsDivSuperpose: function(snakeDivObj, footDivObj) {
var snakePos = GetItemPos(snakeDivObj);
var foodPos = GetItemPos(footDivObj);
var rectangle = GetRectangle(foodPos, snakePos);
if (rectangle > 0) {
var foods = $Find(this._foodsId);
foods.ConsumeFood();
if (!foods.CheckFood()) {
foods.NewFood();
var snake = $Find(this._snakeId);
snake.AddSnakeBody();
}
else {
// this.set_isPass(true);
this.GoToNextLevel();
}
}
},
GoToNextLevel: function() {
alert("恭喜你进入下一关");
this._sd = this._sd - 10; //速度
document.getElementById("tx_id").value = "第 " + (document.getElementById("tx_id").value.split(" ")[1] - 0 + 1) + " 关";
this._mode = ModeEnum.Next;
var foods = $Find(this._foodsId);
var snake = $Find(this._snakeId);
this.ResetStart();
// InitGame();
},
IsKill: function(snakeDivObj, mapDivObj) {
var snakePos = GetItemPos(snakeDivObj);
var panelRectangle = GetItemPos(mapDivObj);
if (snakePos.Right >= panelRectangle.Right ||
snakePos.Left <= panelRectangle.Left || snakePos.Top <= panelRectangle.Top
|| snakePos.Bottom >= panelRectangle.Bottom) {
this._gameOver();
return true;
}
return false;
},
_gameOver: function() {
var obj = clearInterval(this._timer);
var snake = $Find(this._snakeId);
snake.ClearSnakeHandler();
alert("失败!");
document.getElementById("start_bt_id").disabled = false;
},
get_sd: function() { return this._sd; },
set_sd: function(value) { this._sd = value; },
get_isPass: function() { return this._isPass; },
set_isPass: function(value) { this._isPass = value; },
get_mode: function() { return this._mode; },
set_mode: function(value) { this._mode = value; },
get_timer: function() { return this._timer; },
set_timer: function(value) { this._timer = value; },
get_foodsId: function() { return this._foodsId; },
set_foodsId: function(value) { this._foodsId = value; },
get_direction: function() { return this._direction; },
set_direction: function(value) { this._direction = value; },
add_move: function(handler) {
handlers["move"] = handler;
},
remove_move: function(handler) {
handlers["move"] = null;
delete handlers["move"];
},
raise_move: function(eventargs) {
var handler = handlers["move"];
if (handler) {
handler(this, eventargs);
}
},
get_snakeId: function() { return this._snakeId; },
set_snakeId: function(value) { this._snakeId = value; }
}
function Snake()
{
this._bodyNum = 3;
this._snakeGame="SnakeGame";
this._snakeArr = [];
this._footDivObjId = null;
this._mapDivObjId = null;
this._moveDelegate = $CreateDelegate(this, this.SnakeMove);
}
Snake.prototype = {
AddSnakeBody: function() {
this._snakeArr[this._snakeArr.length] = this._createSnakeBody();
},
_createSnakeBody: function() {
var snakeDiv = document.createElement("div");
snakeDiv.style.position = "absolute";
snakeDiv.style.left = "120px";
snakeDiv.style.top = "300px";
snakeDiv.style.width = snakeBodyW_H + "px";
snakeDiv.style.height = snakeBodyW_H + "px";
document.body.appendChild(snakeDiv);
return snakeDiv;
},
Initialize: function() {
for (var i = 0; i < this._bodyNum; i++) {
this.AddSnakeBody();
}
var snakeGame = $Find(this._snakeGame);
if (snakeGame) {
snakeGame.add_move(this._moveDelegate);
}
},
ClearSnakeHandler: function() {
var snakeGame = $Find(this._snakeGame);
if (snakeGame) {
snakeGame.remove_move(this._moveDelegate);
}
},
SnakeMove: function() {
var last = this._snakeArr[this._snakeArr.length - 1];
//把最后一个元素移到第一个
for (var i = this._snakeArr.length - 1; i > 0; i--) {
this._snakeArr[i] = this._snakeArr[i - 1];
this._snakeArr[i].style.backgroundColor = "red";
this._snakeArr[i].style.border = "white solid 1px";
}
this._snakeArr[0] = last;
var first = this._snakeArr[0];
var second = this._snakeArr[1];
first.style.backgroundColor = "blue";
var secondPos = GetItemPos(second);
var footDivObj = $Get(this._footDivObjId);
var mapDivObj = $Get(this._mapDivObjId);
var snakeGame = $Find(this._snakeGame);
if (snakeGame) {
var direction = snakeGame.get_direction();
if (direction == DirectEnum.Left) {
first.style.left = secondPos.Left - snakeBodyW_H + "px";
first.style.top = secondPos.Top + "px";
}
else if (direction == DirectEnum.Up) {
first.style.left = secondPos.Left + "px";
first.style.top = secondPos.Top - snakeBodyW_H + "px";
}
else if (direction == DirectEnum.Right) {
first.style.left = secondPos.Left + snakeBodyW_H + "px";
first.style.top = secondPos.Top + "px";
}
else if (direction == DirectEnum.Down) {
first.style.left = secondPos.Left + "px";
first.style.top = secondPos.Top + snakeBodyW_H + "px";
}
if (!snakeGame.IsKill(first, mapDivObj))
snakeGame.IsDivSuperpose(first, footDivObj);
}
},
/**
* @class SomeClass 贪食蛇小游戏
* @constitution SomeClass
* @param param1 {String} 参数1
* @param param2 {object || null} 参数2
*/
SomeClass = function(param1, param2) {
/**
* @field Field1 {String} 字段1
*/
thsi.Field1 = param1;
};
SomeClass.prototype = {
/**
* @public
* @method function1 方法1
* @param agr1 {Number} 参数1
*/
function1 : function(arg1) {},
/**
* @private
*/
_privateFunction : function() {},
toString : function() {}
};