flash on 2011-7-16
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.filters.GlowFilter;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLRequest;
import flash.system.LoaderContext;
import flash.text.TextField;
import flash.text.TextFormat;
public class Main extends Sprite
{
public static var instance:Main;
public static var canvas:BitmapData;
public static var scale:Number = 2.0;
public static const WIDTH:int = 465;
public static const HEIGHT:int = 430;
private var velocity:Point;
private var pos:Point;
private var keys:Array = [];
private var keyIndex:int = 0;
private var itemContainer:Sprite = new Sprite();
private var bgMatrix:Matrix = new Matrix();
private var bgSprite:Sprite = new Sprite();
private var pattern:BitmapData;
private const SIZE:int = 20;
private const COLORS:Array = [0xFBFFE8, 0xF6F1C6];
private const LEFT:int = 37;
private const RIGHT:int = 39;
private const UP:int = 38;
private const KEY_PATTERN:Array = [ { y:0, x:1 }, { y:1, x:0 }, { y:0, x: -1 }, { y: -1, x:0 } ];
public function Main()
{
instance = this;
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
loader.load(new URLRequest("http://assets.wonderfl.net/images/related_images/8/82/8217/82174d47350209ab4003c1e65ffc1ba3aa3eb001"), new LoaderContext(true));
}
private function initHandler(event:Event):void
{
var loader:Loader = event.currentTarget.loader as Loader;
var bd:BitmapData = new BitmapData(loader.width, loader.height, true, 0x0);
bd.draw(loader);
graphics.beginFill(0x0);
graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
graphics.endFill();
pattern = new BitmapData(SIZE * 2, SIZE * 2, false, 0xFE9E00);
pattern.fillRect(new Rectangle(SIZE, 0, SIZE, SIZE), 0xFDC200);
pattern.fillRect(new Rectangle(0, SIZE, SIZE, SIZE), 0xFDC200);
for (var i:int = 0; i < SIZE; i++)
{
pattern.setPixel(0, i, 0xFEB400);
pattern.setPixel(i, 0, 0xFEB400);
pattern.setPixel(SIZE - 1, SIZE - i - 1, 0xFC9900);
pattern.setPixel(SIZE - i - 1, SIZE - 1, 0xFC9900);
pattern.setPixel(SIZE, i, 0xFFCB02);
pattern.setPixel(SIZE + i, 0, 0xFFCB02);
pattern.setPixel(SIZE * 2 - 1, SIZE - i - 1, 0xFCA500);
pattern.setPixel(SIZE * 2 - i - 1, SIZE - 1, 0xFCA500);
pattern.setPixel(0, i + SIZE, 0xFFCB02);
pattern.setPixel(i, SIZE, 0xFFCB02);
pattern.setPixel(SIZE - 1, SIZE * 2 - i - 1, 0xFCA500);
pattern.setPixel(SIZE - i - 1, SIZE * 2 - 1, 0xFCA500);
pattern.setPixel(SIZE, i + SIZE, 0xFEB400);
pattern.setPixel(SIZE + i, SIZE, 0xFEB400);
pattern.setPixel(SIZE * 2 - 1, SIZE * 2 - i - 1, 0xFC9900);
pattern.setPixel(SIZE * 2 - i - 1, SIZE * 2 - 1, 0xFC9900);
}
bgSprite.alpha = 0.5;
addChild(bgSprite);
canvas = new BitmapData(WIDTH / scale, HEIGHT / scale, true, 0x0);
var bitmap:Bitmap = new Bitmap(canvas);
bitmap.scaleX = bitmap.scaleY = scale;
addChild(bitmap);
Item.init(bd);
Score.init();
Status.init();
pos = new Point(canvas.width / 2, canvas.height / 2);
velocity = new Point(1, 0);
addChild(itemContainer);
for (i = 0; i < Item.PRINT_NUM; i++)
{
var item:Item = new Item();
itemContainer.addChild(item);
}
var maskShape:Shape = new Shape();
maskShape.graphics.beginFill(0x0);
maskShape.graphics.drawRect(0, 0, WIDTH, HEIGHT);
maskShape.graphics.endFill();
itemContainer.mask = maskShape;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
}
private function onKeyUp(event:KeyboardEvent):void
{
keys[event.keyCode] = false;
}
private function onKeyDown(event:KeyboardEvent):void
{
if (!keys[event.keyCode])
{
keys[event.keyCode] = true;
if (event.keyCode == LEFT) keyIndex--;
if (event.keyCode == RIGHT) keyIndex++;
keyIndex %= KEY_PATTERN.length;
if (keyIndex < 0) keyIndex += KEY_PATTERN.length;
}
}
private function onEnterFrame(event:Event):void
{
var num:int = 1;
if (keys[UP]) num = 2;
for (var i:int = 0; i < num; i++)
{
var v:Object = KEY_PATTERN[keyIndex];
velocity.x = v.x;
velocity.y = v.y;
canvas.setPixel32(pos.x, pos.y, 0xFFFFFFFF);
pos.x += velocity.x;
pos.y += velocity.y;
pos.x %= WIDTH / scale;
pos.y %= HEIGHT / scale;
if (pos.x < 0) pos.x += WIDTH / scale;
if (pos.y < 0) pos.y += HEIGHT / scale;
if (canvas.getPixel(pos.x, pos.y) == 0xFFFFFF)
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
gameover();
return;
}
bgMatrix.translate(-velocity.x, -velocity.y);
bgSprite.graphics.clear();
bgSprite.graphics.beginBitmapFill(pattern, bgMatrix);
bgSprite.graphics.drawRect(0, 0, WIDTH, HEIGHT);
bgSprite.graphics.endFill();
bgSprite.alpha = 0.3;
var items/*Item*/:Array = itemContainer.getObjectsUnderPoint(new Point(pos.x * scale, pos.y * scale));
if (items.length != 0)
{
var item:Item = items[0];
item.changeImage();
Score.value += item.rawScore * Status.rate;
Status.nextValue++;
var point:Point = new Point();
for (var j:int = 0; j < Status.bugCount; j++)
{
do
{
point.x = Math.random() * Main.WIDTH;
point.y = Math.random() * Main.HEIGHT;
}
while (Point.distance(pos, point) < 50);
Main.canvas.setPixel32(point.x, point.y, 0xFFFFFFFF);
}
}
}
}
private function gameover():void
{
var text:TextField = new TextField();
text.defaultTextFormat = new TextFormat("_typeWriter", 40, 0x0, true);
text.autoSize = "left";
text.text = "GAME OVER";
var bd:BitmapData = new BitmapData(text.width, text.height, true, 0x0);
bd.draw(text);
var bitmap:Bitmap = new Bitmap(bd);
bitmap.filters = [new GlowFilter(0xFFFFFF, 1, 7, 7, 50, 1, false)];
bitmap.x = (WIDTH - bitmap.width) / 2;
bitmap.y = (HEIGHT - bitmap.height) / 2;
addChild(bitmap);
}
}
}
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFormat;
class Utils
{
public static function createTextField(text:String, size:int, color:int, x:Number = 0, y:Number = 0):TextField
{
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat("_typeWriter", size, color, true);
tf.autoSize = "left";
tf.text = text;
tf.x = x, tf.y = y;
return tf;
}
}
class Status
{
private static var _level:int = 1;
private static var _nextValue:int = 0;
private static var levelText:TextField;
private static var nextText:TextField;
public static var nextMAX:int = 3;
public static var rate:int = 1;
public static var bugCount:int = 4;
public static function init():void
{
levelText = Utils.createTextField("Level " + _level, 20, 0xFFFFFF, 180, Main.HEIGHT);
Main.instance.addChild(levelText);
nextText = Utils.createTextField("NEXT " + _nextValue + "/" + nextMAX, 20, 0xFFFFFF, 330, Main.HEIGHT);
Main.instance.addChild(nextText);
}
public static function get level():int
{
return _level;
}
public static function set level(value:int):void
{
_level = value;
levelText.text = "LEVEL " + _level;
}
public static function get nextValue():int
{
return _nextValue;
}
public static function set nextValue(value:int):void
{
_nextValue = value;
if (_nextValue == nextMAX)
{
_nextValue = 0;
nextMAX += 2;
Status.bugCount *= 1.3;
level++;
rate++;
}
nextText.text = "NEXT " + _nextValue + "/" + nextMAX;
}
}
class Score
{
private static var _value:int = 0;
private static var text:TextField;
public static function get value():int
{
return _value;
}
public static function set value(value:int):void
{
_value = value;
text.text = "SCORE: " + _value.toString();
}
public static function init():void
{
text = Utils.createTextField("SCORE: 0", 20, 0xFFFFFF, 0, Main.HEIGHT);
Main.instance.addChild(text);
}
}
class Item extends Bitmap
{
public static var image:BitmapData;
public static var group:Vector.<Item> = new Vector.<Item>();
public static const SIZE:int = 24;
public static const NUM:int = 8;
public static const PRINT_NUM:int = 12;
public static const ZERO:Point = new Point();
public var scale:Number = 1.3;
public var rawScore:int;
public static function init(bd:BitmapData):void
{
image = bd;
}
public function Item()
{
changeImage();
}
public function changeImage():void
{
bitmapData = new BitmapData(SIZE, SIZE, true, 0x0);
var itemIndex:int = NUM * Math.random();
rawScore = itemIndex * 10;
bitmapData.copyPixels(image, new Rectangle(itemIndex * SIZE, 0, SIZE, SIZE), ZERO, image, ZERO, true);
x = Math.random() * (Main.WIDTH - SIZE * scale);
y = Math.random() * (Main.HEIGHT - SIZE * scale);
scaleX = scaleY = scale;
var rect:Rectangle = new Rectangle(x / Main.scale, y / Main.scale, width / 2, height / 2);
Main.canvas.fillRect(rect, 0x0);
}
}