SpeedStar

by kaiho
昔ながらの車よけGameをイメージ
* ・スコアは走った時間で増えていく
* ・POWER0 で終了
* ・壁接触 -5
* ・その他の車接触 接触の仕方によって変わる
♥0 | Line 258 | Modified 2010-04-22 16:31:48 | MIT License
play

ActionScript3 source code

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

/*
 * 昔ながらの車よけGameをイメージ
 * ・スコアは走った時間で増えていく
 * ・POWER0 で終了
 * ・壁接触 -5
 * ・その他の車接触 接触の仕方によって変わる
 */
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.DisplayObject;
	import flash.text.TextField;
	
	[SWF(width=400, height=400, backgroundColor=0x888888, frameRate=50)]
	
	public class Main extends Sprite 
	{
		
		//画面サイズ
		private var W:Number = 400;
		private var H:Number = 400;
		
		//マイカー
		private var myCar:car;
		private var carHandring:Number = 5;//マウス追っかけ速度
		private var myCarX:Number = W / 2;//初期表示位置(X)
		private var myCarY:Number = (H / 10) * 9;//初期表示位置(Y)
		private var myCarRote:Number = 0;
		private var myCarRflg:Boolean = false;
		private var myCarPower:Number = 50;//耐久性
		
		//スコア表示テキスト
		private var scoreText:TextField;
		private var SCORE:String = "SCORE : ";
		private var s:Number = 0;
		
		//耐久性表示テキスト
		private var bodyText:TextField;
		private var POWER:String = "POWER : ";
		
		//その他の車
		private var atherCar:car;
		private var atherCarX:Number = W / 2;//初期表示位置(X)
		private var atherCarSpeed:Number = 10;//
		private var hitR:Number = 45;
		
		//壁
		private var wallL:wall;//壁:左側
		private var wallR:wall;//壁:右側
		private var wallW:Number = 75;
		private var wallC:uint = 0xaaaaaa;
		
		private var wLine:whiteLine;//中央白線
		private var wlWid:Number = 4;
		private var wlHei:Number = 100;
		private var wlSpeed:Number = 30;//白線の速度
		
		public function Main():void 
		{
			makingWall();
			makingLine();
			makingMyCar();
			makingAther();
			makeText();
		}
		
		//マイカー
		private function makingMyCar():void {
			myCar = new car(this, myCarX, myCarY);
			
			stage.addEventListener(Event.ENTER_FRAME, drivingCar);
			
			stage.addChild(myCar);
			
		}
		
		//他車
		private function makingAther():void {
			atherCar = new car(this, myCarX, 0);
			
			stage.addEventListener(Event.ENTER_FRAME, drivingAtherCar);
			
			stage.addChild(atherCar);
		}
		
		//壁
		private function makingWall():void {
			wallL = new wall(0, wallW, H, wallC);
			wallR = new wall(W - wallW, wallW, H, wallC);
			
			stage.addChild(wallL);
			stage.addChild(wallR);
		}
		
		//中央白線
		private function makingLine():void {
			wLine = new whiteLine(myCarX, wlWid, wlHei, wlSpeed , H);
			
			stage.addEventListener(Event.ENTER_FRAME, flowLine);
			stage.addChild(wLine);
			
		}
		
		//テキスト
		private function makeText():void {
			//スコアテキスト
			scoreText = new TextField();
			scoreText.text = SCORE + s;
			stage.addChild(scoreText);
			
			//耐久性テキスト
			bodyText = new TextField();
			bodyText.text = POWER + myCarPower;
			bodyText.y = 30;
			stage.addChild(bodyText);
		}
		
		public function drivingCar(event:Event):void {
			
			if (mouseX > myCar.x) {
				myCar.x += carHandring;
				
				//車位置微調整
				if (mouseX < myCar.x) {
					myCar.x = mouseX;
				}
			} else if(mouseX < myCar.x) {
				myCar.x -= carHandring;
				
				//車位置微調整
				if (mouseX > myCar.x) {
					myCar.x = mouseX;
				}
			} 
			
			checkWall();
			
		} 
		
		private function drivingAtherCar(event:Event):void {
			atherCar.y += atherCarSpeed;
			
			if (atherCar.hitTestObject(myCar)) {
				bodyText.text = POWER + --myCarPower;
				
				if (myCarPower < 0) {
					bodyText.text = POWER + "0";
					stopCar();
				}
				myCarRote = hitR;
				stage.addEventListener(Event.ENTER_FRAME, hitCar);
			}
			
			nextCar();
		}
		
		private function flowLine(event:Event):void {
			wLine.flow();
			scoreText.text = SCORE + ++s;
		}
		
        private function checkWall():void{
			//壁接触チェック
			if (myCar.hitTestObject(wallL) || myCar.hitTestObject(wallR)) {
				myCarPower = myCarPower - 5;
				
				stage.addEventListener(Event.ENTER_FRAME, hitWall);
				stage.removeEventListener(Event.ENTER_FRAME, drivingCar);
				
				if (myCarPower < 0) {
					myCarPower = 0
					stopCar();
				}
				
				bodyText.text = POWER + myCarPower;
			}
        }
		
		private function nextCar():void {
			if (atherCar.y + 30 > H) {
				atherCar.y = -50;
				atherCar.x = (Math.random() * (W - 200)) + 100;
			}
			
			if (Math.random() * 10 > 8) {
				atherCar.scaleY = -1;
				atherCarSpeed = 50;
			} else {
				atherCar.scaleY = 1;
				atherCarSpeed = 10;
			}
			
		}
		
		private function hitCar(event:Event):void {
			myCar.rotation = myCarRote;
			if (myCarRflg) {
				myCarRote = Math.abs(myCarRote) - 1;
				myCarRflg = false;
			} else {
				myCarRote = (Math.abs(myCarRote) - 1) * - 1;
				myCarRflg = true;
			}
			
			if (myCarRote == 0) {
				stage.removeEventListener(Event.ENTER_FRAME, hitCar);
			}
		}
		
		private function hitWall(event:Event):void {
			
			if (myCar.x < (W / 2)) {
				myCar.x += 5;
			} else {
				myCar.x -= 5
			}
			
			if (Math.abs(myCar.x - (W / 2)) < 50) {
				stage.addEventListener(Event.ENTER_FRAME, drivingCar);
				stage.removeEventListener(Event.ENTER_FRAME, hitWall);
			}
		}
		
		private function stopCar():void {
			stage.removeEventListener(Event.ENTER_FRAME, drivingCar);
			stage.removeEventListener(Event.ENTER_FRAME, drivingAtherCar);
			stage.removeEventListener(Event.ENTER_FRAME, flowLine);
			stage.removeEventListener(Event.ENTER_FRAME, hitWall);
		}
	}
}

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Shape;
import flash.display.Sprite

import flash.events.Event;

class car extends Sprite {
	
	private var f:Main;
	
	private var color:uint = 0x0;
	
	public var w:Number = 20;
	
	public function car(f:Main, x:Number, y:Number) {
		this.f = f;
		this.x = x;
		this.y = y;
		
		makeCar();
		
	}
	
	//車もどき
	private function makeCar():void {
		graphics.lineStyle(1, color, 1);
		graphics.beginFill(color);
		graphics.moveTo(-10, -20);
		graphics.lineTo(10, -20);
		graphics.lineTo(10, -10);
		graphics.lineTo(15, -10);
		graphics.lineTo(15, -5);
		graphics.lineTo(10, -5);
		graphics.lineTo(10, 13);
		graphics.lineTo(15, 13);
		graphics.lineTo(15, 18);
		graphics.lineTo(10, 18);
		graphics.lineTo(10, 20);
		graphics.lineTo(-10, 20);
		graphics.lineTo(-10, 18);
		graphics.lineTo(-15, 18);
		graphics.lineTo(-15, 13);
		graphics.lineTo(-10, 13);
		graphics.lineTo(-10, -5);
		graphics.lineTo(-15, -5);
		graphics.lineTo(-15, -10);
		graphics.lineTo(-10, -10);
		graphics.lineTo(-10, -20);
		graphics.endFill();
	}
	
}

class wall extends Shape {
	
	private var wallHei:Number;
	private var wallWid:Number;
	
	private var wColor:Number;
	
	public function wall(x:Number, w:Number, h:Number, c:uint) {
		this.x = x;
		wallWid = w;
		wallHei = h;
		wColor = c;
		
		makeWall();
	}
	
	private function makeWall():void {
		graphics.lineStyle(1, wColor, 1);
		graphics.beginFill(wColor);
		graphics.lineTo(wallWid, 0);
		graphics.lineTo(wallWid, wallHei);
		graphics.lineTo(0, wallHei);
		graphics.lineTo(0, 0);
		graphics.endFill();
	}
}

//中央白線Class
class whiteLine extends Shape {
	
	private var ay:Number;
	
	private var lineW:Number;
	private var lineH:Number;
	private var lineEnd:Number;
	
	private var lColor:uint = 0xFFFFFF;
	
	public function whiteLine(x:Number, w:Number, h:Number, ay:Number, le:Number) {
		this.x = x
		this.ay = ay;
		this.lineW = w;
		this.lineH = h;
		this.lineEnd = le;
		
		makeLine();
		
	}
	
	private function makeLine():void {
		graphics.lineStyle(1, lColor, 1);
		graphics.beginFill(lColor);
		graphics.moveTo((lineW/2)*-1, 0);
		graphics.lineTo((lineW/2)*-1, lineH * -1);
		graphics.lineTo((lineW/2), lineH * -1);
		graphics.lineTo((lineW/2), 0);
		graphics.lineTo((lineW/2)*-1, 0);
		graphics.endFill();
	}
	
	public function flow():void {
		y += ay;
		nextFlow();
	}
	
	private function nextFlow():void {
		if (y - lineH > lineEnd) {
			y = 0;
		}
	}
}