Run away from Pacman

by jerryrom
♥2 | Line 128 | Modified 2010-04-01 00:15:07 | MIT License
play

ActionScript3 source code

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

package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.ui.Mouse;
	import flash.utils.getTimer;
	import net.hires.debug.Stats;

	[SWF(width=465, height=465, backgroundColor=0x000000, frameRate=30)]
	public class Main extends Sprite {
		
		private const POINT_MAX:int = 60;
		private var p:Vector.<Point>;
		private var pacman:Pacman;
		private var cur:int = 0;
		private var cur2:int = 0;
		private var px:int;
		private var py:int;
		private var prev:Point;
		private var prev2:int;
		private var move:Boolean;
		private var draw:Boolean = false;
		
		public function Main():void {
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			graphics.beginFill(0x000000);
			graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
			graphics.endFill();
			Wonderfl.capture_delay(3);
			
			//addChild(new Stats());
			
			p = new Vector.<Point>();
			for (var i:int; i < POINT_MAX; i++) {
				p.push(new Point(0, 0));
			}
			
			pacman = new Pacman();
			addChild(pacman);
						
			prev = new Point(0,0);
			
			addEventListener(Event.ENTER_FRAME, onEnter);
		}
		
		private function onEnter(e:Event):void {
			if (cur >= POINT_MAX/2) {
				move = true;
			}
			if (cur >= POINT_MAX) {
				cur = 0;
			}
			if (cur2 >= POINT_MAX) {
				cur2 = 0;
				move = false;
			}
			
			if (draw) {
				graphics.moveTo(mouseX, mouseY);
				graphics.lineStyle(3, 0xffffff);
				graphics.lineTo(px, py);
			}
			draw = !draw;
			
			// eat mouse cursor
			if ((p[cur2].x - 15 < mouseX && mouseX < p[cur2].x + 30) &&
				(p[cur2].y - 15 < mouseY && mouseY < p[cur2].y + 30)) {
				Mouse.hide();
			} else {
				Mouse.show();
			}

			if (move) {
				pacman.move(p[cur2], prev);
				graphics.moveTo(p[cur2].x, p[cur2].y);
				graphics.lineStyle(10, 0x000000);
				graphics.lineTo(prev.x, prev.y);
				prev = p[cur2];
				cur2++;
			}
			
			px = p[cur].x = mouseX;
			py = p[cur].y = mouseY;
			cur++;
		}
	}
}

import flash.display.Sprite;
import flash.geom.Point;
internal class Pacman extends Sprite {
	private var op:Sprite;
	private var cl:Sprite;
	private var o:Boolean;
	private var count:int = 0;
	private var r:Number;
	
	public function Pacman() {
		op = new Sprite();
		op.graphics.beginFill(0xffff00);
		op.graphics.drawCircle(0, 0, 30);
		op.graphics.beginFill(0x000000);
		op.graphics.drawTriangles(Vector.<Number>([-15,0,30,20,30,-20]));
		op.graphics.endFill();
		op.visible = true;
		addChild(op);
		
		cl = new Sprite();
		cl.graphics.beginFill(0xffff00);
		cl.graphics.drawCircle(0, 0, 30);
		cl.graphics.endFill();
		cl.visible = false;
		addChild(cl);
	}
	
	public function move(p:Point, p2:Point):void {
		if (count >= 5) {
			r = Math.atan2(p.y - p2.y, p.x - p2.x) / Math.PI * 180;
			//r = Math.round(r/10)*10;
			if (r != 0 && r != 180) {
				rotation = r;
			}
			if (o) {
				open();
			} else {
				close();
			}
			o = !o;
			count = 0;
		}
		x = p.x;
		y = p.y;
		count++;
	}
	
	public function open():void {
		op.visible = true;
		cl.visible = false;
	}
	
	public function close():void {
		op.visible = false;
		cl.visible = true;
	}
}

Forked