In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

TASさんがミニテニスをするようです forked from: ミニテニス

ミニテニス
* というか、卓球風。
* 
* マウスでラケットを動かしてボールを打ち返してください。
* ラケットにボールが当たる瞬間、タイミング良く左クリックするとスマッシュが出ます。
* 
* 7本先取。
Get Adobe Flash player
by ton 10 Sep 2009
// forked from rsakane's ミニテニス
/*
 * ミニテニス
 * というか、卓球風。
 * 
 * マウスでラケットを動かしてボールを打ち返してください。
 * ラケットにボールが当たる瞬間、タイミング良く左クリックするとスマッシュが出ます。
 * 
 * 7本先取。
 */
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import org.libspark.betweenas3.BetweenAS3;
	
	public class Main extends Sprite
	{
		private var ball:Ball;
		private var player:Player;
		private var enemy:Enemy;
		private var frame:int = 0;
		
		public function Main()
		{
			var matrix:Matrix = new Matrix();
			matrix.createGradientBox(465, 465);
			graphics.beginGradientFill("linear", [0xdddddd, 0x333333, 0xdddddd], [1.0, 1.0, 1.0], [0, 128, 255], matrix);
			graphics.drawRect(0, 0, 465, 465);
			graphics.endFill();
			
			matrix.createGradientBox(465, 465, 90 * Math.PI / 180);
			graphics.beginGradientFill("linear", [0xdddddd, 0x333333, 0xdddddd], [1.0, 1.0, 1.0], [0, 128, 255], matrix);
			graphics.moveTo(0, 465);
			graphics.lineTo(232, 232);
			graphics.lineTo(465, 465);
			
			graphics.moveTo(232, 232);
			graphics.lineTo(0, 0);
			graphics.lineTo(465, 0);
			graphics.endFill();
			
			graphics.beginFill(0x444444, 1.0);
			graphics.drawRect(232 - 40, 232 - 40, 80, 80);
			graphics.endFill();
			
			Score.init(this);
			
			var shadow:Shadow = new Shadow();
			shadow.x = 232;
			shadow.y = 470;
			addChild(shadow);
			
			enemy = new Enemy();
			addChild(enemy);
			
			ball = new Ball(shadow);
			ball.x = ball.y = 232;
			addChild(ball);
			
			player = new Player();
			addChild(player);
			
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		private function onEnterFrame(event:Event):void
		{
			if (Score.endFlag) removeEventListener(Event.ENTER_FRAME, onEnterFrame);
			
			ball.move();
                        player.x = ball.x;
                        player.y = ball.y;
			if (ball.z <= 90 && ball.vz < 0 && range(player, ball))
			{
            			player.rotationX = 30;
				if (ball.vz < -40)
				{
					ball.vz *= -1;
					ball.vz += 5;
				}
				else
				{
					ball.vz = 70;
					ball.GRAVITY = 0.2;
				}
			}else{
        			player.rotationX = 0;
                        }
                        
			if (ball.z < 0 && ball.vz < 0)
			{
				if (range(player, ball))
				{
					ball.vz *= -1;
					ball.vx = Math.random() * 16 - 8;
				}
				else if (ball.z <= -500)
				{
					ball.z = -500, ball.vz = 40;
					Score.blue++, Score.update();
					wait();
				}
			}
			
			if (ball.z >= 2000)
			{
				if (range(enemy, ball))
				{
					ball.vz *= -1;
					ball.vx = Math.random() * 16 - 8;
					if (ball.vz > 40 && Math.random() >= 0.5) ball.vz -= 5;
				}
				else
				{
					Score.red++, Score.update();
					ball.z = -500;
					wait();
				}
				
				ball.GRAVITY = 0.5;
			}
			if (frame % 6 == 0)
			{
				BetweenAS3.tween(enemy, { x:ball.x, y:ball.y }, null, 0.16).play();
			}
			frame++;
		}
		
		private function range(a1:*, a2:*):Boolean
		{
			var distance:int = Math.sqrt(Math.pow(a1.x - a2.x, 2) + Math.pow(a1.y - a2.y, 2));
			if (distance < a1.RADIUS + a2.RADIUS)
			{
				return true;
			}
			
			return false;
		}
		
		private function wait():void
		{
			ball.vz = 1;
			BetweenAS3.delay
			(
				BetweenAS3.tween(ball, { vz:40 }, null, 0.1),
				1.0
			).play();
		}
	}
}

import flash.display.Sprite;
import flash.filters.BlurFilter;
import flash.geom.Matrix;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;

class Ball extends Sprite
{
	public var vx:Number = Math.random() * 16 - 8;
	private var vy:Number = 5;
	public var vz:int = 40;
	private var shadow:Shadow;
	public const RADIUS:int = 20;
	public var GRAVITY:Number = 0.5;
	
	public function Ball(shadow:Shadow)
	{
		this.shadow = shadow;
		this.filters = [new BlurFilter()];
		var matrix:Matrix = new Matrix();
		matrix.createGradientBox(20, 20, 45 * Math.PI / 180, -10, -10);
		graphics.beginGradientFill("linear", [0xed1a3d, 0xf791a3], [1.0, 1.0], [0, 255], matrix);
		graphics.drawCircle(0, 0, RADIUS);
		graphics.endFill();
	}
	
	public function move():void
	{
		this.z += vz;
		this.vy += GRAVITY;
		this.y += vy;
		this.x += vx;
		this.rotation++;
		
		shadow.z = this.z;
		shadow.x = this.x;
		shadow.scaleX = shadow.scaleY = 1 / (465 / this.y);
		
		if (this.y >= 465) vy = -15;
		if (this.y <= 0) this.y = 0, vy += 5;
		if (this.x <= 0) vx *= -1, this.x = 0;
		if (this.x >= 465) vx *= -1, this.x = 465;
	}
}

class Shadow extends Sprite
{
	public function Shadow()
	{
		graphics.beginFill(0x333333);
		graphics.drawCircle(0, 0, 10);
		graphics.endFill();
	}
}

class Player extends Sprite
{
	public const RADIUS:int = 50;
	
	public function Player()
	{
		graphics.beginFill(0xFF0000, 0.3);
		graphics.drawCircle(0, 0, RADIUS);
		graphics.endFill();
	}
}

class Enemy extends Sprite
{
	public const RADIUS:int = 50;
	
	public function Enemy()
	{
		graphics.beginFill(0x009ad6, 1.0);
		graphics.drawCircle(0, 0, RADIUS);
		graphics.endFill();
		
		this.z = 2000;
	}
}

class Score
{
	public static var red:int = 0;
	public static var blue:int = 0;
	public static const MAX:int = 7;
	public static var tf:TextField;
	public static var endFlag:Boolean = false;
	
	public static function init(canvas:Sprite):void
	{
		tf = createTextField("0 - 0", 30);
		tf.x = 465 - tf.width;
		canvas.addChild(tf);
	}
	
	public static function update():void
	{
		if (red < MAX && blue < MAX)
		{
			tf.text = red + " - " + blue;
			return;
		}
		
		if (red == MAX) tf.text = "RED WIN";
		else tf.text = "BLUE WIN";
		tf.x -= 55;
		
		endFlag = true;
	}
	
	public static function createTextField(text:String, size:int):TextField
	{
		var tf:TextField = new TextField();
		tf.defaultTextFormat = new TextFormat("_typeWriter", size, 0x0, true);
		tf.text = text;
		tf.autoSize = TextFieldAutoSize.LEFT;
		
		return tf;
	}
}