html5贪吃蛇小游戏
好一阵子前自己随便写的:
js代码:
//将method作用域绑定于一个目标
function makeCallback(method,target){
return function(){method.apply(target,arguments);}
}
//坐标点类
var point = function(x,y){
this.x = x;
this.y = y;
this.comp = function(tempPoint){
if(tempPoint.x==this.x&&tempPoint.y==this.y)return true;
else return false;
};
};
//蛇类
var snake = function(){
this.pointArr = new Array();
this.dir = 1;
this.food = null;
this.gogo = null;
this.putFood = function(){
var x,y;
while(1){
var flag = 0;
x = Math.round(Math.random()*79);
y = Math.round(Math.random()*49);
for(var i = 0;i<this.pointArr.length;i++){
if(x==this.pointArr[i].x&&y==this.pointArr[i].y){
flag = 1;
break;
}
}
if(flag==0)break;
}
this.food.x = x;
this.food.y = y;
};
this.move = makeCallback(function(){
for(var j=1;j<this.pointArr.length;j++){
if(this.pointArr[j].x==this.pointArr[0].x&&this.pointArr[j].y==this.pointArr[0].y){
clearInterval(this.gogo);
alert("吃到自己了啊亲~~");
}
}
if(this.pointArr[0].x>=80||this.pointArr[0].y>=50||this.pointArr[0].x<0||this.pointArr[0].y<0){
clearInterval(this.gogo);
alert("撞墙了啊亲~~");
}
var popPoint = this.pointArr.pop();
switch(this.dir){
case 0:
var tempPoint = new point(this.pointArr[0].x,this.pointArr[0].y-1);
if(this.food.comp(tempPoint)){
this.pointArr.push(popPoint);
this.putFood();
}
this.pointArr.unshift(tempPoint);
break;
case 1:
var tempPoint = new point(this.pointArr[0].x+1,this.pointArr[0].y);
if(this.food.comp(tempPoint)){
this.pointArr.push(popPoint);
this.putFood();
}
this.pointArr.unshift(tempPoint);
break;
case 2:
var tempPoint = new point(this.pointArr[0].x,this.pointArr[0].y+1);
if(this.food.comp(tempPoint)){
this.pointArr.push(popPoint);
this.putFood();
}
this.pointArr.unshift(tempPoint);
break;
case 3:
var tempPoint = new point(this.pointArr[0].x-1,this.pointArr[0].y);
if(this.food.comp(tempPoint)){
this.pointArr.push(popPoint);
this.putFood();
}
this.pointArr.unshift(tempPoint);
break;
default:;
}
context.clearRect(0,0,800,500);
for(var i=0;i<this.pointArr.length;i++){
context.fillStyle='#FF0000';
context.fillRect(this.pointArr[i].x*10,this.pointArr[i].y*10,10,10);
context.fillStyle='#87CEFA';
context.strokeRect(this.pointArr[i].x*10,this.pointArr[i].y*10,10,10);
}
context.fillStyle='#FF0000';
context.fillRect(this.food.x*10,this.food.y*10,10,10);
},this);
this.init = function(){
this.pointArr = [new point(22,20),new point(21,20),new point(20,20)];
this.dir = 1;
this.food = new point(30,20);
this.gogo = setInterval(this.move,50);
};
};
var canvas = document.getElementById('canvas');
var context = canvas.getContext("2d");
var aSnake = new snake();
aSnake.init();
$(document).bind('keydown',function (event){
switch (event.keyCode) {
case 38://up
if(aSnake.dir == 2)break;
aSnake.dir = 0;
break;
case 40://down
if(aSnake.dir == 0)break;
aSnake.dir = 2;
break;
case 37://left
if(aSnake.dir == 1)break;
aSnake.dir = 3;
break;
case 39://right
if(aSnake.dir == 3)break;
aSnake.dir = 1;
break;
}
});
html代码:
<!DOCTYPE html> <html> <head> <style> </style> <script src="jquery-1.7.2.min.js"></script> <script> </script> </head> <body style="margin:0;padding:50px;"> <canvas id="canvas" width="800" height="500" style="border:solid 1px black"></canvas> <script src="mySnake.js"></script> </body> </html>

浙公网安备 33010602011771号