Program: Flash Language: AS3 Software Used: Flash Professional CS5, FlashDevelop 3.3.4
Demo!
Source
package
{
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
/**
* ...
* @author iChow
*/
public class Breakout extends MovieClip
{
private static const ADDSCORE:int = 100;
private static const BWIDTH:int = 320;
private static const BHEIGHT:int = 480;
private var currLevel:int;
private var currScore:int;
private var isPlaying:Boolean;
private var tileAry:Array;
private var mapAry:Array;
private var mapIndex:int;
private var ball:Ball;
private var breaker:Breaker;
private var pauseSpt:Pause;
private var __breakerTitleSpt:Sprite;
private var __startBtn:SimpleButton;
private var __sllSpt:Sprite;
private var __scText:TextField;
private var __liText:TextField;
private var __leText:TextField;
private var __tip:Sprite;
private var __tText:TextField;
private var __iText:TextField;
private var speed:Number = 1;
private var lives:int = 3;
public function Breakout()
{
if (stage) Init();
else addEventListener(Event.ADDED_TO_STAGE, Init);
}
private function Init(e:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE, Init);
//get obj
__breakerTitleSpt = this.getChildByName("breaker_mc") as Sprite;
__startBtn = this.getChildByName("start_btn") as SimpleButton;
__sllSpt = this.getChildByName("sll_mc") as Sprite;
__scText = __sllSpt.getChildByName("scText") as TextField;
__liText = __sllSpt.getChildByName("liText") as TextField;
__leText = __sllSpt.getChildByName("leText") as TextField;
mapAry = Map.getMap();
ball = new Ball();
breaker = new Breaker();
pauseSpt = new Pause();
__tip = pauseSpt.getChildByName("tip") as Sprite;
__tText = __tip.getChildByName("tText") as TextField;
__iText = __tip.getChildByName("iText") as TextField;
tileAry = new Array();
addChild(ball);
addChild(breaker);
ball.visible = false;
breaker.visible = false;
//add event
__startBtn.addEventListener(MouseEvent.CLICK, startClickHandler);
__tip.addEventListener(MouseEvent.CLICK, reStartGame);
__tip.buttonMode = true;
__tip.mouseChildren = false;
}
private function updateText():void
{
__scText.text = "score:"+currScore;
__liText.text = "lives:"+lives;
__leText.text = "level:"+currLevel;
}
private function startClickHandler(e:MouseEvent):void
{
__startBtn.visible = false;
__breakerTitleSpt.visible = false;
__sllSpt.y = 0;
startGame();
}
private function startGame():void {
//
currLevel = 1;
currScore = 0;
mapIndex = 0;
lives = 3;
speed = 1;
updateText();
addEventListener(Event.ENTER_FRAME, ballEnterFrameHandler);
//removeTiles();
createTiles();
reSetBall();
}
private function createTiles():void
{
tileAry = [];
for (var i:int = 0; i < mapAry[mapIndex].length; i++) {
for (var j:int = 0; j < mapAry[mapIndex][i].length; j++) {
if (mapAry[mapIndex][i][j] != 0) {
var _tile:Tile = new Tile();
_tile.x = (_tile.width+2) * j;
_tile.y = (_tile.height+2) * i + 40;
addChild(_tile);
tileAry.push(_tile);
}
}
}
ball.visible = true;
breaker.visible = true;
}
private function removeTiles():void
{
for (var i in tileAry) {
removeChild(tileAry[i]);
}
}
private function ballEnterFrameHandler(e:Event):void
{
if (this.mouseX >= BWIDTH - breaker.width / 2) {
breaker.x = BWIDTH - breaker.width / 2;
}else if (this.mouseX > breaker.width / 2 ) {
breaker.x = this.mouseX;
}else {
breaker.x = breaker.width / 2;
}
if (isPlaying) {
if (ball.x <= ball.width / 2) {
ball.dx = 1;
ball.x = ball.width / 2;
}else if (ball.x >= BWIDTH - ball.width / 2) {
ball.dx = -1;
ball.x = BWIDTH - ball.width / 2;
}
if (ball.y <= 25) {
ball.dy = 1;
ball.y = 25;
}else if (ball.y > (breaker.y + breaker.height)) {
lostGame();
}
if (breaker.hitTestObject(ball)) {
ball.dy = -1;
if (ball.x < breaker.x) {
if (ball.dx > 0) ball.dx = -1;
}else {
ball.dx = 1;
}
}
for (var i in tileAry) {
if (ball.hitTestObject(tileAry[i])) {
currScore += ADDSCORE;
updateText();
ball.dy *= -1;
removeChild(tileAry[i]);
tileAry.splice(i, 1);
}
}
if (tileAry.length == 0) {
winGame();
}
ball.x += ball.vx * ball.dx * speed;
ball.y += (ball.vy + ball.dv) * ball.dy * speed;
}else {
ball.x = breaker.x;
ball.y = breaker.y - ball.height / 2;
}
}
private function winGame():void
{
currLevel++;
mapIndex++;
speed = 1 + currLevel*0.2;
updateText();
isPlaying = false;
removeEventListener(Event.ENTER_FRAME, ballEnterFrameHandler);
addChild(pauseSpt);
if (mapIndex == mapAry.length) {
__tText.text = "CREAT!!";
__iText.text = "PLAY AGAIN?";
}else {
__tText.text = "YOU WIN";
__iText.text = "CONTINUE..";
}
}
private function lostGame():void
{
lives--;
updateText();
isPlaying = false;
removeEventListener(Event.ENTER_FRAME, ballEnterFrameHandler);
addChild(pauseSpt);
if (lives == 0) {
//end;
__tText.text = "GAME OVER";
__iText.text = "TRY AGAIN.";
}else {
//continue
__tText.text = "YOU LOSE";
__iText.text = "CONTINUE..";
}
}
private function reStartGame(e:MouseEvent):void
{
removeChild(pauseSpt);
if (lives == 0||mapIndex == mapAry.length) {
//clear all and re start
removeTiles();
__sllSpt.y = -20;
ball.visible = false;
breaker.visible = false;
__breakerTitleSpt.visible = true;
__startBtn.visible = true;
trace("restart");
}else {
//re start
addEventListener(Event.ENTER_FRAME, ballEnterFrameHandler);
removeTiles();
createTiles();
reSetBall();
trace("continue");
}
}
private function reSetBall():void
{
breaker.x = 160;
breaker.y = 450;
ball.x = breaker.x;
ball.y = breaker.y - ball.height / 2;
isPlaying = false;
addEventListener(MouseEvent.CLICK, ballClickHandler);
}
private function ballClickHandler(e:MouseEvent):void
{
if (e.target.name!="breakout") return;
trace("click!");
isPlaying = true;
removeEventListener(MouseEvent.CLICK, ballClickHandler);
}
}
}
☑80后 ☑奔3 ☑没房 ☑没车 ☑没钱 ☑没相貌 ☑没身材 ☑没口才 ☑没成绩 ☑没身份 ☑没背景 ☑没老婆 ☑没死
浙公网安备 33010602011771号