html5仿一flash游戏,是男人就下一百层

<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();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值