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