Have you wondered what the house edge is given a particular rule set? Can you really beat the house by counting cards? How big is that advantage really? Is it really the best strategy to hit a hard 16 when the dealer is showing a 7? All these and more can be answered with this VBScript blackjack simulator. Plug in the rules you want to test, modify basic strategy, count values, indices, betting ramps, and more. See how they all affect the overall house edge!
How To Use
Most of the script parameters are in the constant definitions at the top of script after the comments. The rest are at the bottom in the Initialize subroutine. This is where the betting ramps, indices, basic strategy, and count values are defined.
You can find a basic strategy calculator here: http://wizardofodds.com/games/blackj...gy/calculator/
Performance Stats
It takes about 10 minutes, give or take a minute, to simulate one million games of two-deck blackjack.
Miscellaneous Info
A negative advantage means that it favors the house and you lost money over the simulation. A standard rule set with no counting and perfect basic strategy play favors the house by about half a percent.
The count that is simulated can flip that to about 1.6 percent in your favor. It's a very small advantage that results in very wide variance in any one session of play. What this means is at any one session, you can lose money. But over many games, you are up just a little bit. You can see this by running the script many times for a small number of simulations, say about 20 games of blackjack. The advantage reported will fluctuate back and forth between negative and positive. But run it for lots and lots of simulations and you see your true advantage play out.
The key takeaway is don't expect counting to turn every session of blackjack into a winning one.
CODE
Expand|Select|Wrap|Line Numbers
- ' real world blackjack simulation
- ' designed with KO variant (OK qfit.com) indexes in mind
- ' modify constants, basic strategy, betting ramps, indexes, and count values as needed
- ' default values are for 2 decks, KO variant count, no double after split, dealer hits soft 17, late surrender allowed
- '
- ' created on 10/31/2014
- ' version 1.0
- '
- ' possible additions:
- ' add ability to calculate true count for balanced count systems
- ' add basic strategy defaults based on rule sets
- ' add ability to choose counting strategy
- ' add count values based on counting strategy
- ' add betting ramp values based on counting strategy
- ' add indexes based on counting strategy
- ' add initial count and insurance count based on counting strategy
- ' modify penetration to use percentage
- ' add constant for turning on and off surrender
- ' add rate of error on count as a way to account for human errors or to disguise counting
- ' add rate of error on basic strategy as a way to account for human errors or to disguise counting
- ' add sessions: session max loss before stopping, session max win before stopping
- ' stop playing deck after count gets below a certain number
- ' test up and pull betting system, streak count
- ' add other players at table with choice to pick position
- '
- ' strategy key:
- ' S = stand
- ' RS = surrender, otherwise stand
- ' H = hit
- ' RH = surrender, otherwise hit
- ' DH = double, otherwise hit
- ' DS = double, otherwise stand
- ' P = split
- ' RP = surrender, otherwise split
- Option Explicit
- Const NumSims = 1000000
- Const NumDecks = 2
- Const Penetration = 70 ' Number of cards dealt after which the deck is shuffled
- Const InitialCount = -4 ' For KO variant count, initial count is (Number of Decks - 1) * -4
- Const BurnCards = 1 ' Number of cards burned before first hand is dealt
- Const InsuranceCount = 3 ' Set to high number if you never want to take insurance
- Const NumMaxSplits = 4 ' Max 4
- Const BJPayoutAmount = 1.5 ' Use 1.5 for 3:2 and 1.2 for 6:5
- Const AllowDoubleAfterSplit = False
- Const CanHitSplitAces = False
- Const CanResplitAces = False
- Const DealerHitSoft17 = True
- Const Auditing = False
- Const UseIndexes = True
- Const UseBettingRamp = True
- Const LetItRide = False ' Modify bet downwards only if last hand was a loss. Usually used as one method of camoflaging counting.
- Const UseFibonnaciBetting = False
- Const AuditFileLocation = "C:\IBM\results.txt"
- Dim StandardDeck(51, 1), Decks(), BettingRamp(3, 1), CountValues(10)
- Dim HardStrategy(21, 10), SoftStrategy(21, 10), SplitStrategy(10, 10), Indexes(8, 4)
- Dim runningCount, deckPosition, simCount, bankRoll, betSize, wagers
- Dim handCards(4, 9), handData(4, 3), numHands, i, strDecision, lastHandWon, lastBet
- Dim lowBankRoll, highBankRoll, numHandsPlayed, j, startTime, endTime
- Dim f, x, s
- If Auditing Then Set f = CreateObject("Scripting.FileSystemObject").CreateTextFile(AuditFileLocation)
- ' Indexes:
- ' 0 = runningCount value
- ' 1 = hand value
- ' 2 = dealer face up card
- ' 3 = new strategy
- ' BettingRamp:
- ' 0 = runningCount value
- ' 1 = betSize at value
- ' handData:
- ' 0 = amount bet
- ' 1 = hand value
- ' 2 = soft hand indicator
- ' 3 = number of cards
- Initialize()
- InitializeDecks(NumDecks)
- For simCount = 1 To NumSims
- ShuffleDecks()
- If Auditing Then
- f.WriteLine "Shuffle " & simCount
- For x = 0 To UBound(Decks)
- f.WriteLine Decks(x, 0) & Decks(x, 1)
- Next
- f.WriteLine ""
- End If
- runningCount = InitialCount
- deckPosition = BurnCards
- betSize = 1
- Do Until deckPosition > Penetration
- Erase handCards
- Erase handData
- numHands = 1
- betSize = 1
- If UseBettingRamp Then
- For i = 0 To UBound(BettingRamp)
- If runningCount >= BettingRamp(i, 0) Then
- betSize = BettingRamp(i, 1)
- End If
- Next
- End If
- If LetItRide Then
- If lastHandWon = True And lastBet > betSize Then
- betSize = lastBet
- End If
- lastBet = betSize
- lastHandWon = False
- End If
- If Auditing Then f.WriteLine "New Hand, Count = " & runningCount & ", Bet = " & betSize & ", Bankroll = " & bankRoll
- handData(1, 0) = betSize
- handData(1, 3) = 2
- handData(0, 3) = 2
- ' Player's first card
- handCards(1, 0) = deckPosition
- If Decks(deckPosition, 0) = 1 Then
- handData(1, 1) = 11
- handData(1, 2) = 1
- Else
- handData(1, 1) = Decks(deckPosition, 0)
- End If
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- ' Dealer's first card
- handCards(0, 0) = deckPosition
- If Decks(deckPosition, 0) = 1 Then
- handData(0, 1) = 11
- handData(0, 2) = 1
- Else
- handData(0, 1) = Decks(deckPosition, 0)
- End If
- deckPosition = deckPosition + 1
- ' Player's second card
- handCards(1, 1) = deckPosition
- If Decks(deckPosition, 0) = 1 And handData(1, 1) + 11 <= 21 Then
- handData(1, 1) = handData(1, 1) + 11
- handData(1, 2) = 1
- Else
- handData(1, 1) = handData(1, 1) + Decks(deckPosition, 0)
- End If
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- ' Dealer's second card
- handCards(0, 1) = deckPosition
- If Decks(deckPosition, 0) = 1 And handData(0, 1) + 11 <= 21 Then
- handData(0, 1) = handData(0, 1) + 11
- handData(0, 2) = 1
- Else
- handData(0, 1) = handData(0, 1) + Decks(deckPosition, 0)
- End If
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- If Auditing Then
- f.WriteLine "Dealer Face Up Card: " & Decks(handCards(0, 1), 0) & Decks(handCards(0, 1), 1)
- f.WriteLine "Player's Cards: " & Decks(handCards(1, 0), 0) & Decks(handCards(1, 0), 1) & ", " & Decks(handCards(1, 1), 0) & Decks(handCards(1, 1), 1)
- f.WriteLine "New Count: " & runningCount
- End If
- If runningCount >= InsuranceCount And Decks(handCards(0, 1), 0) = 1 Then
- wagers = wagers + (handData(1, 0) / 2)
- If handData(0, 1) <> 21 Then
- bankRoll = bankRoll - (handData(1, 0) / 2)
- If Auditing Then f.WriteLine "Took Insurance, Dealer did not have 21, Bankroll = " & bankRoll
- Else
- bankRoll = bankRoll + (handData(1, 0) / 2) * 3
- If Auditing Then f.WriteLine "Took Insurance, Dealer had 21, Bankroll = " & bankRoll
- End If
- End If
- If handData(0, 1) = 21 Then
- If handData(1, 1) <> 21 Then
- bankRoll = bankRoll - handData(1, 0)
- If Auditing Then f.WriteLine "Hand Outcome: Dealer Blackjack, Bankroll = " & bankRoll
- End If
- ElseIf handData(1, 1) = 21 Then
- bankRoll = bankRoll + handData(1, 0) * BJPayoutAmount
- If Auditing Then f.WriteLine "Hand Outcome: Player Blackjack"
- lastHandWon = True
- ElseIf handData(1, 2) = 1 And Left(SoftStrategy(handData(1, 1), Decks(handCards(0, 1), 0)), 1) = "R" Then
- bankRoll = bankRoll - (handData(1, 0) / 2)
- If Auditing Then f.WriteLine "Hand Outcome: Surrender, Bankroll = " & bankRoll
- ElseIf handData(1, 2) <> 1 And Left(HardStrategy(handData(1, 1), Decks(handCards(0, 1), 0)), 1) = "R" Then
- bankRoll = bankRoll - (handData(1, 0) / 2)
- If Auditing Then f.WriteLine "Hand Outcome: Surrender, Bankroll = " & bankRoll
- ElseIf Decks(handCards(1, 0), 0) = Decks(handCards(1, 1), 0) And Left(SplitStrategy(Decks(handCards(1, 0), 0), Decks(handCards(0, 1), 0)), 1) = "R" Then
- bankRoll = bankRoll - (handData(1, 0) / 2)
- If Auditing Then f.WriteLine "Hand Outcome: Surrender, Bankroll = " & bankRoll
- Else
- ' Handle splits
- i = 1
- Do Until i > numHands
- If Decks(handCards(i, 0), 0) = Decks(handCards(i, 1), 0) And Right(SplitStrategy(Decks(handCards(1, 0), 0), Decks(handCards(0, 1), 0)), 1) = "P" And numHands < NumMaxSplits Then
- numHands = numHands + 1
- handData(numHands, 0) = handData(i, 0)
- handData(numHands, 2) = handData(i, 2)
- handData(numHands, 3) = 2
- handCards(numHands, 0) = handCards(i, 1)
- If Decks(handCards(i, 0), 0) = 1 Then
- handData(numHands, 1) = 11
- handData(i, 1) = 11
- Else
- handData(numHands, 1) = Decks(handCards(i, 0), 0)
- handData(i, 1) = Decks(handCards(i, 0), 0)
- End If
- ' Deal a card to each hand
- handCards(i, 1) = deckPosition
- If Decks(deckPosition, 0) = 1 And handData(i, 1) + 11 <= 21 Then
- handData(i, 1) = handData(i, 1) + 11
- handData(i, 2) = 1
- Else
- handData(i, 1) = handData(i, 1) + Decks(deckPosition, 0)
- End If
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- handCards(numHands, 1) = deckPosition
- If Decks(deckPosition, 0) = 1 And handData(numHands, 1) + 11 <= 21 Then
- handData(numHands, 1) = handData(numHands, 1) + 11
- handData(numHands, 2) = 1
- Else
- handData(numHands, 1) = handData(numHands, 1) + Decks(deckPosition, 0)
- End If
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- If CanResplitAces = False And Decks(handCards(1, 0), 0) = 1 Then
- i = 999
- End If
- Else
- i = i + 1
- End If
- Loop
- ' Player decisions
- For i = 1 To numHands
- strDecision = ""
- s = ""
- If numHands > 1 And CanHitSplitAces = False And Decks(handCards(1, 0), 0) = 1 Then
- strDecision = "S"
- End If
- Do Until strDecision = "S"
- If handData(i, 2) = 1 Then
- strDecision = SoftStrategy(handData(i, 1), Decks(handCards(0, 1), 0))
- Else
- strDecision = HardStrategy(handData(i, 1), Decks(handCards(0, 1), 0))
- End If
- ' Modify decision based on count indexes
- If UseIndexes Then
- For j = 0 To UBound(Indexes)
- If runningCount >= Indexes(j, 0) Then
- If handData(i, 1) = Indexes(j, 1) And Decks(handCards(0, 1), 0) = Indexes(j, 2) And handData(i, 2) <> 1 Then
- strDecision = Indexes(j, 3)
- End If
- End If
- Next
- End If
- s = s & strDecision & ", "
- Select Case strDecision
- Case "S"
- Case "RS"
- strDecision = "S"
- Case "H"
- ' deal a card
- handCards(i, handData(i, 3)) = deckPosition
- If Decks(deckPosition, 0) = 1 And (handData(i, 1) + 11) <= 21 Then
- handData(i, 1) = handData(i, 1) + 11
- handData(i, 2) = 1
- ElseIf handData(i, 2) = 1 And (handData(i, 1) + Decks(deckPosition, 0)) > 21 Then
- handData(i, 2) = 0
- handData(i, 1) = handData(i, 1) - 10 + Decks(deckPosition, 0)
- Else
- handData(i, 1) = handData(i, 1) + Decks(deckPosition, 0)
- End If
- handData(i, 3) = handData(i, 3) + 1
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- ' check for bust
- If handData(i, 1) > 21 Then
- strDecision = "S"
- End If
- Case "RH"
- ' deal a card
- handCards(i, handData(i, 3)) = deckPosition
- If Decks(deckPosition, 0) = 1 And (handData(i, 1) + 11) <= 21 Then
- handData(i, 1) = handData(i, 1) + 11
- handData(i, 2) = 1
- ElseIf handData(i, 2) = 1 And (handData(i, 1) + Decks(deckPosition, 0)) > 21 Then
- handData(i, 2) = 0
- handData(i, 1) = handData(i, 1) - 10 + Decks(deckPosition, 0)
- Else
- handData(i, 1) = handData(i, 1) + Decks(deckPosition, 0)
- End If
- handData(i, 3) = handData(i, 3) + 1
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- ' check for bust
- If handData(i, 1) > 21 Then
- strDecision = "S"
- End If
- Case "DH"
- If handData(i, 3) = 2 And (numHands = 1 Or AllowDoubleAfterSplit = True) Then
- handData(i, 0) = handData(i, 0) * 2
- strDecision = "S"
- s = s & "Doubled, "
- End If
- ' deal a card
- handCards(i, handData(i, 3)) = deckPosition
- If Decks(deckPosition, 0) = 1 And (handData(i, 1) + 11) <= 21 Then
- handData(i, 1) = handData(i, 1) + 11
- handData(i, 2) = 1
- ElseIf handData(i, 2) = 1 And (handData(i, 1) + Decks(deckPosition, 0)) > 21 Then
- handData(i, 2) = 0
- handData(i, 1) = handData(i, 1) - 10 + Decks(deckPosition, 0)
- Else
- handData(i, 1) = handData(i, 1) + Decks(deckPosition, 0)
- End If
- handData(i, 3) = handData(i, 3) + 1
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- 'check for bust
- If handData(i, 1) > 21 Then
- strDecision = "S"
- End If
- Case "DS"
- strDecision = "S"
- If handData(i, 3) = 2 And (numHands = 1 Or AllowDoubleAfterSplit = True) Then
- handData(i, 0) = handData(i, 0) * 2
- s = s & "Doubled, "
- ' deal a card
- handCards(i, handData(i, 3)) = deckPosition
- If Decks(deckPosition, 0) = 1 And (handData(i, 1) + 11) <= 21 Then
- handData(i, 1) = handData(i, 1) + 11
- handData(i, 2) = 1
- ElseIf handData(i, 2) = 1 And (handData(i, 1) + Decks(deckPosition, 0)) > 21 Then
- handData(i, 2) = 0
- handData(i, 1) = handData(i, 1) - 10 + Decks(deckPosition, 0)
- Else
- handData(i, 1) = handData(i, 1) + Decks(deckPosition, 0)
- End If
- handData(i, 3) = handData(i, 3) + 1
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- End If
- Case Else
- WScript.Echo handData(i, 1) & vbcrlf & Decks(handCards(0, 1), 0) & vbcrlf & handData(i, 2) & vbcrlf & i & _
- SoftStrategy(handData(i, 1), Decks(handCards(0, 1), 0)) & vbcrlf & HardStrategy(handData(i, 1), Decks(handCards(0, 1), 0)) & vbcrlf & _
- Decks(handCards(i, 0), 0) & "," & Decks(handCards(i, 1), 0) & vbcrlf & handData(i, 3)
- End Select
- Loop
- If Auditing Then f.WriteLine "Hand " & i & " Decisions: " & s
- Next
- ' dealer decisions
- strDecision = ""
- Do Until strDecision = "S"
- If handData(0, 1) < 17 Or (handData(0, 1) = 17 And handData(0, 2) = 1 And DealerHitSoft17 = True) Then
- ' deal a card
- handCards(0, handData(0, 3)) = deckPosition
- If Decks(deckPosition, 0) = 1 And (handData(0, 1) + 11) <= 21 Then
- handData(0, 1) = handData(0, 1) + 11
- handData(0, 2) = 1
- ElseIf handData(0, 2) = 1 And (handData(0, 1) + Decks(deckPosition, 0)) > 21 Then
- handData(0, 2) = 0
- handData(0, 1) = handData(0, 1) - 10 + Decks(deckPosition, 0)
- Else
- handData(0, 1) = handData(0, 1) + Decks(deckPosition, 0)
- End If
- handData(0, 3) = handData(0, 3) + 1
- runningCount = runningCount + CountValues(Decks(deckPosition, 0))
- deckPosition = deckPosition + 1
- Else
- strDecision = "S"
- End If
- Loop
- ' hand outcomes
- For i = 1 To NumHands
- If Auditing Then
- f.WriteLine "Hand " & i & " Bet = " & handData(i, 0) & ", Value = " & handData(i, 1) & ", Soft Hand = " & handData(i, 2) & ", Number of Cards = " & handData(i, 3)
- s = ""
- For x = 0 To handData(i, 3) - 1
- s = s & Decks(handCards(i, x), 0) & Decks(handCards(i, x), 1) & ", "
- Next
- f.WriteLine "Hand " & i & " Final Cards: " & s
- End If
- wagers = wagers + handData(i, 0)
- If handData(i, 1) > 21 Then
- ' player bust
- bankRoll = bankRoll - handData(i, 0)
- If Auditing Then f.WriteLine "Hand Outcome: Player Bust"
- ElseIf handData(0, 1) > 21 Then
- ' dealer bust
- bankRoll = bankRoll + handData(i, 0)
- lastHandWon = True
- If Auditing Then f.WriteLine "Hand Outcome: Dealer Bust"
- ElseIf handData(i, 1) < handData(0, 1) Then
- ' dealer wins
- bankRoll = bankRoll - handData(i, 0)
- If Auditing Then f.WriteLine "Hand Outcome: Dealer Wins"
- ElseIf handData(i, 1) > handData(0, 1) Then
- ' player wins
- bankRoll = bankRoll + handData(i, 0)
- lastHandWon = True
- If Auditing Then f.WriteLine "Hand Outcome: Player Wins"
- ElseIf handData(i, 1) = handData(0, 1) Then
- If Auditing Then f.WriteLine "Hand Outcome: Push"
- Else
- WScript.Echo "Hand Outcome Error"
- End If
- Next
- End If
- runningCount = runningCount + CountValues(Decks(handCards(0, 0), 0))
- numHandsPlayed = numHandsPlayed + numHands
- If bankRoll < lowBankRoll Then lowBankRoll = bankRoll
- If bankRoll > highBankRoll Then highBankRoll = bankRoll
- If Auditing Then
- f.WriteLine "Dealer's Value = " & handData(0, 1) & ", Soft Hand = " & handData(0, 2) & ", Number of Cards = " & handData(0, 3)
- s = ""
- For i = 0 To handData(0, 3) - 1
- s = s & Decks(handCards(0, i), 0) & Decks(handCards(0, i), 1) & ", "
- Next
- f.WriteLine "Dealer's Final Cards: " & s
- f.WriteLine "Ending Count = " & runningCount & ", Bankroll = " & bankRoll
- f.WriteLine ""
- End If
- Loop
- Next
- endTime = Now()
- WScript.Echo _
- "Started: " & startTime & vbcrlf & _
- "Lowest Bank Roll: " & lowBankRoll & vbcrlf & _
- "Highest Bank Roll: " & highBankRoll & vbcrlf & _
- "Ending Bank Roll: " & bankRoll & vbcrlf & _
- "Total Hands Played: " & numHandsPlayed & vbcrlf & _
- "Total Wagers: " & wagers & vbcrlf & _
- "Average Wager: " & Round(wagers / numHandsPlayed, 2) & vbcrlf & _
- "Advantage: " & Round(bankRoll / wagers * 100, 4) & vbcrlf & _
- "Ended: " & endTime & vbcrlf & _
- "Elapsed Time in Minutes: " & DateDiff("n", startTime, endTime)
- Sub InitializeDecks(numOfDecks)
- Dim i, j
- Redim Decks(52 * numOfDecks - 1, 1)
- For i = 1 To numOfDecks
- For j = 0 To 51
- Decks((i - 1) * 52 + j, 0) = StandardDeck(j, 0)
- Decks((i - 1) * 52 + j, 1) = StandardDeck(j, 1)
- Next
- Next
- End Sub
- Sub ShuffleDecks()
- Dim i, j, value, suit, x
- Randomize
- ' Fisher Yates Shuffling Algorithm
- x = UBound(Decks) - 1
- For i = 0 To x
- j = Int(Rnd() * (x - i + 2)) + i
- value = Decks(j, 0)
- suit = Decks(j, 1)
- Decks(j, 0) = Decks(i, 0)
- Decks(j, 1) = Decks(i, 1)
- Decks(i, 0) = value
- Decks(i, 1) = suit
- Next
- End Sub
- Sub Initialize()
- startTime = Now()
- bankRoll = 0
- wagers = 0
- lowBankRoll = 0
- highBankRoll = 0
- numHandsPlayed = 0
- CountValues(2) = 1
- CountValues(3) = 1
- CountValues(4) = 1
- CountValues(5) = 1
- CountValues(6) = 1
- CountValues(7) = 1
- CountValues(8) = 0
- CountValues(9) = 0
- CountValues(10) = -1
- CountValues(1) = -1
- BettingRamp(0, 0) = 1
- BettingRamp(0, 1) = 2
- BettingRamp(1, 0) = 2
- BettingRamp(1, 1) = 3
- BettingRamp(2, 0) = 3
- BettingRamp(2, 1) = 5
- BettingRamp(3, 0) = 4
- BettingRamp(3, 1) = 6
- Indexes(0, 0) = 0
- Indexes(0, 1) = 16
- Indexes(0, 2) = 10
- Indexes(0, 3) = "S"
- Indexes(1, 0) = 4
- Indexes(1, 1) = 15
- Indexes(1, 2) = 10
- Indexes(1, 3) = "S"
- Indexes(2, 0) = 4
- Indexes(2, 1) = 12
- Indexes(2, 2) = 2
- Indexes(2, 3) = "S"
- Indexes(3, 0) = 4
- Indexes(3, 1) = 12
- Indexes(3, 2) = 3
- Indexes(3, 3) = "S"
- Indexes(4, 0) = 4
- Indexes(4, 1) = 9
- Indexes(4, 2) = 7
- Indexes(4, 3) = "DH"
- Indexes(5, 0) = 4
- Indexes(5, 1) = 8
- Indexes(5, 2) = 6
- Indexes(5, 3) = "DH"
- Indexes(6, 0) = 4
- Indexes(6, 1) = 8
- Indexes(6, 2) = 5
- Indexes(6, 3) = "DH"
- Indexes(7, 0) = 4
- Indexes(7, 1) = 10
- Indexes(7, 2) = 10
- Indexes(7, 3) = "DH"
- Indexes(8, 0) = 4
- Indexes(8, 1) = 10
- Indexes(8, 2) = 1
- Indexes(8, 3) = "DH"
- StandardDeck(0, 0) = 1
- StandardDeck(0, 1) = "Ace of Diamonds"
- StandardDeck(1, 0) = 2
- StandardDeck(1, 1) = " of Diamonds"
- StandardDeck(2, 0) = 3
- StandardDeck(2, 1) = " of Diamonds"
- StandardDeck(3, 0) = 4
- StandardDeck(3, 1) = " of Diamonds"
- StandardDeck(4, 0) = 5
- StandardDeck(4, 1) = " of Diamonds"
- StandardDeck(5, 0) = 6
- StandardDeck(5, 1) = " of Diamonds"
- StandardDeck(6, 0) = 7
- StandardDeck(6, 1) = " of Diamonds"
- StandardDeck(7, 0) = 8
- StandardDeck(7, 1) = " of Diamonds"
- StandardDeck(8, 0) = 9
- StandardDeck(8, 1) = " of Diamonds"
- StandardDeck(9, 0) = 10
- StandardDeck(9, 1) = "Ten of Diamonds"
- StandardDeck(10, 0) = 10
- StandardDeck(10, 1) = "Jack of Diamonds"
- StandardDeck(11, 0) = 10
- StandardDeck(11, 1) = "Queen of Diamonds"
- StandardDeck(12, 0) = 10
- StandardDeck(12, 1) = "King of Diamonds"
- StandardDeck(13, 0) = 1
- StandardDeck(13, 1) = "Ace of Clubs"
- StandardDeck(14, 0) = 2
- StandardDeck(14, 1) = " of Clubs"
- StandardDeck(15, 0) = 3
- StandardDeck(15, 1) = " of Clubs"
- StandardDeck(16, 0) = 4
- StandardDeck(16, 1) = " of Clubs"
- StandardDeck(17, 0) = 5
- StandardDeck(17, 1) = " of Clubs"
- StandardDeck(18, 0) = 6
- StandardDeck(18, 1) = " of Clubs"
- StandardDeck(19, 0) = 7
- StandardDeck(19, 1) = " of Clubs"
- StandardDeck(20, 0) = 8
- StandardDeck(20, 1) = " of Clubs"
- StandardDeck(21, 0) = 9
- StandardDeck(21, 1) = " of Clubs"
- StandardDeck(22, 0) = 10
- StandardDeck(22, 1) = "Ten of Clubs"
- StandardDeck(23, 0) = 10
- StandardDeck(23, 1) = "Jack of Clubs"
- StandardDeck(24, 0) = 10
- StandardDeck(24, 1) = "Queen of Clubs"
- StandardDeck(25, 0) = 10
- StandardDeck(25, 1) = "King of Clubs"
- StandardDeck(26, 0) = 1
- StandardDeck(26, 1) = "Ace of Hearts"
- StandardDeck(27, 0) = 2
- StandardDeck(27, 1) = " of Hearts"
- StandardDeck(28, 0) = 3
- StandardDeck(28, 1) = " of Hearts"
- StandardDeck(29, 0) = 4
- StandardDeck(29, 1) = " of Hearts"
- StandardDeck(30, 0) = 5
- StandardDeck(30, 1) = " of Hearts"
- StandardDeck(31, 0) = 6
- StandardDeck(31, 1) = " of Hearts"
- StandardDeck(32, 0) = 7
- StandardDeck(32, 1) = " of Hearts"
- StandardDeck(33, 0) = 8
- StandardDeck(33, 1) = " of Hearts"
- StandardDeck(34, 0) = 9
- StandardDeck(34, 1) = " of Hearts"
- StandardDeck(35, 0) = 10
- StandardDeck(35, 1) = "Ten of Hearts"
- StandardDeck(36, 0) = 10
- StandardDeck(36, 1) = "Jack of Hearts"
- StandardDeck(37, 0) = 10
- StandardDeck(37, 1) = "Queen of Hearts"
- StandardDeck(38, 0) = 10
- StandardDeck(38, 1) = "King of Hearts"
- StandardDeck(39, 0) = 1
- StandardDeck(39, 1) = "Ace of Spades"
- StandardDeck(40, 0) = 2
- StandardDeck(40, 1) = " of Spades"
- StandardDeck(41, 0) = 3
- StandardDeck(41, 1) = " of Spades"
- StandardDeck(42, 0) = 4
- StandardDeck(42, 1) = " of Spades"
- StandardDeck(43, 0) = 5
- StandardDeck(43, 1) = " of Spades"
- StandardDeck(44, 0) = 6
- StandardDeck(44, 1) = " of Spades"
- StandardDeck(45, 0) = 7
- StandardDeck(45, 1) = " of Spades"
- StandardDeck(46, 0) = 8
- StandardDeck(46, 1) = " of Spades"
- StandardDeck(47, 0) = 9
- StandardDeck(47, 1) = " of Spades"
- StandardDeck(48, 0) = 10
- StandardDeck(48, 1) = "Ten of Spades"
- StandardDeck(49, 0) = 10
- StandardDeck(49, 1) = "Jack of Spades"
- StandardDeck(50, 0) = 10
- StandardDeck(50, 1) = "Queen of Spades"
- StandardDeck(51, 0) = 10
- StandardDeck(51, 1) = "King of Spades"
- HardStrategy(2, 2) = "H"
- HardStrategy(2, 3) = "H"
- HardStrategy(2, 4) = "H"
- HardStrategy(2, 5) = "H"
- HardStrategy(2, 6) = "H"
- HardStrategy(2, 7) = "H"
- HardStrategy(2, 8) = "H"
- HardStrategy(2, 9) = "H"
- HardStrategy(2, 10) = "H"
- HardStrategy(2, 1) = "H"
- HardStrategy(4, 2) = "H"
- HardStrategy(4, 3) = "H"
- HardStrategy(4, 4) = "H"
- HardStrategy(4, 5) = "H"
- HardStrategy(4, 6) = "H"
- HardStrategy(4, 7) = "H"
- HardStrategy(4, 8) = "H"
- HardStrategy(4, 9) = "H"
- HardStrategy(4, 10) = "H"
- HardStrategy(4, 1) = "H"
- HardStrategy(5, 2) = "H"
- HardStrategy(5, 3) = "H"
- HardStrategy(5, 4) = "H"
- HardStrategy(5, 5) = "H"
- HardStrategy(5, 6) = "H"
- HardStrategy(5, 7) = "H"
- HardStrategy(5, 8) = "H"
- HardStrategy(5, 9) = "H"
- HardStrategy(5, 10) = "H"
- HardStrategy(5, 1) = "H"
- HardStrategy(6, 2) = "H"
- HardStrategy(6, 3) = "H"
- HardStrategy(6, 4) = "H"
- HardStrategy(6, 5) = "H"
- HardStrategy(6, 6) = "H"
- HardStrategy(6, 7) = "H"
- HardStrategy(6, 8) = "H"
- HardStrategy(6, 9) = "H"
- HardStrategy(6, 10) = "H"
- HardStrategy(6, 1) = "H"
- HardStrategy(7, 2) = "H"
- HardStrategy(7, 3) = "H"
- HardStrategy(7, 4) = "H"
- HardStrategy(7, 5) = "H"
- HardStrategy(7, 6) = "H"
- HardStrategy(7, 7) = "H"
- HardStrategy(7, 8) = "H"
- HardStrategy(7, 9) = "H"
- HardStrategy(7, 10) = "H"
- HardStrategy(7, 1) = "H"
- HardStrategy(8, 2) = "H"
- HardStrategy(8, 3) = "H"
- HardStrategy(8, 4) = "H"
- HardStrategy(8, 5) = "H"
- HardStrategy(8, 6) = "H"
- HardStrategy(8, 7) = "H"
- HardStrategy(8, 8) = "H"
- HardStrategy(8, 9) = "H"
- HardStrategy(8, 10) = "H"
- HardStrategy(8, 1) = "H"
- HardStrategy(9, 2) = "DH"
- HardStrategy(9, 3) = "DH"
- HardStrategy(9, 4) = "DH"
- HardStrategy(9, 5) = "DH"
- HardStrategy(9, 6) = "DH"
- HardStrategy(9, 7) = "H"
- HardStrategy(9, 8) = "H"
- HardStrategy(9, 9) = "H"
- HardStrategy(9, 10) = "H"
- HardStrategy(9, 1) = "H"
- HardStrategy(10, 2) = "DH"
- HardStrategy(10, 3) = "DH"
- HardStrategy(10, 4) = "DH"
- HardStrategy(10, 5) = "DH"
- HardStrategy(10, 6) = "DH"
- HardStrategy(10, 7) = "DH"
- HardStrategy(10, 8) = "DH"
- HardStrategy(10, 9) = "DH"
- HardStrategy(10, 10) = "H"
- HardStrategy(10, 1) = "H"
- HardStrategy(11, 2) = "DH"
- HardStrategy(11, 3) = "DH"
- HardStrategy(11, 4) = "DH"
- HardStrategy(11, 5) = "DH"
- HardStrategy(11, 6) = "DH"
- HardStrategy(11, 7) = "DH"
- HardStrategy(11, 8) = "DH"
- HardStrategy(11, 9) = "DH"
- HardStrategy(11, 10) = "DH"
- HardStrategy(11, 1) = "DH"
- HardStrategy(12, 2) = "H"
- HardStrategy(12, 3) = "H"
- HardStrategy(12, 4) = "S"
- HardStrategy(12, 5) = "S"
- HardStrategy(12, 6) = "S"
- HardStrategy(12, 7) = "H"
- HardStrategy(12, 8) = "H"
- HardStrategy(12, 9) = "H"
- HardStrategy(12, 10) = "H"
- HardStrategy(12, 1) = "H"
- HardStrategy(13, 2) = "S"
- HardStrategy(13, 3) = "S"
- HardStrategy(13, 4) = "S"
- HardStrategy(13, 5) = "S"
- HardStrategy(13, 6) = "S"
- HardStrategy(13, 7) = "H"
- HardStrategy(13, 8) = "H"
- HardStrategy(13, 9) = "H"
- HardStrategy(13, 10) = "H"
- HardStrategy(13, 1) = "H"
- HardStrategy(14, 2) = "S"
- HardStrategy(14, 3) = "S"
- HardStrategy(14, 4) = "S"
- HardStrategy(14, 5) = "S"
- HardStrategy(14, 6) = "S"
- HardStrategy(14, 7) = "H"
- HardStrategy(14, 8) = "H"
- HardStrategy(14, 9) = "H"
- HardStrategy(14, 10) = "H"
- HardStrategy(14, 1) = "H"
- HardStrategy(15, 2) = "S"
- HardStrategy(15, 3) = "S"
- HardStrategy(15, 4) = "S"
- HardStrategy(15, 5) = "S"
- HardStrategy(15, 6) = "S"
- HardStrategy(15, 7) = "H"
- HardStrategy(15, 8) = "H"
- HardStrategy(15, 9) = "H"
- HardStrategy(15, 10) = "RH"
- HardStrategy(15, 1) = "RH"
- HardStrategy(16, 2) = "S"
- HardStrategy(16, 3) = "S"
- HardStrategy(16, 4) = "S"
- HardStrategy(16, 5) = "S"
- HardStrategy(16, 6) = "S"
- HardStrategy(16, 7) = "H"
- HardStrategy(16, 8) = "H"
- HardStrategy(16, 9) = "H"
- HardStrategy(16, 10) = "RH"
- HardStrategy(16, 1) = "RH"
- HardStrategy(17, 2) = "S"
- HardStrategy(17, 3) = "S"
- HardStrategy(17, 4) = "S"
- HardStrategy(17, 5) = "S"
- HardStrategy(17, 6) = "S"
- HardStrategy(17, 7) = "S"
- HardStrategy(17, 8) = "S"
- HardStrategy(17, 9) = "S"
- HardStrategy(17, 10) = "S"
- HardStrategy(17, 1) = "RS"
- HardStrategy(18, 2) = "S"
- HardStrategy(18, 3) = "S"
- HardStrategy(18, 4) = "S"
- HardStrategy(18, 5) = "S"
- HardStrategy(18, 6) = "S"
- HardStrategy(18, 7) = "S"
- HardStrategy(18, 8) = "S"
- HardStrategy(18, 9) = "S"
- HardStrategy(18, 10) = "S"
- HardStrategy(18, 1) = "S"
- HardStrategy(19, 2) = "S"
- HardStrategy(19, 3) = "S"
- HardStrategy(19, 4) = "S"
- HardStrategy(19, 5) = "S"
- HardStrategy(19, 6) = "S"
- HardStrategy(19, 7) = "S"
- HardStrategy(19, 8) = "S"
- HardStrategy(19, 9) = "S"
- HardStrategy(19, 10) = "S"
- HardStrategy(19, 1) = "S"
- HardStrategy(20, 2) = "S"
- HardStrategy(20, 3) = "S"
- HardStrategy(20, 4) = "S"
- HardStrategy(20, 5) = "S"
- HardStrategy(20, 6) = "S"
- HardStrategy(20, 7) = "S"
- HardStrategy(20, 8) = "S"
- HardStrategy(20, 9) = "S"
- HardStrategy(20, 10) = "S"
- HardStrategy(20, 1) = "S"
- HardStrategy(21, 2) = "S"
- HardStrategy(21, 3) = "S"
- HardStrategy(21, 4) = "S"
- HardStrategy(21, 5) = "S"
- HardStrategy(21, 6) = "S"
- HardStrategy(21, 7) = "S"
- HardStrategy(21, 8) = "S"
- HardStrategy(21, 9) = "S"
- HardStrategy(21, 10) = "S"
- HardStrategy(21, 1) = "S"
- SoftStrategy(12, 2) = "H"
- SoftStrategy(12, 3) = "H"
- SoftStrategy(12, 4) = "H"
- SoftStrategy(12, 5) = "H"
- SoftStrategy(12, 6) = "H"
- SoftStrategy(12, 7) = "H"
- SoftStrategy(12, 8) = "H"
- SoftStrategy(12, 9) = "H"
- SoftStrategy(12, 10) = "H"
- SoftStrategy(12, 1) = "H"
- SoftStrategy(13, 2) = "H"
- SoftStrategy(13, 3) = "H"
- SoftStrategy(13, 4) = "H"
- SoftStrategy(13, 5) = "DH"
- SoftStrategy(13, 6) = "DH"
- SoftStrategy(13, 7) = "H"
- SoftStrategy(13, 8) = "H"
- SoftStrategy(13, 9) = "H"
- SoftStrategy(13, 10) = "H"
- SoftStrategy(13, 1) = "H"
- SoftStrategy(14, 2) = "H"
- SoftStrategy(14, 3) = "H"
- SoftStrategy(14, 4) = "DH"
- SoftStrategy(14, 5) = "DH"
- SoftStrategy(14, 6) = "DH"
- SoftStrategy(14, 7) = "H"
- SoftStrategy(14, 8) = "H"
- SoftStrategy(14, 9) = "H"
- SoftStrategy(14, 10) = "H"
- SoftStrategy(14, 1) = "H"
- SoftStrategy(15, 2) = "H"
- SoftStrategy(15, 3) = "H"
- SoftStrategy(15, 4) = "DH"
- SoftStrategy(15, 5) = "DH"
- SoftStrategy(15, 6) = "DH"
- SoftStrategy(15, 7) = "H"
- SoftStrategy(15, 8) = "H"
- SoftStrategy(15, 9) = "H"
- SoftStrategy(15, 10) = "H"
- SoftStrategy(15, 1) = "H"
- SoftStrategy(16, 2) = "H"
- SoftStrategy(16, 3) = "H"
- SoftStrategy(16, 4) = "DH"
- SoftStrategy(16, 5) = "DH"
- SoftStrategy(16, 6) = "DH"
- SoftStrategy(16, 7) = "H"
- SoftStrategy(16, 8) = "H"
- SoftStrategy(16, 9) = "H"
- SoftStrategy(16, 10) = "H"
- SoftStrategy(16, 1) = "H"
- SoftStrategy(17, 2) = "H"
- SoftStrategy(17, 3) = "DH"
- SoftStrategy(17, 4) = "DH"
- SoftStrategy(17, 5) = "DH"
- SoftStrategy(17, 6) = "DH"
- SoftStrategy(17, 7) = "H"
- SoftStrategy(17, 8) = "H"
- SoftStrategy(17, 9) = "H"
- SoftStrategy(17, 10) = "H"
- SoftStrategy(17, 1) = "H"
- SoftStrategy(18, 2) = "DS"
- SoftStrategy(18, 3) = "DS"
- SoftStrategy(18, 4) = "DS"
- SoftStrategy(18, 5) = "DS"
- SoftStrategy(18, 6) = "DS"
- SoftStrategy(18, 7) = "S"
- SoftStrategy(18, 8) = "S"
- SoftStrategy(18, 9) = "H"
- SoftStrategy(18, 10) = "H"
- SoftStrategy(18, 1) = "H"
- SoftStrategy(19, 2) = "S"
- SoftStrategy(19, 3) = "S"
- SoftStrategy(19, 4) = "S"
- SoftStrategy(19, 5) = "S"
- SoftStrategy(19, 6) = "DS"
- SoftStrategy(19, 7) = "S"
- SoftStrategy(19, 8) = "S"
- SoftStrategy(19, 9) = "S"
- SoftStrategy(19, 10) = "S"
- SoftStrategy(19, 1) = "S"
- SoftStrategy(20, 2) = "S"
- SoftStrategy(20, 3) = "S"
- SoftStrategy(20, 4) = "S"
- SoftStrategy(20, 5) = "S"
- SoftStrategy(20, 6) = "S"
- SoftStrategy(20, 7) = "S"
- SoftStrategy(20, 8) = "S"
- SoftStrategy(20, 9) = "S"
- SoftStrategy(20, 10) = "S"
- SoftStrategy(20, 1) = "S"
- SoftStrategy(21, 2) = "S"
- SoftStrategy(21, 3) = "S"
- SoftStrategy(21, 4) = "S"
- SoftStrategy(21, 5) = "S"
- SoftStrategy(21, 6) = "S"
- SoftStrategy(21, 7) = "S"
- SoftStrategy(21, 8) = "S"
- SoftStrategy(21, 9) = "S"
- SoftStrategy(21, 10) = "S"
- SoftStrategy(21, 1) = "S"
- SplitStrategy(2, 2) = "H"
- SplitStrategy(2, 3) = "H"
- SplitStrategy(2, 4) = "P"
- SplitStrategy(2, 5) = "P"
- SplitStrategy(2, 6) = "P"
- SplitStrategy(2, 7) = "P"
- SplitStrategy(2, 8) = "H"
- SplitStrategy(2, 9) = "H"
- SplitStrategy(2, 10) = "H"
- SplitStrategy(2, 1) = "H"
- SplitStrategy(3, 2) = "H"
- SplitStrategy(3, 3) = "H"
- SplitStrategy(3, 4) = "P"
- SplitStrategy(3, 5) = "P"
- SplitStrategy(3, 6) = "P"
- SplitStrategy(3, 7) = "P"
- SplitStrategy(3, 8) = "H"
- SplitStrategy(3, 9) = "H"
- SplitStrategy(3, 10) = "H"
- SplitStrategy(3, 1) = "H"
- SplitStrategy(4, 2) = "H"
- SplitStrategy(4, 3) = "H"
- SplitStrategy(4, 4) = "H"
- SplitStrategy(4, 5) = "H"
- SplitStrategy(4, 6) = "H"
- SplitStrategy(4, 7) = "H"
- SplitStrategy(4, 8) = "H"
- SplitStrategy(4, 9) = "H"
- SplitStrategy(4, 10) = "H"
- SplitStrategy(4, 1) = "H"
- SplitStrategy(5, 2) = "DH"
- SplitStrategy(5, 3) = "DH"
- SplitStrategy(5, 4) = "DH"
- SplitStrategy(5, 5) = "DH"
- SplitStrategy(5, 6) = "DH"
- SplitStrategy(5, 7) = "DH"
- SplitStrategy(5, 8) = "DH"
- SplitStrategy(5, 9) = "DH"
- SplitStrategy(5, 10) = "H"
- SplitStrategy(5, 1) = "H"
- SplitStrategy(6, 2) = "P"
- SplitStrategy(6, 3) = "P"
- SplitStrategy(6, 4) = "P"
- SplitStrategy(6, 5) = "P"
- SplitStrategy(6, 6) = "P"
- SplitStrategy(6, 7) = "H"
- SplitStrategy(6, 8) = "H"
- SplitStrategy(6, 9) = "H"
- SplitStrategy(6, 10) = "H"
- SplitStrategy(6, 1) = "H"
- SplitStrategy(7, 2) = "P"
- SplitStrategy(7, 3) = "P"
- SplitStrategy(7, 4) = "P"
- SplitStrategy(7, 5) = "P"
- SplitStrategy(7, 6) = "P"
- SplitStrategy(7, 7) = "P"
- SplitStrategy(7, 8) = "H"
- SplitStrategy(7, 9) = "H"
- SplitStrategy(7, 10) = "H"
- SplitStrategy(7, 1) = "H"
- SplitStrategy(8, 2) = "P"
- SplitStrategy(8, 3) = "P"
- SplitStrategy(8, 4) = "P"
- SplitStrategy(8, 5) = "P"
- SplitStrategy(8, 6) = "P"
- SplitStrategy(8, 7) = "P"
- SplitStrategy(8, 8) = "P"
- SplitStrategy(8, 9) = "P"
- SplitStrategy(8, 10) = "P"
- SplitStrategy(8, 1) = "RP"
- SplitStrategy(9, 2) = "P"
- SplitStrategy(9, 3) = "P"
- SplitStrategy(9, 4) = "P"
- SplitStrategy(9, 5) = "P"
- SplitStrategy(9, 6) = "P"
- SplitStrategy(9, 7) = "S"
- SplitStrategy(9, 8) = "P"
- SplitStrategy(9, 9) = "P"
- SplitStrategy(9, 10) = "S"
- SplitStrategy(9, 1) = "S"
- SplitStrategy(10, 2) = "S"
- SplitStrategy(10, 3) = "S"
- SplitStrategy(10, 4) = "S"
- SplitStrategy(10, 5) = "S"
- SplitStrategy(10, 6) = "S"
- SplitStrategy(10, 7) = "S"
- SplitStrategy(10, 8) = "S"
- SplitStrategy(10, 9) = "S"
- SplitStrategy(10, 10) = "S"
- SplitStrategy(10, 1) = "S"
- SplitStrategy(1, 2) = "P"
- SplitStrategy(1, 3) = "P"
- SplitStrategy(1, 4) = "P"
- SplitStrategy(1, 5) = "P"
- SplitStrategy(1, 6) = "P"
- SplitStrategy(1, 7) = "P"
- SplitStrategy(1, 8) = "P"
- SplitStrategy(1, 9) = "P"
- SplitStrategy(1, 10) = "P"
- SplitStrategy(1, 1) = "P"
- End Sub