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

forked from: bugdraw on AS3

[セルフフォーク]ゲームっぽいワールドマップを描いてくれる

描く確率は上げましたが、マップが広いので気長にお待ちください。
あと、無駄に広いので重いです。

[習作]書籍「FLASH LAB」の「bugdraw」をAS3にしてみる

虫が勝手にランダムにドット絵を作ってくれるってやつです。
もしかしたらアーティスティックな作品を作ってくれるかも作ってくれないかも。

OriginalSource on AS2 : UMETSU TAKESHIRO
http://www.microgarbage.org/
Get Adobe Flash player
by Hiiragi 27 May 2009
package 
{
	/*
	 * [セルフフォーク]ゲームっぽいワールドマップを描いてくれる
	 * 
	 * 描く確率は上げましたが、マップが広いので気長にお待ちください。
	 * あと、無駄に広いので重いです。
	 * 
	 * [習作]書籍「FLASH LAB」の「bugdraw」をAS3にしてみる
	 * 
	 * 虫が勝手にランダムにドット絵を作ってくれるってやつです。
	 * もしかしたらアーティスティックな作品を作ってくれるかも作ってくれないかも。
	 * 
	 * OriginalSource on AS2 : UMETSU TAKESHIRO
	 * http://www.microgarbage.org/
	 */
	
	import flash.display.Sprite;
	import flash.events.Event;
	
	[SWF(width = 465, height = 465, frameRate = 60, backgroundColor = 0x1800ff)]
	
	public class Phase2 extends Sprite 
	{
		private const SW:Number = 465;
		private const SH:Number = 465;
		
		private var numX:Number = 155;	//31,93,155のいずれか
		private var numY:Number = 155;
		
		private var rectWidth:Number = SW / numX;
		private var rectHeight:Number = SH / numY;
		
		private var tileArray:Array = [];
		private var bugArray:Array = [];
		
		public function Phase2():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{

			
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			//タイルを敷き詰める
			for (var i:uint = 0; i < numX; i++) {
				for (var j:uint = 0; j < numY; j++) {
					var tileSp:tile = new tile(rectWidth, rectHeight);
					tileSp.x = i * rectWidth;
					tileSp.y = j * rectHeight;
					tileSp.name = "x" + tileSp.x.toString() + "_y" + tileSp.y.toString();  
                    addChild(tileSp);
					tileArray.push(tileSp);
				}
			}
			
			//虫を配置する
			for (i = 0; i < 4; i++) {
				var bugSp:bug = new bug(rectWidth, rectHeight);
				addChild(bugSp);
				bugArray.push(bugSp);
				switch(i) {
					case 1:
						bugSp.x = SW - rectWidth;
						break;
					case 2:
						bugSp.x = SW - rectWidth;
						bugSp.y = SH - rectHeight;
						break;
					case 3:
						bugSp.y = SH - rectHeight;
						break;
				}
			}
			
			this.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
		}
		
		private function onEnterFrameHandler(e:Event):void {
			//虫の数の分だけ処理する
			for each (var bugSp:bug in bugArray) {
				var diffX:Number = 0;
				var diffY:Number = 0;
				//動く方向をランダムに決める
				switch (Math.floor(Math.random()*6)) 
				{
					case 0:
						diffY = -rectHeight;
						break;
					case 1:
						diffX = -rectWidth;
						break;
					case 2:
						diffX = rectWidth;
						break;
					case 3:
						diffY = rectHeight;
						break;
					default:
						break;
				}
				
				//新しい場所を算出
				var newX:Number = bugSp.x + diffX;
				var newY:Number = bugSp.y + diffY;
				
				//新しい場所がステージ内だったら虫を移動する
				if (newX >= 0 && newX <= SW - rectWidth &&  newY >= 0 &&  newY <= SH - rectHeight) {
					bugSp.x = newX;
					bugSp.y = newY;
				}
				
				//移動した場所にあるタイルを見つけ出して、一定の確率で塗る
                if (Math.random() * 5 > 1) { 
                    var tileSp:tile = this.getChildByName("x" + bugSp.x + "_y" + bugSp.y) as tile;
					tileSp.reDraw();
                } 
			}
		}
	}
}

import flash.display.Sprite;

class tile extends Sprite {
	
	private var _w:Number;
	private var _h:Number;
	
	private var thisAlpha:Number = 0;
	private var alphaFlag:int = 1;
	
	private var diffAlpha:Number = .05;
	
	private var colorArray:Array = [0x1800ff, 0x5948fb, 0x136bfe, 0x4a8cfa, 0x72a6fd, 0x7eaefd, 0xabd3f3,
									0xfaf1b6, 0xf0e7a9, 0x34a15d, 0x388b57, 0x4158ac, 0x64bef2, 0x99e1a5, 0x1f670e,
									0x816314, 0x896d20, 0x967c36, 0xa79053, 0xad9c70, 0xb5a579, 0xbfb087];
	private var colorNum:uint = 0;
	private var colorFlag:int = 1;
	
	function tile(w:Number, h:Number) {
		_w = w;
		_h = h;
		
		reDraw();
	}
	
	public function reDraw():void {	
		this.graphics.clear();
		//this.graphics.beginFill(0xFFFFFF, thisAlpha);
		this.graphics.beginFill(colorArray[colorNum], 1);
		this.graphics.lineStyle(.2,0x333333,.5);
		this.graphics.moveTo(0, 0);
		this.graphics.lineTo(_w, 0);
		this.graphics.lineTo(_w, _h);
		this.graphics.lineTo(0, _h);
		this.graphics.lineTo(0, 0);
		this.graphics.endFill();
		
		if (colorFlag == 1) colorNum++;
		else colorNum--;

		if (colorNum >= colorArray.length) {
			colorFlag = -1;
			colorNum = colorArray.length-1;
		} else if (colorNum < 0) {
			colorFlag = 1;
			colorNum = 0;
		}
		
	}
}


import flash.display.Sprite;

class bug extends Sprite {
	
	function bug(w:Number,h:Number) {
		this.graphics.beginFill(0xAA0000, .5);
		this.graphics.drawRect(0, 0, w, h);
		this.graphics.endFill();
	}
}