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

Bubble Sort

Get Adobe Flash player
by a8085 22 Dec 2008
    Embed
// write as3 code here..
package
{
    import flash.display.*;
    import flash.events.*;
    import flash.media.*;
    import flash.net.*;
    import flash.utils.*;

    public class BubbleSort extends Sprite
    {   
    	//並び替えを行うアイテムを入れておく配列  
        private var items:Array = new Array();
        
        //並び替えを行うタイマー
		private var sortTimer:Timer = new Timer(100);
        
        //配色
        private var colorSet:Array = [0xff7f7f, 0xff7fbf, 0xff7fff, 0xbf7fff, 0x7f7fff, 0x7fbfff, 0x7fffff, 0x7fffbf, 0x7fff7f, 0xbff7f, 0xffff7f, 0xffbf7f]
		private var colorIndex:uint = 0;
		
		//並び替え用の変数
		private var position:int;
        private var lastPosition:int;

        public function BubbleSort():void
        {
            super();
            
            var WIDTH:uint = 456;
            var HEIGHT:uint = 456;
            //var HEIGHT:uint = 64;
            
            var itemX:uint = 2;
            var itemY:uint = 2;
            
            var target:uint = 0;

			//アイテムの配置
            while(itemY < HEIGHT){
            	while(itemX < WIDTH){
	                var item:NumberItem = new NumberItem(Math.round(Math.random() * 100));
	                item.x = itemX;
	                item.y = itemY;
	                this.addChild(item);
	                items.push(item);
	
	                itemX += 36;
	            }
	            itemX = 2;
	            itemY = item.y + 36;
            }
            
            //並び替え変数の初期化
            position = 0;
            lastPosition = items.length -1;
            
            //並び替え開始
            sortTimer.addEventListener(TimerEvent.TIMER, bubbleSort);
            sortTimer.start();
            
        }
        
        //バブルソート
        private function bubbleSort(e:TimerEvent):void
        {
        	if(position < lastPosition){
        		position++;
        	}
        	if( (items[position - 1] as NumberItem).value > (items[position] as NumberItem).value ){
        		this.swap(position - 1, position);
        	}
        	if(position == lastPosition){
        		lastPosition--;
        		position = 0;
        	}
        	if(lastPosition == 0){
        		sortTimer.stop();
        	}
        }
        
        //スワップ
        private function swap(index1:Number, index2:Number):void{
        	var tmp:Number = (items[index1] as NumberItem).value;
        	(items[index1] as NumberItem).value = (items[index2] as NumberItem).value;
        	(items[index2] as NumberItem).value = tmp;
        	var color:Number = nextColor();
        	(items[index1] as NumberItem).illuminate(color);
        	(items[index2] as NumberItem).illuminate(color);
        }

		//配色取得
		private function nextColor():Number
		{
			if(colorSet.length - 1 <= colorIndex){
				colorIndex = 0;
			}else{
				colorIndex++;
			}
			
			return colorSet[colorIndex];
		}
    }
}

import flash.display.*;
import flash.text.*;
import flash.filters.*;
import flash.utils.*;
import flash.events.*;

//アイテムクラス
class NumberItem extends Sprite
{
        
    private var itemText:TextField = new TextField();
    private var textFormat:TextFormat = new TextFormat();
    private var innerCircle:Sprite = new Sprite();
    private var timer:Timer = new Timer(10);

    public function NumberItem(number:Number):void
    {
        var dsFilter:DropShadowFilter = new DropShadowFilter(0.5, 45, 0x666666);
        this.filters = [dsFilter];
     	
     	this.graphics.beginFill(0xFFFFFF);
        this.graphics.drawCircle(16, 16, 16);
        this.graphics.endFill();
     	
        innerCircle.graphics.beginFill(0xFFFFFF);
        innerCircle.graphics.drawCircle(16, 16, 16);
        innerCircle.graphics.endFill();
        this.addChild(innerCircle);

        textFormat.size = 14;
        textFormat.align = TextFormatAlign.CENTER;
        textFormat.bold = true;
    
        itemText = new TextField();
        itemText.width = 32;
        itemText.y = 5;
        this.value = number;
        this.updateTextFormat();

        this.addChild(itemText);        
        timer.addEventListener(TimerEvent.TIMER, timerHandler);
    }

	//文字のスタイルを設定
    private function updateTextFormat():void
    {
        itemText.setTextFormat(textFormat);
    }

	//ハイライト処理。ハイライト後、フェードアウト
    public function illuminate(color:Number):void
    {
    	timer.reset();
    	
    	innerCircle.alpha = 1;
    	innerCircle.graphics.clear();
    	
        innerCircle.graphics.beginFill(color);
        innerCircle.graphics.drawCircle(16, 16, 16);
        innerCircle.graphics.endFill();
        this.updateTextFormat();
        
        timer.start();
    }
    
    //色のフェードアウト処理
    private function timerHandler(e:TimerEvent):void
    {
    	//trace(innerCircle.alpha);
    	innerCircle.alpha -= 0.1;
    	if(innerCircle.alpha < 0)
    	{
    		trace("stop");
    		innerCircle.graphics.clear()
    		innerCircle.alpha = 1;
    		innerCircle.graphics.beginFill(0xFFFFFF);
        	innerCircle.graphics.drawCircle(16, 16, 16);
        	innerCircle.graphics.endFill();
        	timer.reset();
    	}
    }
    
    public function get value():Number
    {
    	return Number(itemText.text);
    }
    
    public function set value(number:Number):void
    {
    	this.itemText.text = number.toString();
    }
}