package
{
import flash.text.*;
import flash.display.*;
import flash.events.*;
/**
* ...
* @author (t)ad
*/
public class blackJackBrain
{
/* The brain consists of anything that needs to be remembered, even once. And the functions used to rememeber and retrieve data. */
/* Also any method that needs a lot of the brains properties is in this class */
/* It is part of the engine */
public var dealerStats:TextField;
public var playerStats:TextField;
public var format:TextFormat;
public var theGame:tadsBlackJack;
public var dealerHand:Number = 0;
public var playerHand:Number = 0;
public var acesUsed:Number = 0;
public var splitHandOne:Number = 0;
public var splitHandTwo:Number = 0;
public var splitHandThree:Number = 0;
public var playerCardOne:String = "0";
public var firstSuit:String = "c";
public var secondSuit:String = "c";
public var dealerSuitOne:String = "c";
public var dealerSuitTwo:String = "c";
public var splitCardTwoSuit:String = "c";
public var splitCardFourSuit:String = "c";
public var playerCardTwo:String = "0";
public var dealerCardOne:String = "0";
public var dealerCardTwo:String = "0";
public var splitCardOne:String = "0";
public var splitCardTwo:String = "0";
public var splitCardThree:String = "0";
public var splitCardFour:String = "0";
public var splitCardFive:String = "0";
public var splitCardSix:String = "0";
public function blackJackBrain(theGameIs:tadsBlackJack) {
theGame = theGameIs;
format = new TextFormat();
format.font = "Arial";
format.color = "0x000000";
format.size = 10;
format.align = TextFormatAlign.LEFT;
dealerStats = new TextField();
dealerStats.defaultTextFormat = format;
playerStats = new TextField();
playerStats.defaultTextFormat = format;
}
public function update():void
{
dealerStats.text = "Dealer cards: "+ dealerCardOne + " " +
dealerCardTwo + " dealer hand totals: " + dealerHand;
playerStats.text = "Player cards: "+ playerCardOne + " " +
playerCardTwo + " your hand totals: " + playerHand;
}
public function calculateDeal():void {
acesUsed = 0;
playerCardOne = blackJackFunctions.giveCard();
firstSuit = cardShute.suitOfLastCardPulled;
playerCardTwo = blackJackFunctions.giveCard();
secondSuit = cardShute.suitOfLastCardPulled;
playerHand = blackJackFunctions.calculateTwoCardHand(playerCardOne, playerCardTwo);
if (playerCardOne == "A" && playerCardTwo == "A") acesUsed += 1;
dealerCardOne = blackJackFunctions.giveCard();
dealerSuitOne = cardShute.suitOfLastCardPulled;
dealerCardTwo = blackJackFunctions.giveCard();
dealerSuitTwo = cardShute.suitOfLastCardPulled;
dealerHand= blackJackFunctions.calculateTwoCardHand(dealerCardOne, dealerCardTwo);
update();
}
public function calculateHit(event:MouseEvent):void
{
var whichhit:Object = event.target; //notice target. Seems like a long function
//but this function is dispatched from 7 different buttons
//so that's 7 different behaviors, compacted into this one function
//if we wanted, each if could be it's own function instead
if (whichhit == theGame.firstSplitButton && playerCardOne == playerCardTwo &&
playerStats.text.indexOf('new hands')==-1 && playerStats.text.indexOf('hit for')==-1)
{
splitHands(playerCardOne, playerCardTwo, firstSuit, secondSuit); return(void);
}
if (whichhit == theGame.secondSplitButton && splitCardTwo == splitCardOne &&
playerStats.text.indexOf('resplit hand')==-1 && splitCardThree!= "0" && splitCardFour!= "0" &&
playerStats.text.indexOf('after hit')==-1 &&
splitCardOne != "0" || whichhit == theGame.secondSplitButton && splitCardThree == splitCardFour &&
playerStats.text.indexOf('resplit hand')==-1 && splitCardThree!= "0" && splitCardFour!= "0" && playerStats.text.indexOf('after hit')==-1 && splitCardOne != "0")
{
if (splitCardTwo == splitCardOne) {
splitHandsAgain(splitCardOne, splitCardTwo, "one");
} else {
splitHandsAgain(splitCardThree, splitCardFour, "two");
}
return(void);
}
if (whichhit == theGame.hitSplitOneButton && splitHandOne!=0 && playerStats.text.indexOf('first hand after')==-1
&& playerStats.text.indexOf('split')!=-1 && splitHandOne < 21)
{
var afhcard:String = blackJackFunctions.giveCard();
var sgn:String = cardShute.suitOfLastCardPulled;
var possibas:Array = new Array();
if (playerStats.text.indexOf('resplit')!=-1)
{possibas = [splitCardTwo, splitCardFive];} else {possibas = [playerCardOne, splitCardTwo];}
splitHandOne=hitThisHand(splitHandOne, possibas, afhcard);
theGame.showHitGraphics(afhcard, null, sgn);
playerStats.appendText("\nhit and got card: "+afhcard+"");
playerStats.appendText("\nfirst hand after hit: "+ splitHandOne+"");
return(void);
}
if (whichhit == theGame.hitSplitTwoButton && splitHandTwo!=0 &&
playerStats.text.indexOf('second hand after')==-1
&& playerStats.text.indexOf('split')!=-1 && splitHandTwo < 21)
{
var ashcard:String = blackJackFunctions.giveCard();
var suitGiven:String = cardShute.suitOfLastCardPulled;
splitHandTwo=hitThisHand(splitHandTwo, [playerCardTwo, splitCardFour], ashcard);
theGame.showHitGraphics(ashcard, theGame.cardSpotTwo, suitGiven);
playerStats.appendText("\nhit and got card: "+" "+" "+" "+ashcard+"");
playerStats.appendText("\nsecond hand after hit: "+ splitHandTwo+"");
return(void);
}
if (whichhit == theGame.hitSplitThreeButton && splitHandThree!=0 && playerStats.text.indexOf('last hand')==-1 &&
playerStats.text.indexOf('resplit')!=-1 && splitHandThree < 21)
{
var athhcard:String = blackJackFunctions.giveCard();
var sg:String = cardShute.suitOfLastCardPulled;
splitHandThree=hitThisHand(splitHandThree, [splitCardOne, splitCardSix], athhcard);
theGame.showHitGraphics(athhcard, theGame.cardSpotThree, sg);
playerStats.appendText("\nhit and got card: "+" "+" "+" "+athhcard+"");
playerStats.appendText("\nlast hand is now: "+ splitHandThree+"");
return(void);
}
if (whichhit == theGame.hitButton && playerStats.text.indexOf('first hand')==-1)
{
var newcard:String = blackJackFunctions.giveCard();
var sger:String = cardShute.suitOfLastCardPulled;
theGame.showHitGraphics(newcard, null, sger);
if (newcard == "K" || newcard == "Q" || newcard == "J") newcard = "10";
if (playerStats.text.indexOf("A")==-1)
{
if (newcard == "A")
{
if (playerHand + 11 > 21)
{playerHand += 1;acesUsed += 1;}
else
{playerHand += 11;}
}
else
{
playerHand += int(newcard);
}
}
else
{
var howmanyar:Array = playerStats.text.match("A");
var numofas:Number = howmanyar.length;
if (newcard != "A")
{
if (playerHand + int(newcard) > 21 && acesUsed < numofas)
{
playerHand = playerHand - 10 + int(newcard);
acesUsed += 1;
}
else
{
if (playerHand + 10 + int(newcard) <=21 && acesUsed < numofas)
{
playerHand = playerHand + 10 + int(newcard);acesUsed += 1;
}
else
{playerHand = playerHand + int(newcard);}
}
}
if (newcard == "A")
{
if (playerHand + 1 > 21 && acesUsed < numofas)
{
playerHand = playerHand - 10 + 1;acesUsed += 1;
playerStats.appendText("\nhit for: "+newcard+" your hand is now: "+playerHand+"");
return(void);
}
if (playerHand + 1 > 21 && acesUsed > numofas) playerHand = playerHand + 1;
if (playerHand + 11 >21 && playerHand + 1 <= 21) playerHand = playerHand +1;
if (playerHand + 11 <= 21) playerHand = playerHand + 11;
}
}
playerStats.appendText("\nhit for: "+newcard+" your hand is now: "+playerHand+"");
}
}
public function hitThisHand(handtohit:Number, apossibs:Array, hitwith:String):Number
{
var newcard:String = hitwith;
if (newcard == "K" || newcard == "Q" || newcard == "J") newcard = "10";
var asofar:String = apossibs.join("");
if (asofar.indexOf("A")==-1)
{
if (newcard == "A")
{
if (handtohit + 11 > 21)
{handtohit += 1;acesUsed += 1;}
else
{handtohit += 11;}
}
else
{handtohit += int(newcard);}
}
else
{
var howmanyar:Array = asofar.match("A");
var numofas:Number = howmanyar.length;
if (newcard != "A")
{
if (handtohit + int(newcard) > 21 && acesUsed < numofas)
{handtohit = handtohit - 10 + int(newcard);acesUsed += 1;}
else
{
if (handtohit + 10 + int(newcard) <=21 && acesUsed < numofas)
{handtohit = handtohit + 10 + int(newcard);acesUsed += 1;}
else
{handtohit = handtohit + int(newcard);}
}
}
if (newcard == "A")
{
if (handtohit + 1 > 21 && acesUsed < numofas)
{handtohit = handtohit - 10 + 1;acesUsed += 1;return(handtohit);}
if (handtohit + 1 > 21 && acesUsed > numofas) handtohit = handtohit + 1;
if (handtohit + 11 >21 && handtohit + 1 <= 21) handtohit = handtohit +1;
if (handtohit + 11 <= 21) handtohit = handtohit + 11;
}
}
return(handtohit);
}
public function splitHands(firstcard:String, secondcard:String, su1:String, su2:String ):void
{
if (firstcard == "A" && secondcard == "A") acesUsed -= 1;
splitCardOne = firstcard;
splitCardTwo = blackJackFunctions.giveCard();
splitCardTwoSuit = cardShute.suitOfLastCardPulled;
splitHandOne = blackJackFunctions.calculateTwoCardHand(splitCardOne, splitCardTwo);
if (splitCardOne == "A" && splitCardTwo == "A") acesUsed += 1;
splitCardThree = secondcard;
splitCardFour = blackJackFunctions.giveCard();
splitCardFourSuit = cardShute.suitOfLastCardPulled;
splitHandTwo = blackJackFunctions.calculateTwoCardHand(splitCardThree, splitCardFour);
if (splitCardThree == "A" && splitCardFour == "A") acesUsed += 1;
theGame.showSplitGraphics(firstcard, splitCardTwo, secondcard,
splitCardFour,null,null, su1, splitCardTwoSuit, su2, splitCardFourSuit);
playerStats.appendText("\nsplit and got cards: "+splitCardTwo+" "+splitCardFour+"");
playerStats.appendText("\nthe new hands are: "+splitHandOne+" "+splitHandTwo+"");
}
public function splitHandsAgain(firstcard:String, secondcard:String, whichspot:String):void
{
if (firstcard == "A" && secondcard == "A") acesUsed -= 1;
var theonesplitre:Number = 0;
splitCardFive = blackJackFunctions.giveCard();
var su5:String = cardShute.suitOfLastCardPulled;
splitCardSix = blackJackFunctions.giveCard();
var su6:String = cardShute.suitOfLastCardPulled;
if (whichspot == "one")
{
splitHandOne = blackJackFunctions.calculateTwoCardHand(splitCardOne, splitCardFive); theonesplitre = splitHandOne;
if (splitCardOne == "A" && splitCardFive == "A") acesUsed += 1;
splitHandThree = blackJackFunctions.calculateTwoCardHand(splitCardTwo, splitCardSix);
if (splitCardTwo == "A" && splitCardSix == "A") acesUsed += 1;
theGame.showSplitGraphics(splitCardOne, splitCardFive, splitCardTwo,
splitCardSix, theGame.cardSpotOne, theGame.cardSpotThree, firstSuit, su5, secondSuit, su6);
}
if (whichspot == "two")
{
splitHandTwo = blackJackFunctions.calculateTwoCardHand(splitCardThree, splitCardFive); theonesplitre = splitHandTwo;
if (splitCardThree == "A" && splitCardFive == "A") acesUsed += 1;
splitHandThree = blackJackFunctions.calculateTwoCardHand(splitCardFour, splitCardSix);
if (splitCardFour == "A" && splitCardSix == "A") acesUsed += 1;
theGame.showSplitGraphics(splitCardThree, splitCardFive, splitCardFour,
splitCardSix, theGame.cardSpotTwo, theGame.cardSpotThree, secondSuit, su5, splitCardFourSuit, su6);
}
playerStats.appendText("\nsplit again and got cards: "+splitCardFive+" "+splitCardSix+"");
playerStats.appendText("\nthe resplit hand is now: "+theonesplitre+"");
playerStats.appendText("\nthe new hand is now: "+splitHandThree+"");
}
public function winEifel(winField:TextField):void {
/* All possible outcomes */
if (dealerHand > playerHand && dealerHand <= 21 && playerHand < 21 && splitHandOne == 0 && splitHandTwo == 0 && splitHandThree == 0)
{winField.appendText("dealer wins the hand"); }
if (playerHand > dealerHand && playerHand <=21 && dealerHand < 21 && splitHandOne == 0 && splitHandTwo == 0 && splitHandThree == 0)
{winField.appendText("player wins the hand"); theGame.sounds.winSound.play(); }
if (playerHand == dealerHand && dealerHand <=21 && playerHand <=21 && splitHandOne == 0 && splitHandTwo == 0 && splitHandThree == 0)
{winField.appendText("the hand pushes"); }
if (playerHand > 21 && splitHandOne == 0 && splitHandTwo == 0 && splitHandThree == 0)
{winField.appendText("player busts"); }
if (playerHand <= 21 && splitHandOne == 0 && splitHandTwo == 0 && splitHandThree == 0 && dealerHand > 21)
{winField.appendText("dealer busts");theGame.sounds.winSound.play();}
if (splitHandOne != 0 && splitHandOne <= 21 && splitHandOne > dealerHand && dealerHand < 21)
{winField.appendText("first hand wins");}
if (splitHandOne != 0 && splitHandOne < 21 && splitHandOne < dealerHand && dealerHand <= 21)
{winField.appendText("first hand looses");}
if (splitHandOne != 0 && splitHandOne > 21)
{winField.appendText("first hand busts");}
if (splitHandOne != 0 && splitHandOne <= 21 && dealerHand > 21)
{winField.appendText("dealer busts first hand wins");}
if (splitHandOne != 0 && splitHandOne <= 21 && splitHandOne == dealerHand && dealerHand <= 21)
{winField.appendText("first hand pushes");}
if (splitHandTwo != 0 && splitHandTwo <= 21 && splitHandTwo > dealerHand && dealerHand < 21)
{winField.appendText("\nsecond hand wins");}
if (splitHandTwo != 0 && splitHandTwo < 21 && splitHandTwo < dealerHand && dealerHand <= 21)
{winField.appendText("\nsecond hand looses");}
if (splitHandTwo != 0 && splitHandTwo > 21)
{winField.appendText("\nsecond hand busts");}
if (splitHandTwo != 0 && splitHandTwo <= 21 && dealerHand > 21)
{winField.appendText("\ndealer busts second hand wins");}
if (splitHandTwo != 0 && splitHandTwo <= 21 && splitHandTwo == dealerHand && dealerHand <= 21)
{winField.appendText("\nsecond hand pushes");}
if (splitHandThree != 0 && splitHandThree <= 21 && splitHandThree > dealerHand && dealerHand < 21)
{winField.appendText("\nthird hand wins");}
if (splitHandThree != 0 && splitHandThree < 21 && splitHandThree < dealerHand && dealerHand <= 21)
{winField.appendText("\nthird hand looses");}
if (splitHandThree != 0 && splitHandThree > 21)
{winField.appendText("\nthird hand busts");}
if (splitHandThree != 0 && splitHandThree <= 21 && dealerHand > 21)
{winField.appendText("\ndealer busts third hand wins");}
if (splitHandThree != 0 && splitHandThree <= 21 && splitHandThree == dealerHand && dealerHand <= 21)
{winField.appendText("\nthird hand pushes"); }
}
}
}