主要源码如下

/* 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.text.*;
	import flash.utils.Timer;
	import flash.media.Sound;
    import flash.media.SoundChannel;
	import flash.net.URLRequest;
	
	public class MemoryGame extends Sprite {
		static const numLights:uint = 5;
		
		private var lights:Array; // list of light objects
		private var playOrder:Array; // growing sequence
		private var repeatOrder:Array;
		
		// text message
		private var textMessage:TextField;
		private var textScore:TextField;
		
		// timers
		private var lightTimer:Timer;
		private var offTimer:Timer;
		
		var gameMode:String; // play or replay
		var currentSelection:MovieClip = null;
		var soundList:Array = new Array(); // hold sounds
		
		public function MemoryGame() {
			// text formating
			var textFormat = new TextFormat();
			textFormat.font = "Arial";
			textFormat.size = 24;
			textFormat.align = "center";
			
			// create the upper text field
			textMessage = new TextField();
			textMessage.width = 550;
			textMessage.y = 110;
			textMessage.selectable = false;
			textMessage.defaultTextFormat = textFormat;
			addChild(textMessage);
			
			// create the lower text field
			textScore = new TextField();
			textScore.width = 550;
			textScore.y = 250;
			textMessage.selectable = false;
			textScore.defaultTextFormat = textFormat;
			addChild(textScore);
			
			// load the sounds
			soundList = new Array();
			for(var i:uint=1;i<=5;i++) {
				var thisSound:Sound = new Sound();
				var req:URLRequest = new URLRequest("note"+i+".mp3");
				thisSound.load(req);
				soundList.push(thisSound);
			}

			// make lights
			lights = new Array();
			for(i=0;i<numLights;i++) {
				var thisLight:Light = new Light();
				thisLight.lightColors.gotoAndStop(i+1); // show proper frame
				thisLight.x = i*75+100; // position
				thisLight.y = 175;
				thisLight.lightNum = i; // remember light number
				lights.push(thisLight); // add to array of lights
				addChild(thisLight); // add to screen
				thisLight.addEventListener(MouseEvent.CLICK,clickLight); // listen for clicks
				thisLight.buttonMode = true;
			}
			
			// reset sequence, do first turn
			playOrder = new Array();
			gameMode = "play";
			nextTurn();
		}
		
		// add one to the sequence and start
		public function nextTurn() {
			// add new light to sequence
			var r:uint = Math.floor(Math.random()*numLights);
			playOrder.push(r);
			
			// show text
			textMessage.text = "Watch and Listen.";
			textScore.text = "Sequence Length: "+playOrder.length;
			
			// set up timers to show sequence
			lightTimer = new Timer(1000,playOrder.length+1);
			lightTimer.addEventListener(TimerEvent.TIMER,lightSequence);
			
			// start timer
			lightTimer.start();
		}
		
		// play next in sequence
		public function lightSequence(event:TimerEvent) {
			// where are we in the sequence
			var playStep:uint = event.currentTarget.currentCount-1;
			
			if (playStep < playOrder.length) { // not last time
				lightOn(playOrder[playStep]);
			} else { // sequence over
				startPlayerRepeat();
			}
		}
		
		// start player repetion
		public function startPlayerRepeat() {
			currentSelection = null;
			textMessage.text = "Repeat.";
			gameMode = "replay";
			repeatOrder = playOrder.concat();
		}
		
		// turn on light and set timer to turn it off
		public function lightOn(newLight) {
			soundList[newLight].play(); // play sound
			currentSelection = lights[newLight];
			currentSelection.gotoAndStop(2); // turn on light
			offTimer = new Timer(500,1); // remember to turn it off
			offTimer.addEventListener(TimerEvent.TIMER_COMPLETE,lightOff);
			offTimer.start();
		}
		
		// turn off light if it is still on
		public function lightOff(event:TimerEvent) {
			if (currentSelection != null) {
				currentSelection.gotoAndStop(1);
				currentSelection = null;
				offTimer.stop();
			}
		}
		
		// receive mouse clicks on lights
		public function clickLight(event:MouseEvent) {
			// prevent mouse clicks while showing sequence
			if (gameMode != "replay") return;
			
			// turn off light if it hasn't gone off by itself
			lightOff(null);
			
			// correct match
			if (event.currentTarget.lightNum == repeatOrder.shift()) {
				lightOn(event.currentTarget.lightNum);
				
				// check to see if sequence is over
				if (repeatOrder.length == 0) {
					nextTurn();
				}
				
			// got it wrong
			} else {
				textMessage.text = "Game Over!";
				gameMode = "gameover";
			}
		}
	}
}