游戏玩法说明

  • 按左键向左移动大炮
  • 按右键向右移动大炮
  • 按空格键射击

游戏主要源码如下

/* This code is from "ActionScript 3.0 Game Programming University" by Gary Rosenzweig
Copyright 2007
http://flashgameu.com
See the book or site for more information */

package {
	import flash.display.*;
	import flash.events.*;
	import flash.utils.Timer;
	import flash.text.TextField;
	import flash.text.TextFieldType;
	
	public class AirRaid extends MovieClip {
		private var aagun:AAGun;
		private var airplanes:Array;
		private var bullets:Array;
		public var leftArrow, rightArrow:Boolean;
		private var nextPlane:Timer;
		private var shotsLeft:int;
		private var shotsHit:int;
		
		public function startAirRaid() {
			
			// init score
			shotsLeft = 20;
			shotsHit = 0;
			showGameScore();
			
			// create gun
			aagun = new AAGun();
			addChild(aagun);
			
			// create object arrays
			airplanes = new Array();
			bullets = new Array();
			
			// listen for keyboard
			stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
			stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
			
			// look for collisions
			addEventListener(Event.ENTER_FRAME,checkForHits);

			// start planes flying
			setNextPlane();
		}
		
		public function setNextPlane() {
			nextPlane = new Timer(1000+Math.random()*1000,1);
			nextPlane.addEventListener(TimerEvent.TIMER_COMPLETE,newPlane);
			nextPlane.start();
		}
		
		public function newPlane(event:TimerEvent) {
			// random side, speed and altitude
			if (Math.random() > .5) {
				var side:String = "left";
			} else {
				side = "right";
			}
			var altitude:Number = Math.random()*50+20;
			var speed:Number = Math.random()*150+150;
			
			// create plane
			var p:Airplane = new Airplane(side,speed,altitude);
			addChild(p);
			airplanes.push(p);
			
			// set time for next plane
			setNextPlane();
		}
		
		// check for collisions
		public function checkForHits(event:Event) {
			for(var bulletNum:int=bullets.length-1;bulletNum>=0;bulletNum--){ 
				for (var airplaneNum:int=airplanes.length-1;airplaneNum>=0;airplaneNum--) {
					if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum])) {
						airplanes[airplaneNum].planeHit();
						bullets[bulletNum].deleteBullet();
						shotsHit++;
						showGameScore();
						break;
					}
				}
			}
			
			if ((shotsLeft == 0) && (bullets.length == 0)) {
				endGame();
			}
		}
		
		// key pressed
		public function keyDownFunction(event:KeyboardEvent) {
			if (event.keyCode == 37) {
				leftArrow = true;
			} else if (event.keyCode == 39) {
				rightArrow = true;
			} else if (event.keyCode == 32) {
				fireBullet();
			}
		}
		
		// key lifted
		public function keyUpFunction(event:KeyboardEvent) {
			if (event.keyCode == 37) {
				leftArrow = false;
			} else if (event.keyCode == 39) {
				rightArrow = false;
			}
		}

		// new bullet created
		public function fireBullet() {
			if (shotsLeft <= 0) return;
			var b:Bullet = new Bullet(aagun.x,aagun.y,-300);
			addChild(b);
			bullets.push(b);
			shotsLeft--;
			showGameScore();
		}
		
		public function showGameScore() {
			showScore.text = String("Score: "+shotsHit);
			showShots.text = String("Shots Left: "+shotsLeft);
		}
		
		// take a plane from the array
		public function removePlane(plane:Airplane) {
			for(var i in airplanes) {
				if (airplanes[i] == plane) {
					airplanes.splice(i,1);
					break;
				}
			}
		}
		
		// take a bullet from the array
		public function removeBullet(bullet:Bullet) {
			for(var i in bullets) {
				if (bullets[i] == bullet) {
					bullets.splice(i,1);
					break;
				}
			}
		}
		
		// game is over, clear movie clips
		public function endGame() {
			// remove planes
			for(var i:int=airplanes.length-1;i>=0;i--) {
				airplanes[i].deletePlane();
			}
			airplanes = null;
			
			aagun.deleteGun();
			aagun = null;
			
			stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
			stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
			removeEventListener(Event.ENTER_FRAME,checkForHits);
			
			nextPlane.stop();
			nextPlane = null;
			
			gotoAndStop("gameover");
		}

	}
}