forked from: flash on 2010-4-30

by umhr
♥0 | Line 144 | Modified 2010-04-30 17:59:35 | MIT License
play

ActionScript3 source code

/**
 * Copyright umhr ( http://wonderfl.net/user/umhr )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/9UXG
 */

package {
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.events.MouseEvent;
	import flash.events.Event;
	public class Main extends Sprite {
		private var _hikouki:Sprite;
		private var _marus:Array;
		private var _marus_move:Array;
		private var _count:Number;
		private var _count2:Number;
		private var _stage_num:Number;
		private var _hp_num:Number;
		private var hpFld:TextField;
		private var stageFld:TextField;
		public function Main():void {
			_count=0;
			_count2=0;
			_stage_num=10;
			_marus=[];
			_marus_move=[];
			_hp_num=10;
			this.addEventListener(Event.ENTER_FRAME,onEnter3);
			//飛行機描画
			var myColor:Number=Math.random();
			_hikouki=new Sprite();
			_hikouki.graphics.beginFill(myColor * 0xFFFFFF);
			_hikouki.graphics.moveTo(0, -4);
			_hikouki.graphics.lineTo(3, -2);
			_hikouki.graphics.lineTo(7, -2);
			_hikouki.graphics.lineTo(7, 0);
			_hikouki.graphics.lineTo(3, 0);
			_hikouki.graphics.lineTo(3,3);
			_hikouki.graphics.lineTo(20,3);
			_hikouki.graphics.lineTo(20,10);
			_hikouki.graphics.lineTo(3,13);
			_hikouki.graphics.lineTo(3,18);
			_hikouki.graphics.lineTo(12,21);
			_hikouki.graphics.lineTo(12,25);
			_hikouki.graphics.lineTo(2,25);
			_hikouki.graphics.lineTo(0,28);
			_hikouki.graphics.lineTo(-2,25);
			_hikouki.graphics.lineTo(-12,25);
			_hikouki.graphics.lineTo(-12,21);
			_hikouki.graphics.lineTo(-3,18);
			_hikouki.graphics.lineTo(-3,13);
			_hikouki.graphics.lineTo(-20,10);
			_hikouki.graphics.lineTo(-20,3);
			_hikouki.graphics.lineTo(-3,3);
			_hikouki.graphics.lineTo(-3,0);
			_hikouki.graphics.lineTo(-7, 0);
			_hikouki.graphics.lineTo(-7, -2);
			_hikouki.graphics.lineTo(-3, -2);
			_hikouki.graphics.lineTo(0, -4);
			addChild(_hikouki);
			_hikouki.y=480;
			this.addEventListener(Event.ENTER_FRAME,onEnter2);
			//HPテキストフィールド
			hpFld = new TextField();
			hpFld.textColor=0x666666;
			var textFormat:TextFormat = new TextFormat();
			textFormat.size=20;
			hpFld.defaultTextFormat=textFormat;
			addChild(hpFld);
			hpFld.x=10;
			hpFld.text="HP 10";
			//ステージテキストフィールド
			stageFld = new TextField();
			stageFld.textColor=0x666666;
			stageFld.defaultTextFormat=textFormat;
			addChild(stageFld);
			stageFld.x=390;
			stageFld.text = "Stage 1";
			
			//1度設定すればOK
			this.addEventListener(Event.ENTER_FRAME,onEnter1);
		}
		private function onEnter1(e:Event):void {
			var n:int=_marus.length;
			for (var i:int = 0; i < n; i++) {
				
				//_marus[i].parentで、親誰かを取得できる。
				//親がいないときには、nullが帰ってくるので、
				//親があるときには~という処理を行える
				if (_marus[i].parent) {
					if (_marus[i].y<550) {
						_marus[i].y+=_marus_move[i];
						//○と飛行機のヒットテスト
						if (_marus[i].hitTestObject(_hikouki)) {
							_marus[i].visible=false;
							_marus[i].graphics.clear();
							_hp_num-=1;
							hpFld.text="HP "+_hp_num;
							if (_hp_num==0) {
								//GAMEOVER画面
								var shikaku:Sprite=new Sprite();
								shikaku.graphics.beginFill(0xFF3366);
								shikaku.graphics.moveTo(0, 0);
								shikaku.graphics.lineTo(500, 0);
								shikaku.graphics.lineTo(500, 500);
								shikaku.graphics.lineTo(0, 500);
								shikaku.graphics.lineTo(0, 0);
								this.addChild(shikaku);
								//GAMEOVERテキストフィールド
								var tf:TextField = new TextField();
								tf.width=300;
								var textFormat:TextFormat = new TextFormat();
								textFormat.size=20;
								tf.defaultTextFormat=textFormat;
								tf.textColor=0xffffff;
								tf.y=220;
								tf.x=180;
								this.addChild(tf);
								tf.text="GAME OVER";
								removeEventListener(Event.ENTER_FRAME,onEnter1);
								removeEventListener(Event.ENTER_FRAME,onEnter2);
								removeEventListener(Event.ENTER_FRAME,onEnter3);
							}
						}
					} else {
						//_marus[i].yが550を超えたら、親子関係を切る
						this.removeChild(_marus[i]);
						//_marus[i].graphics.clear();
					}
				}
			}
		}
		private function onEnter2(e:Event):void {
			//飛行機マウスに向かって移動
			_hikouki.x+=(stage.mouseX-_hikouki.x)*0.2;
			_hikouki.y+=(stage.mouseY-_hikouki.y)*0.2;
		}
		private function onEnter3(e:Event):void {
			_count++;
			_count2++;
			//ステージカウント
			if (_count2==200) {
				_stage_num--;
				stageFld.text="Stage "+(10-_stage_num);
				_count2=0;
				_count=0;
			}
			//○が降ってくる間隔
			if (_count==_stage_num) {
				_count=0;
				var myColor:Number=Math.random();
				var myAlpha:Number=Math.random()*0.5+0.3;
				var mySize:Number=Math.random()*15+5;
				var maru:Sprite = new Sprite();
				maru.graphics.beginFill(myColor * 0xFFFFFF, myAlpha);
				maru.graphics.drawCircle(0, 0, mySize);
				maru.graphics.endFill();
				maru.x=Math.random()*450;
				this.addChild(maru);
				
				_marus.push(maru);
				_marus_move.push(Math.random() * 20 + 1);
				//何回も設定する必要は無い
				//this.addEventListener(Event.ENTER_FRAME,onEnter1);
			}
		}
	}
}