package
{
import flash.display. MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.media.Sound;
import flash.text.*;
public class Main extends Sprite
{
public static const STATE_INIT:int = 10;
public static const STATE_PLAY:int = 20;
public static const STATE_GAME_OVER:int = 30;
public var gameState:int = 0; // 游戏状态
public var score:int = 0; // 玩家的分数
public var chances:int = 0; // 漏掉的气球数
public var level: Number = 1; // 等级
public var bg: MovieClip;
public var enemies:Array; // 存储敌人(气球)的数组
public var player: MovieClip; // 引用玩家的图片
public var tempEnemy: MovieClip; // 随机出来的气球
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; // 计分板位于游戏底部
public function Main():void
{
init();
}
private function init():void
{
this.addEventListener(Event.ENTER_FRAME, gameLoop);
// 显示背景
bg = new BackImage();
this.addChild(bg);
// 设置计分板标题和默认值
scoreLabel.text = "得分:";
scoreText.text = "0";
levelLabel.text = "等级:";
levelText.text = "1";
chancesLabel.text = "碰撞:";
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;
// 显示计分板
this.addChild(scoreLabel);
this.addChild(levelLabel);
this.addChild(chancesLabel);
this.addChild(scoreText);
this.addChild(levelText);
this.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_GAME_OVER:
endGame();
break;
}
}
// 初始化游戏
public function initGame():void
{
// 初始化游戏
score = 0; // 分数
chances = 0; // 漏网数
// level = 1;
levelText.text = level.toString();
player = new PlayerImage();
this.addChild(player);
player.startDrag( true, new Rectangle(0,0,550,400));
// 存储气球们
enemies = new Array();
gameState = STATE_PLAY;
}
// 开始游戏
public function playGame():void
{
// 旋转飞镖
player.rotation += 20;
// 创建气球(敌人)函数
makeEnemies();
// 更新祈求Y坐标以及飘出屏幕时移除掉
moveEnemies();
// 检测玩家是否与敌人发生了碰撞,如果是的话就触发一事件
testCollisions();
// 查看等级(level)是否可增加或游戏是否可结束
testForEnd();
}
public function makeEnemies():void
{
// 获取一个0-99之间的随机数
var chance: Number = Math.floor(Math.random() * 100);
// 等级越大,气球出现的概率越高
if(chance < level+2)
{
// 创建气球
tempEnemy = new EnemyImage();
// 等级越高,气球速度越快
tempEnemy.speed = level + 3;
// 随机刷出1-5帧中对应颜色的气球出来
var xxxx = Math.floor(Math.random() * 5) + 1;
tempEnemy.gotoAndStop(xxxx);
// 气球Y轴出现的坐标,从底端开始移动
tempEnemy.y = 435;
// 气球X轴出现的坐标,由于屏幕是0-540,所以气球(本身有30个宽度)从0-514中随机刷出
tempEnemy.x = Math.floor(Math.random() * 515);
var tt:TextField = new TextField();
var ttf:TextFormat = new TextFormat();
ttf.bold = true;
ttf.align = "center";
ttf.size = 30;
tt.text = xxxx;
tt.setTextFormat(ttf);
tempEnemy.addChild(tt);
// 气球显示到场景
this.addChild(tempEnemy);
// 添加到气球数组中,以便跟踪
enemies.push(tempEnemy);
}
}
// 便利气球数组,更新每个气球Y坐标,移动气球向上飘
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++; // 漏网数+1
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); // 把气球从显示列表中移除
}
}
}
// 查看等级(level)是否可增加或游戏是否可结束
public function testForEnd():void
{
if(chances >= 5)
{
gameState = STATE_GAME_OVER;
}
else if(score >= level * 5)
{
level++;
levelText.text = level.toString();
var level_up:TextField = new TextField();
level_up.text = "恭喜你!升到" + level + "级了!!!";
this.addChild(level_up);
}
}
// 结束游戏
public function endGame():void
{
// 把气球一个个的从显示列表中移除
for( var i:int = 0; i < enemies.length; i++)
{
removeChild(enemies[i]);
enemies= [];
}
player.stopDrag();
}
}
}
{
import flash.display. MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.media.Sound;
import flash.text.*;
public class Main extends Sprite
{
public static const STATE_INIT:int = 10;
public static const STATE_PLAY:int = 20;
public static const STATE_GAME_OVER:int = 30;
public var gameState:int = 0; // 游戏状态
public var score:int = 0; // 玩家的分数
public var chances:int = 0; // 漏掉的气球数
public var level: Number = 1; // 等级
public var bg: MovieClip;
public var enemies:Array; // 存储敌人(气球)的数组
public var player: MovieClip; // 引用玩家的图片
public var tempEnemy: MovieClip; // 随机出来的气球
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; // 计分板位于游戏底部
public function Main():void
{
init();
}
private function init():void
{
this.addEventListener(Event.ENTER_FRAME, gameLoop);
// 显示背景
bg = new BackImage();
this.addChild(bg);
// 设置计分板标题和默认值
scoreLabel.text = "得分:";
scoreText.text = "0";
levelLabel.text = "等级:";
levelText.text = "1";
chancesLabel.text = "碰撞:";
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;
// 显示计分板
this.addChild(scoreLabel);
this.addChild(levelLabel);
this.addChild(chancesLabel);
this.addChild(scoreText);
this.addChild(levelText);
this.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_GAME_OVER:
endGame();
break;
}
}
// 初始化游戏
public function initGame():void
{
// 初始化游戏
score = 0; // 分数
chances = 0; // 漏网数
// level = 1;
levelText.text = level.toString();
player = new PlayerImage();
this.addChild(player);
player.startDrag( true, new Rectangle(0,0,550,400));
// 存储气球们
enemies = new Array();
gameState = STATE_PLAY;
}
// 开始游戏
public function playGame():void
{
// 旋转飞镖
player.rotation += 20;
// 创建气球(敌人)函数
makeEnemies();
// 更新祈求Y坐标以及飘出屏幕时移除掉
moveEnemies();
// 检测玩家是否与敌人发生了碰撞,如果是的话就触发一事件
testCollisions();
// 查看等级(level)是否可增加或游戏是否可结束
testForEnd();
}
public function makeEnemies():void
{
// 获取一个0-99之间的随机数
var chance: Number = Math.floor(Math.random() * 100);
// 等级越大,气球出现的概率越高
if(chance < level+2)
{
// 创建气球
tempEnemy = new EnemyImage();
// 等级越高,气球速度越快
tempEnemy.speed = level + 3;
// 随机刷出1-5帧中对应颜色的气球出来
var xxxx = Math.floor(Math.random() * 5) + 1;
tempEnemy.gotoAndStop(xxxx);
// 气球Y轴出现的坐标,从底端开始移动
tempEnemy.y = 435;
// 气球X轴出现的坐标,由于屏幕是0-540,所以气球(本身有30个宽度)从0-514中随机刷出
tempEnemy.x = Math.floor(Math.random() * 515);
var tt:TextField = new TextField();
var ttf:TextFormat = new TextFormat();
ttf.bold = true;
ttf.align = "center";
ttf.size = 30;
tt.text = xxxx;
tt.setTextFormat(ttf);
tempEnemy.addChild(tt);
// 气球显示到场景
this.addChild(tempEnemy);
// 添加到气球数组中,以便跟踪
enemies.push(tempEnemy);
}
}
// 便利气球数组,更新每个气球Y坐标,移动气球向上飘
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++; // 漏网数+1
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); // 把气球从显示列表中移除
}
}
}
// 查看等级(level)是否可增加或游戏是否可结束
public function testForEnd():void
{
if(chances >= 5)
{
gameState = STATE_GAME_OVER;
}
else if(score >= level * 5)
{
level++;
levelText.text = level.toString();
var level_up:TextField = new TextField();
level_up.text = "恭喜你!升到" + level + "级了!!!";
this.addChild(level_up);
}
}
// 结束游戏
public function endGame():void
{
// 把气球一个个的从显示列表中移除
for( var i:int = 0; i < enemies.length; i++)
{
removeChild(enemies[i]);
enemies= [];
}
player.stopDrag();
}
}
}