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

Playing Cards

Felt like making the foundation of a playing card game.

Would rather create the suit symbols with the Graphics class so they would be vectors, but I have no talent for that.
Get Adobe Flash player
by PESakaTFM 01 Jan 2011
/**
 * Copyright PESakaTFM ( http://wonderfl.net/user/PESakaTFM )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/lmoq
 */

package
{
    import flash.events.MouseEvent;
    import flash.display.Sprite;
    import flash.events.TimerEvent;
    import flash.utils.Timer;
    
    import net.hires.debug.Stats;
    
    [SWF(backgroundColor="#8080FF", frameRate="30", width='465', height='465')]
    public class Main extends Sprite
    {
        private var initTimer:Timer;
        
        public var deck:Deck;
        public var card:Card;
        
        public var count:int = 0;
        
        public function Main()
        {
            addChild(new Stats());
            init();
        }
        
        private function init():void
        {
            //Because the Loader.loadBytes is asynchronous I have to make sure
            //to let that happen first.
            SuitClub.init();
            SuitDiamond.init();
            SuitHeart.init();
            SuitSpade.init();
            
            initTimer = new Timer(100, 1);
            initTimer.addEventListener(TimerEvent.TIMER, start);
            initTimer.start();
        }
        
        private function start(event:TimerEvent):void
        {
            deck = new Deck();
            card = deck.getCard(count);
            card.x = 100;
            card.y = 15;
              
            addChild(card);
            
            stage.addEventListener(MouseEvent.CLICK, onClick);
        }
        
        private function onClick(event:MouseEvent):void
        {
            removeChild(card);
            count += 1;
            if(count >= 52) count %= 52;
              
            card = deck.getCard(count);
            card.x = 100;
            card.y = 15;
              
            addChild(card);
        }
    }
}
import flash.text.TextFormat;
import flash.text.TextField;
import flash.display.DisplayObject;

import flash.events.Event;
import flash.display.Graphics;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.display.Loader;
import flash.utils.ByteArray;
import mx.utils.Base64Decoder;

class Deck
{
    private var _cards:Vector.<Card> = new Vector.<Card>( 52, true );

    public function Deck()
    {
        createDeck();
    }

    public function getCard(num:int):Card
    {
        return _cards[num];
    }

    public function shuffle():void
    {
        var card:Card;
        var random:int = 0;
        var next:int = _cards.length;
        while(--next)
        {
            random = Math.floor( Math.random() * ( next + 1 ) );
            card = _cards[next];
            _cards[next] = _cards[random];
            _cards[random] = card;
        }
    }

    public function sortByValueFirst():void
    {
        _cards.sort(_sortByValueFirst);
    }

    public function sortBySuitFirst():void
    {  
        _cards.sort(_sortBySuitFirst);
    }

    private function createDeck():void
    {
        var suit:int = 0;
        var value:int = 1;
        var type:String;
          
        for( suit=0; suit < 4; suit++ )
        {
            switch( suit )
            {
            case 0:
                type = SuitTypes.CLUB;
                break;
            case 1:
                type = SuitTypes.DIAMOND;
                break;
            case 2:
                type = SuitTypes.HEART;
                break;
            case 3:
                type = SuitTypes.SPADE;
            }
        
            for( value = 1; value <= 13; value++ )
            {
                _cards[ suit * 13 + value - 1 ] = new Card( type, value );
            }
        }
    }

    private function _sortByValueFirst(x:Card, y:Card):Number
    {
        if(x.value > y.value)
        {
            // y should appear befor x because it's of a lower value
            return 1;
        }
        else if(x.value < y.value)
        {
            // x should appear befor y because it's of a lower value
            return -1;
        }
        else if( SuitTypes.orderNumber(x.suit) > SuitTypes.orderNumber(y.suit) )
        {
            // y should appear befor x because it's suit comes first
            return 1;
        }
        else if( SuitTypes.orderNumber(y.suit) < SuitTypes.orderNumber(x.suit) )
        {
            // x should appear befor y because it's suit comes first
            return -1;
        }
      
        return 0;
    }

    private function _sortBySuitFirst(x:Card, y:Card):Number
    {
        if( SuitTypes.orderNumber(x.suit) > SuitTypes.orderNumber(y.suit) )
        {
            // y should appear befor x because it's suit comes first
            return 1;
        }
        else if( SuitTypes.orderNumber(y.suit) < SuitTypes.orderNumber(x.suit) )
        {
            // x should appear befor y because it's suit comes first
            return -1;
        }
        else if(x.value > y.value)
        {
            // y should appear befor x because it's of a lower value
            return 1;
        }
        else if(x.value < y.value)
        {
            // x should appear befor y because it's of a lower value
            return -1;
        }
        
        return 0;
    }
}

class Card extends Sprite
{
    private var _suit:String;
    public function get suit():String { return _suit; }
    
    private var _value:int;
    public function get value():int { return _value; }
    
    private var bmp:Bitmap;
    private var bmd:BitmapData;
    
    private static const TOP_Y:Number = 60;
    private static const HIGH_MID_HIGH_Y:Number = 93;
    private static const MID_HIGH_Y:Number = 105;
    private static const LOW_MID_HIGH_Y:Number = 120;
    private static const MIDDLE_Y:Number = 150;
    
    private static const LEFT_X:Number = 60;
    private static const MIDDLE_X:Number = 105;
    private static const RIGHT_X:Number = 150;
    
    private static const NUMBER_Y:Number = 35;
    private static const NUMBER_X:Number = 20;

    public function Card(suitType:String, value:int)
    {
        _suit = suitType;
        _value = value;
        
        createCard();
    }

    private function createCard():void
    {
        bmd = new BitmapData(212, 300, true, 0x00FFFFFF);
          
        var mc:Sprite = new Sprite();
        mc.graphics.beginFill(0xFFFFFF, 1);
        mc.graphics.lineStyle(1, 0x000000, 1);
        mc.graphics.drawRoundRect(0, 0, 211, 299, 15, 15);
        mc.graphics.endFill();
          
        bmd.draw(mc);
        
        var color:uint = 0;
        var symbol:Sprite;
        switch(_suit)
        {
        case SuitTypes.CLUB:
            symbol = SuitClub.symbol;
            break;
        case SuitTypes.DIAMOND:
            color = 0xFF0000;
            symbol = SuitDiamond.symbol;
            break;
        case SuitTypes.HEART:
            color = 0xFF0000;
            symbol = SuitHeart.symbol;
            break;
        case SuitTypes.SPADE:
        default:
            symbol = SuitSpade.symbol;
        }
          
        if(_value == 1) // Ace
        {
            drawSymbol(new SuitAndValue('A', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('A', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, MIDDLE_X, MIDDLE_Y, false, 2);
        }
        else if(_value == 2)
        {
            drawSymbol(new SuitAndValue('2', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('2', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, MIDDLE_X, TOP_Y);
            
            drawSymbol(symbol, MIDDLE_X, 300-TOP_Y, true);
        }
        else if(_value == 3)
        {
            drawSymbol(new SuitAndValue('3', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('3', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, MIDDLE_X, TOP_Y);
            
            drawSymbol(symbol, MIDDLE_X, MIDDLE_Y);
            
            drawSymbol(symbol, MIDDLE_X, 300-TOP_Y, true);
        }
        else if(_value == 4)
        {
            drawSymbol(new SuitAndValue('4', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('4', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, LEFT_X, TOP_Y);
            drawSymbol(symbol, RIGHT_X, TOP_Y);
            
            drawSymbol(symbol, LEFT_X, 300-TOP_Y, true);
            drawSymbol(symbol, RIGHT_X, 300-TOP_Y, true);
        }
        else if(_value == 5)
        {
            drawSymbol(new SuitAndValue('5', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('5', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, LEFT_X, TOP_Y);
            drawSymbol(symbol, RIGHT_X, TOP_Y);
            
            drawSymbol(symbol, MIDDLE_X, MIDDLE_Y);
            
            drawSymbol(symbol, LEFT_X, 300-TOP_Y, true);
            drawSymbol(symbol, RIGHT_X, 300-TOP_Y, true);
        }
        else if(_value == 6)
        {
            drawSymbol(new SuitAndValue('6', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('6', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, LEFT_X, TOP_Y);
            drawSymbol(symbol, RIGHT_X, TOP_Y);
            
            drawSymbol(symbol, LEFT_X, MIDDLE_Y);
            drawSymbol(symbol, RIGHT_X, MIDDLE_Y);
            
            drawSymbol(symbol, LEFT_X, 300-TOP_Y, true);
            drawSymbol(symbol, RIGHT_X, 300-TOP_Y, true);
        }
        else if(_value == 7)
        {
            drawSymbol(new SuitAndValue('7', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('7', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, LEFT_X, TOP_Y);
            drawSymbol(symbol, RIGHT_X, TOP_Y);
            
            drawSymbol(symbol, MIDDLE_X, MID_HIGH_Y);
            
            drawSymbol(symbol, LEFT_X, MIDDLE_Y);
            drawSymbol(symbol, RIGHT_X, MIDDLE_Y);
            
            drawSymbol(symbol, LEFT_X, 300-TOP_Y, true);
            drawSymbol(symbol, RIGHT_X, 300-TOP_Y, true);
        }
        else if(_value == 8)
        {
            drawSymbol(new SuitAndValue('8', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('8', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, LEFT_X, TOP_Y);
            drawSymbol(symbol, RIGHT_X, TOP_Y);
            
            drawSymbol(symbol, MIDDLE_X, MID_HIGH_Y);
            
            drawSymbol(symbol, LEFT_X, MIDDLE_Y);
            drawSymbol(symbol, RIGHT_X, MIDDLE_Y);
            
            drawSymbol(symbol, MIDDLE_X, 300-MID_HIGH_Y, true);
            
            drawSymbol(symbol, LEFT_X, 300-TOP_Y, true);
            drawSymbol(symbol, RIGHT_X, 300-TOP_Y, true);
        }
        else if(_value == 9)
        {
            drawSymbol(new SuitAndValue('9', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('9', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, LEFT_X, TOP_Y);
            drawSymbol(symbol, RIGHT_X, TOP_Y);
            
            drawSymbol(symbol, LEFT_X, LOW_MID_HIGH_Y);
            drawSymbol(symbol, RIGHT_X, LOW_MID_HIGH_Y);
            
            drawSymbol(symbol, MIDDLE_X, MIDDLE_Y);
            
            drawSymbol(symbol, LEFT_X, 300-LOW_MID_HIGH_Y, true);
            drawSymbol(symbol, RIGHT_X, 300-LOW_MID_HIGH_Y, true);
            
            drawSymbol(symbol, LEFT_X, 300-TOP_Y, true);
            drawSymbol(symbol, RIGHT_X, 300-TOP_Y, true);
        }
        else if(_value == 10)
        {
            drawSymbol(new SuitAndValue('10', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('10', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, LEFT_X, TOP_Y);
            drawSymbol(symbol, RIGHT_X, TOP_Y);
            
            drawSymbol(symbol, MIDDLE_X, HIGH_MID_HIGH_Y);
            
            drawSymbol(symbol, LEFT_X, LOW_MID_HIGH_Y);
            drawSymbol(symbol, RIGHT_X, LOW_MID_HIGH_Y);
            
            drawSymbol(symbol, LEFT_X, 300-LOW_MID_HIGH_Y, true);
            drawSymbol(symbol, RIGHT_X, 300-LOW_MID_HIGH_Y, true);
            
            drawSymbol(symbol, MIDDLE_X, 300-HIGH_MID_HIGH_Y, true);
            
            drawSymbol(symbol, LEFT_X, 300-TOP_Y, true);
            drawSymbol(symbol, RIGHT_X, 300-TOP_Y, true);
        }
        else if(_value == 11) // Jack
        {
            drawSymbol(new SuitAndValue('J', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('J', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, MIDDLE_X, MIDDLE_Y, false, 2);
        }
        else if(_value == 12) // Queen
        {
            drawSymbol(new SuitAndValue('Q', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('Q', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, MIDDLE_X, MIDDLE_Y, false, 2);
        }
        else if(_value == 13) // King
        {
            drawSymbol(new SuitAndValue('K', symbol, color), NUMBER_X, NUMBER_Y, false);
            drawSymbol(new SuitAndValue('K', symbol, color), 210-NUMBER_X, 300-NUMBER_Y, true);
            
            drawSymbol(symbol, MIDDLE_X, MIDDLE_Y, false, 2);
        }
          
        bmp = new Bitmap(bmd, "auto", true);
        addChild(bmp);
    }

    private function drawSymbol(symbol:Sprite, x:Number, y:Number, flipped:Boolean = false, scale:Number = 1):void
    {
        var matrix:Matrix = new Matrix();
          
        if(flipped)
        {
            matrix.rotate(Math.PI);
        }
          
        matrix.scale(scale, scale);
        matrix.tx = x;
        matrix.ty = y;
          
        bmd.draw(symbol, matrix, null, null, null, true);
    }
}

class SuitTypes
{
    public static const CLUB:String = "club";
    public static const DIAMOND:String = "diamond";
    public static const HEART:String = "heart";
    public static const SPADE:String = "spade";
    
    public static function orderNumber(type:String):int
    {
        if( type == SuitTypes.CLUB ) return 0;
        if( type == SuitTypes.DIAMOND ) return 1;
        if( type == SuitTypes.HEART ) return 2;
        if( type == SuitTypes.SPADE ) return 3;
          
        return -1;
    }
}

class SuitAndValue extends Sprite
{
    private var tf:TextField;
    private var format:TextFormat;
    
    private var bmp:Bitmap;
    private var bmd:BitmapData;
    
    public function SuitAndValue(val:String, symbol:Sprite, color:uint)
    {
        var m:Matrix = new Matrix();
        
        tf = new TextField();
        format = new TextFormat('Times New Roman', 35, color, true);
        format.letterSpacing = -4;
        tf.text = val;
        tf.setTextFormat(format);
        
        if(val == '10' || val == 'A' || val == 'Q' || val == 'K')
        {
            if(val == '10')
            {
                m.tx = 4;
            }
            else
            {
                m.tx = 6;
            }
            
            m.scale(.7, 1);
        }
        else
        {
            m.tx = 4;
            m.scale(1, 1);
        }
        
        bmd = new BitmapData(30, 70, true, 0x00FFFFFF);
        var bmd2:BitmapData = new BitmapData(40, 38, true, 0x00FFFFFF);
        bmd2.draw(tf);
        bmd.draw(bmd2, m, null, null, null, true);
        
        m.identity();
        m.scale(.5, .5);
        m.ty = 55;
        m.tx = 15;
        bmd.draw(symbol, m);
        
        bmp = new Bitmap(bmd);
        
        bmp.x = -bmp.width*.5;
        bmp.y = -bmp.height*.5;
        
        addChild(bmp);
    }

}

class SuitClub extends Sprite 
{
    private static const _DATA:String = 
    "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";
    
    public static var symbol:Sprite;
    
    protected static var image:Loader;
    
    public static function init():void
    {
        image = Base64ImageLoader.load(_DATA);
        image.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    }
    
    protected static function onComplete(event:Event):void
    {
        var mc:Bitmap = image.content as Bitmap;
        mc.smoothing = true;
        mc.height = 50;
        mc.scaleX = mc.scaleY;
        
        mc.x = mc.width*(-.5);
        mc.y = mc.height*(-.5);
        symbol = new Sprite();
        symbol.addChild(mc);
    }
}

class SuitDiamond extends Sprite 
{
    private static const _DATA:String = 
    "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"+
    "vsvr/h0AXndctReSU9MAAAAASUVORK5CYII=";
    
    public static var symbol:Sprite;
    
    protected static var image:Loader;
    
    public static function init():void
    {
        image = Base64ImageLoader.load(_DATA);
        image.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    }
    
    protected static function onComplete(event:Event):void
    {
        var mc:Bitmap = image.content as Bitmap;
        mc.smoothing = true;
        mc.height = 50;
        mc.scaleX = mc.scaleY;
        
        mc.x = mc.width*(-.5);
        mc.y = mc.height*(-.5);
        symbol = new Sprite();
        symbol.addChild(mc);
    }
}

class SuitHeart extends Sprite 
{
    private static const _DATA:String = 
    "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";
    
    public static var symbol:Sprite;
    
    protected static var image:Loader;
    
    public static function init():void
    {
        image = Base64ImageLoader.load(_DATA);
        image.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    }
    
    protected static function onComplete(event:Event):void
    {
        var mc:Bitmap = image.content as Bitmap;
        mc.smoothing = true;
        mc.height = 50;
        mc.scaleX = mc.scaleY;
        
        mc.x = mc.width*(-.5);
        mc.y = mc.height*(-.5);
        symbol = new Sprite();
        symbol.addChild(mc);
    }
}

class SuitSpade extends Sprite 
{
    private static const _DATA:String = 
    "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";
    
    public static var symbol:Sprite;
    
    protected static var image:Loader;
    
    public static function init():void
    {
        image = Base64ImageLoader.load(_DATA);
        image.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    }
    
    protected static function onComplete(event:Event):void
    {
        var mc:Bitmap = image.content as Bitmap;
        mc.smoothing = true;
        mc.height = 50;
        mc.scaleX = mc.scaleY;
        
        mc.x = mc.width*(-.5);
        mc.y = mc.height*(-.5);
        symbol = new Sprite();
        symbol.addChild(mc);
    }
}


// Copied from http://wonderfl.net/c/7ZwK
/**
 * Base64化された画像データを表示可能な形式に変換するクラス
 * 
 * 使い方 :
 * var data:String = "Base64化された画像データ";
 * var display:DisplayObjectContainer = Base64ImageLoader.load(data);
 * if (display != null)
 *     addChild(display);
 */
class Base64ImageLoader
{
    static public function load(data:String):Loader
    {
        var byteArray:ByteArray;
        var base64Decoder:Base64Decoder;
        var loader:Loader;
        
        base64Decoder = new Base64Decoder();
        base64Decoder.decode(data);
        
        try {
            byteArray = base64Decoder.toByteArray();
            byteArray.position = 0;
        } catch (e:Error) {
            return null;
        }
        
        loader = new Loader();
        loader.loadBytes(byteArray);
        
        return loader;
    }
}