package
{
import flash.display.*;
import flash.events.Event;
import flash.geom.*;
import flash.text.*;
/**
* @author (t)ad
*/
public class PlayingCard extends Sprite
{
public var red:ColorTransform;
public var black:ColorTransform;
public var numbers:Array = ["A", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "King", "Queen", "Jack"];
public var suits:Array = ["c", "club", "d", "diamond", "h", "heart", "s", "spade"];
public var cardColor:uint;
public var suitSpots:Sprite;
public function PlayingCard(num:String, suit:String, immortal:Boolean = false) {
suitSpots = new Sprite();
red = new ColorTransform(0, 0, 0, 1, 255, 0, 0, 0);
black = new ColorTransform(0, 0, 0, 1, 0, 0, 0, 0);
cardColor = (suit == "h" || suit == "d") ? 0xFF0000 : 0x000000;
this.graphics.beginFill(0xFFFFFF);
this.graphics.lineStyle(1, cardColor);
this.graphics.drawRect(0, 0, 100, 150);
this.mouseEnabled = false;
addChildren(num, suit);
if (numChildren == 2) {
var numChild:DisplayObject = getChildAt(0);
numChild.scaleX = numChild.scaleY /= 1.5;
numChild.x = numChild.y = 2;
var suitImage:DisplayObject = getChildAt(1);
suitImage.y = 24 -3;
suitImage.x = 3;
suitImage.scaleX = suitImage.scaleY /= 4;
makeOppositeTwo(num, suit);
}
if (!immortal) addEventListener(Event.REMOVED_FROM_STAGE, die, false, 0, true);
}
private function makeOppositeTwo(n:String, s:String):void {
addChildren(n, s);
var suitImage:DisplayObject = getChildAt(3);
var numberImage:DisplayObject = getChildAt(2);
suitImage.rotation = 180;
numberImage.rotation = 180;
numberImage.y = 150 - numberImage.height/numberImage.scaleY + 20;
numberImage.x = 100 - numberImage.width + 14;
numberImage.scaleX = numberImage.scaleY /= 1.5;
suitImage.y = numberImage.y - 20;
suitImage.x = numberImage.x - 2;
suitImage.scaleX = suitImage.scaleY /= 4;
makeSuitSpots();
makePattern(n, s);
}
private function makeSuitSpots():void {
suitSpots.graphics.lineStyle(1, 0x000000);
suitSpots.graphics.drawRect(0, 0, 100, 150);
var positions:Array = [
[15, 10], [15, 45], [15, 80], [15, this.height - 35 + 5],
[40, 10], [40, 65], [40, this.height - 35 + 5],
[this.width - 33, 10], [this.width -33, 45], [this.width - 33, 80], [this.width - 33, this.height - 35 + 5],
[15,65], [this.width-31, 65]
];
for (var i:int = 0; i < positions.length; i++) {
makeSpot(suitSpots, positions[i]);
}
this.addChild(suitSpots);
}
private function makePattern(numb:String, suiter:String):void {
var sChoices:Array = ["c", "Club", "d", "Diamond", "h", "Heart", "s", "Spade"];
var suitImage:Class = blackJackImages[sChoices[sChoices.indexOf(suiter)+1]];
var theNum:int = (numb == "A") ? 1 : int(numb);
var img:DisplayObject;
switch(theNum) {
case 3:
doImagePlace(img, suitImage, [4, 5, 6]);
break;
case 2:
doImagePlace(img, suitImage, [4, 6]);
break;
case 1:
doImagePlace(img, suitImage, [5]);
break;
case 4:
doImagePlace(img, suitImage, [0, 3, 7, 10]);
break;
case 5:
doImagePlace(img, suitImage, [0, 3, 5, 7, 10]);
break;
case 6:
doImagePlace(img, suitImage, [0, 11, 3, 7, 12, 10]);
break;
case 7:
doImagePlace(img, suitImage, [0, 11, 3, 5, 7, 12, 10]);
break;
case 8:
doImagePlace(img, suitImage, [0, 11, 3, 4, 6, 7, 12, 10]);
break;
case 9:
doImagePlace(img, suitImage, [0, 1, 2, 3, 5, 7, 8, 9, 10]);
break;
case 10:
doImagePlace(img, suitImage, [0, 1, 2, 3, 4, 6, 7, 8, 9, 10]);
break;
default:
break;
}
}
private function makeSpot(inThis:Sprite, position:Array):void {
inThis.addChild(new Sprite());
var child:DisplayObject = inThis.getChildAt(inThis.numChildren - 1);
child.x = position[0];
child.y = position[1];
}
private function doImagePlace(i:DisplayObject, c:Class, p:Array):void {
for (var t:int = 0; t < p.length; t++) {
i = new c();
i.scaleX = i.scaleY /= 2;
(suitSpots.getChildAt(p[t]) as DisplayObjectContainer).addChild(i);
}
}
public function addChildren(num:String, suit:String):void {
var index:int = getIndexFor(num);
var suitIs:String = (index >= 10) ? suits[suits.indexOf(suit) + 1] : "";
addChild(new blackJackImages[suitIs+numbers[index]]());
if (suitIs != "") suit = "done"
else getChildAt(numChildren-1).transform.colorTransform = (suit == "h" || suit == "d") ? red : black;
switch (suit) {
case "c" :
addChild(new blackJackImages.Club());
break;
case "d":
addChild(new blackJackImages.Diamond());
break;
case "h":
addChild(new blackJackImages.Heart());
break;
case "s":
addChild(new blackJackImages.Spade());
break;
default:
break;
}
}
public function getIndexFor(card:String):int {
var cardIndex:int;
if (card.match(/[KQJA]{1}/)) {
if (card == "K") cardIndex = 10;
if (card == "Q") cardIndex = 11;
if (card == "J") cardIndex = 12;
if (card == "A") cardIndex = 0;
} else {
cardIndex = int(card) - 1;
}
return cardIndex;
}
public function die(e:Event):void {
for (var i:int = 0; i < numChildren; i++) {
this.removeChildAt(i);
}
red = null;
black = null;
numbers = null;
suits = null;
suitSpots = null;
}
}
}