public static ActionTable FromStrategy(IBlackjackPlayer strategy)
{
var table = new ActionTypes[35, 10];
List<PlayerHand> hands = new List<PlayerHand>();
hands.Add(null);
for (int dealer = 0; dealer < 10; dealer++)
{
DealerHand dealerHand = new DealerHand();
dealerHand.AddCard(new Card((Ranks)dealer));
for (int p = 0; p < 35; p++)
{
PlayerHand playerHand = new PlayerHand()
{
Player = strategy,
Bet = 1
};
if (p < 10)
{
playerHand.AddCard(new Card((Ranks)p));
playerHand.AddCard(new Card((Ranks)p));
}
else if (p < 19)
{
playerHand.AddCard(new Card(Ranks.Ace));
playerHand.AddCard(new Card((Ranks)(p - 10)));
}
else if (p < 26)
{
playerHand.AddCard(new Card(Ranks.Two));
playerHand.AddCard(new Card((Ranks)(p - 18)));
}
else
{
playerHand.AddCard(new Card(Ranks.Ten));
playerHand.AddCard(new Card((Ranks)(p - 26)));
}
hands[0] = playerHand;
HandInfo info = new HandInfo()
{
DealerHand = dealerHand,
HandToPlay = 0,
PlayerHands = hands
};
var hs = strategy.Hit(info) ? ActionTypes.Hit : ActionTypes.Stand;
var type = hs;
if (p < 10 && strategy.Split(info))
type = hs == ActionTypes.Hit ? ActionTypes.SplitOrHit : ActionTypes.SplitOrStand;
else if (strategy.DoubleDown(info))
type = hs == ActionTypes.Hit ? ActionTypes.DoubleDownOrHit : ActionTypes.DoubleDownOrStand;
table[p, dealer] = type;
}
}
return new ActionTable(table);
}