<audio id="main_music" loop>
<source src="http://dl.dropbox.com/u/26141789/canvas/snake/main.mp3" type="audio/mp3"/>
<source src="http://dl.dropbox.com/u/26141789/canvas/snake/main.ogg" type="audio/ogg"/>
</audio>
<canvas id="cv"></canvas>
var mainMusic = document.getElementById("main_music");
var cv = document.getElementById('cv'),
ctx = cv.getContext('2d');
w = 800;
h = 600;
cv.width = w;
cv.height = h;
var paintCv = function(){
ctx.fillStyle = 'black';
ctx.fillRect(0, 0, w, h)
}
var size = 20,
playerX = w/size/2,
playerY = 0,
speed = 16,
gameLoop = null,
elemyArr = [],
elemyNum = 20,
score = 0;
var paintPlayer = function(){
ctx.fillStyle = 'blue';
ctx.fillRect(playerX * size, playerY * size, size, size);
}
var paintElemy = function(){
for(var i=0; i<elemyNum; i++){
for(var j=0; j<elemyArr[i].length; j++){
ctx.fillStyle = 'white';
ctx.fillRect(elemyArr[i][j].x * size, elemyArr[i][j].y * size, size, size);
}
}
}
var update = function(){
var add = 1;
for(var i=0; i<elemyNum; i++){
for(var j=0; j<elemyArr[i].length; j++){
if(elemyArr[i][j].y == playerY && elemyArr[i][j].x == playerX){ //elemy自减和player自加位置重叠的情况,+2使player回到elemy上方
add = -2;
elemyArr[i][j].y--
} else if(--elemyArr[i][j].y == playerY && elemyArr[i][j].x == playerX){ //正好落到elemy上方的情况
add = -1;
}
}
}
for(var i=0; i<elemyNum; i++){
for(var j=0; j<elemyArr[i].length; j++){
if(elemyArr[i][j].y < 0){
var _jLength = Math.round(Math.random()*3+3),
_x = Math.round(Math.random() * w/size),
_y = h/size + i,
_arr = [];
for(var j=0; j<_jLength; j++){
_x++;
_arr.push({'x': _x, 'y': _y});
}
elemyArr.splice(i, 1);
elemyArr.push(_arr);
score++;
}
}
}
playerY += add;
if(playerX >= w/size){
playerX = w/size;
} else if(playerX <= 0){
playerX = 0;
} else if(playerY >= h/size-1){
playerY = h/size-1;
} else if(playerY < 0){
mainMusic.pause();
alert('GAME OVER ! 跳进了'+ score +'层地狱');
clearInterval(gameLoop);
size = 20,
playerX = w/size/2,
playerY = 0,
speed = 16,
gameLoop = null,
elemyArr = [],
elemyNum = 20,
score = 0;
init();
}
}
var draw = function(){
paintCv();
paintPlayer();
paintElemy();
update();
}
var init = function(){
document.onkeydown = function(e){
var code = e.keyCode;
if(code == 37)playerX -= 1;
//if(code == 38)playerY -= 1;
if(code == 39)playerX += 1;
if(code == 40)playerY += 1;
}
for(var i=0; i<elemyNum; i++){
var _jLength = Math.round(Math.random()*3+3),
_x = Math.round(Math.random() * w/size),
_y = h/size + i,
_arr = [];
for(var j=0; j<_jLength; j++){
_x++;
_arr.push({'x': _x, 'y': _y});
}
elemyArr.push(_arr);
}
gameLoop = setInterval(draw, 1000/speed);
mainMusic.play();
}
init();