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


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
男人就下100游戏源码,经典的flash游戏《是男人就下100》登录win8平台了,支持surface 以及 surface pro, 操作方式支持键盘左右键和触摸操作,该游戏现在android版,ios版已经上线了,但是wp版现在才开发的,喜欢的朋友可以了解一下吧。 项目介绍 这毕竟是个小游戏,本身其实没有什么技术难点,主要在于项目的设计,分为如下几个小模块 1、玩家 (Player) 玩家类我用了单例模式,继承自CCSprite,因为贯穿游戏一直会有玩家存在,在这个版本里也不会有第二个,所以单例成了我很好的选择。 封装了 运动、血量 等。整体的游戏运动采取了背景运动而人不动的方式,感觉在这里这种要更容易掌控一些,分很明显。 2、平台 这里我参照了 Floyd 的Js版本实现,以 BlockBase 作为所有平台游戏的基类,实现了向上运动,检测玩家碰撞,移除平台等基础功能。 然后根据不同的平台类型,继承该基类实现不同效果,比如跳起,伤害,左右平移等。 分别有:NormalBlock (最普通的平台) 、FlipBlock(让人弹跳的平台)、MissBlock(会破损的平台)、ThornBlock(带刺的平台)、LeftRunBlock、RightRunBlock (左右运动的平台) 还有个 BlockFactory 工厂类, 负责在恰当的时候创建合适的平台,创建的规则是随机类型,位置是从预先定义的几个里面随机取。 对于所有平台的管理, 本来最好应该是做个缓存池的,但是我发现这个性能降低实在是可以忽略,所以。。。 3、输入 输入这里,定义了一个基类,InputBase,因为最终肯定有几种输入的方式:PC(键盘、鼠标)、手势、重力感应等,所以这个从一开始就要考虑到。具体的处理方式是 给定一个固定的运动速度, 然后有输入事件的时候就让玩家按照这个速度来运行, 但是现在实际的效果感觉还不太理想。 4、场景 场景就是那么基础的几个了。。。游戏主界面采用了MVC的模式来设计,CCScene 作为 Controller ,其它的Layer 作为View。其它页面都比较简单,单Layer 实现。逻辑也都放在Layer里了。 另外,专门定义了一个 HideLayer ,目的是实现弹出对话框的效果,考虑到原场景中可能会有CCMenu,我将该 Layer 的 优先级设为了 与 CCMenu 相同,因为后添加的原因,所以总能屏蔽 Menu 的事件, 而且在 Layer 上再添加Menu 也不会有问题。 还有个比较有意思的是: 所有的场景我都继承了 IBackableScene 接口,这是我自己定义的一个抽象类,因为我发现对于 “后退” 按钮的处理在游戏中是非常常见的,所以这个接口里定义了 bool GoBack() = 0 函数, 所有需要响应后退事件的场景都要实现该方法,然后在该方法里实现具体的返回 代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值