flash as3 扎气球游戏

如图:

 

游戏玩法:

在这个游戏中,玩家用鼠标控制旋转的刀刃。气球从屏幕低端飘上来,玩家必须用刀刃去把所
有出现的气球戳破。随着游戏的运行,等级会持续提升,气球飘动的速度越来越快。如果玩家漏掉了五
个气球,游戏就结束了。由于没有设立一个重置方法,所以要重新玩的话只能关掉它再打开。

附代码和分解:

package {
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.display.*;
	import flash.events.*;
	import flash.geom.Rectangle; // new
	import flash.media.Sound; //new
	import flash.text.*; //new
	
	public class Game extends  flash.display.MovieClip{
		
		public static const STATE_INIT:int = 10;
		public static const STATE_PLAY:int = 20;
		public static const STATE_END_GAME:int = 30;
		
		public var gameState:int = 0;//游戏状态
		public var score:int = 0; //得分
		public var chances:int = 0; //漏掉了几个气球
		
		public var bg:MovieClip; //游戏的背景图
		public var enemies:Array; //储存敌人(气球)
		public var player:MovieClip; //引用玩家的图片
		public var level:Number = 0; //等级
		
		//文本
		public var scoreLabel:TextField = new TextField();
		public var levelLabel:TextField = new TextField();
		public var chancesLabel:TextField = new TextField();
		public var scoreText:TextField = new TextField();
		public var levelText:TextField = new TextField();
		public var chancesText:TextField = new TextField();
		
		public const SCOREBOARD_Y:Number =380;//给计分板固定的Y坐标,使分数保持在最下端,舞台的高是400,在这改坐标设为380
		
		public function Game() {
			addEventListener(Event.ENTER_FRAME, gameLoop);
			bg = new BackImage();
			addChild(bg); //将背景添加到舞台上
			
			scoreLabel.text = "Score:";
			levelLabel.text = "Level:";
			chancesLabel.text ="Misses:"
			scoreText.text ="0";
			levelText.text ="1";
			chancesText.text ="0";
			
			scoreLabel.y = SCOREBOARD_Y;
			levelLabel.y = SCOREBOARD_Y;
			chancesLabel.y = SCOREBOARD_Y;
			scoreText.y = SCOREBOARD_Y;
			levelText.y = SCOREBOARD_Y;
			chancesText.y = SCOREBOARD_Y;
			scoreLabel.x = 5;
			scoreText.x  = 50;
			chancesLabel.x = 105;
			chancesText.x = 155;
			levelLabel.x = 205;
			levelText.x = 260;
			
			
			
			addChild(scoreLabel);
			addChild(levelLabel);
			addChild(chancesLabel);
			addChild(scoreText);
			addChild(levelText);
			addChild(chancesText);
			
			
			gameState = STATE_INIT;
		}
		
		public function gameLoop(e:Event):void {
			switch(gameState) {
							
				case STATE_INIT :
					initGame();
					break
				case STATE_PLAY:
					playGame();
					break;
				case STATE_END_GAME:
					endGame();
					break;	
			}
			
		
		}		
		//开始游戏时所有的初始值
		public function initGame():void {
			//stage.addEventListener(MouseEvent.CLICK, onMouseClickEvent); removed
			score = 0; //chnaged from clicks to score
			chances = 0; //new			
			player = new PlayerImage(); // new
			enemies = new Array(); //new
			level = 1; // new
			levelText.text = level.toString();
			addChild(player);//new
			player.startDrag(true,new flash.geom.Rectangle(0,0,550,400)); //鼠标拖动元件通过这个实现   第一个参数为true 表示锁定在中央 ,第二个参数表示可以拖动的范围  
			gameState = STATE_PLAY;
		}
		
		public function playGame():void {
			player.rotation+=15;//玩家控制元件每次旋转15度
			makeEnemies(); //让敌人出现
			moveEnemies(); //更新气球的Y坐标,以及气球飘出屏幕的时候移除气球
			testCollisions(); //检测玩家和敌人是否碰撞了
			testForEnd(); //查看等级是否增加了,或是游戏是不是该结束了
		}
		
		//气球出现的频率和等级相关
		public function makeEnemies():void {
			var chance:Number = Math.floor(Math.random() *100);//获取0--99的随机数
			var tempEnemy:MovieClip;
			if (chance < 2 + level) {
				tempEnemy = new EnemyImage()
				tempEnemy.speed = 3 + level; //通过动态变量设置速度,随等级的增加速度越来越快
				tempEnemy.gotoAndStop(Math.floor(Math.random()*5)+1);
				tempEnemy.y = 435;  //表示从低端开始移动
				tempEnemy.x = Math.floor(Math.random()*515)
				addChild(tempEnemy);
				enemies.push(tempEnemy);  //添加到敌人数组
			}
		}
		
		// 更新每个气球的坐标
		public function moveEnemies():void {
			var tempEnemy:MovieClip;
			for (var i:int = enemies.length-1;i>=0;i--) {
				tempEnemy = enemies[i];
				tempEnemy.y-=tempEnemy.speed;					
				if (tempEnemy.y < -35) {
					chances++;			
					chancesText.text = chances.toString();
					enemies.splice(i,1);		
					removeChild(tempEnemy);
				}
			}
		
		}
		
		//检查碰撞
		public function testCollisions():void {
			var sound:Sound = new Pop();
			var tempEnemy:MovieClip;
			for (var i:int =enemies.length-1;i>=0;i--) {
				tempEnemy = enemies[i];
				if (tempEnemy.hitTestObject(player)) {
					score++;  //分数加
					scoreText.text = score.toString();
					sound.play();  //气球破了播放声音
					enemies.splice(i,1);  //从数组中移除这个气球
					removeChild(tempEnemy);
				}
			}
				
		
		}
		
		//调用并检测当前等级和几乎的剩余
		public function testForEnd():void {
			if (chances>= 5) {
				gameState = STATE_END_GAME;
			} else if(score > level*20) {
				level ++;
				levelText.text = level.toString();
			}
		}
		
		//移除屏幕上所有敌人
		public function endGame():void {
			for(var i:int = 0; i< enemies.length; i++) {
				removeChild(enemies[i]);
				enemies =[];		
				
			}
			player.stopDrag();
		}
		
		
	
	}
}


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值