Blackjack Dim CardName(52) As String Dim Suit(52) As PictureBox
Description
Blackjack Dim CardName(52) As String Dim Suit(52) As PictureBox
Document Sample


Blackjack
Dim CardName(52) As String
Dim Suit(52) As PictureBox
Dim Value(52) As Integer
Dim Winnings As Integer, CurrentCard As Integer
Dim AcesDealer As Integer, AcesPlayer As Integer
Dim ScoreDealer As Integer, ScorePlayer As Integer
Dim NoCardsDealer As Integer, NoCardsPlayer As Integer
Private Sub frmBlackjack_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
Randomize()
Call Shuffle()
Call NewHand()
End Sub
Sub AddDealer()
'adds a card to dealer hand
NoCardsDealer += 1
Select Case NoCardsDealer
Case 1
picDealer1.Image = Suit(CurrentCard).Image
lblDealer1.Text = CardName(CurrentCard)
pnlDealer1.Visible = True
Case 2
picDealer2.Image = Suit(CurrentCard).Image
lblDealer2.Text = CardName(CurrentCard)
pnlDealer2.Visible = True
Case 3
picDealer3.Image = Suit(CurrentCard).Image
lblDealer3.Text = CardName(CurrentCard)
pnlDealer3.Visible = True
Case 4
picDealer4.Image = Suit(CurrentCard).Image
lblDealer4.Text = CardName(CurrentCard)
pnlDealer4.Visible = True
Case 5
picDealer5.Image = Suit(CurrentCard).Image
lblDealer5.Text = CardName(CurrentCard)
pnlDealer5.Visible = True
Case 6
picDealer6.Image = Suit(CurrentCard).Image
lblDealer6.Text = CardName(CurrentCard)
pnlDealer6.Visible = True
End Select
ScoreDealer = ScoreDealer + Value(CurrentCard)
If Value(CurrentCard) = 1 Then
AcesDealer += 1
End If
CurrentCard += 1
End Sub
Sub AddPlayer()
'adds a card to player hand
NoCardsPlayer += 1
Select Case NoCardsPlayer
Case 1
picPlayer1.Image = Suit(CurrentCard).Image
lblPlayer1.Text = CardName(CurrentCard)
pnlPlayer1.Visible = True
Case 2
picPlayer2.Image = Suit(CurrentCard).Image
lblPlayer2.Text = CardName(CurrentCard)
pnlPlayer2.Visible = True
Case 3
picPlayer3.Image = Suit(CurrentCard).Image
lblPlayer3.Text = CardName(CurrentCard)
pnlPlayer3.Visible = True
Case 4
picPlayer4.Image = Suit(CurrentCard).Image
lblPlayer4.Text = CardName(CurrentCard)
pnlPlayer4.Visible = True
Case 5
picPlayer5.Image = Suit(CurrentCard).Image
lblPlayer5.Text = CardName(CurrentCard)
pnlPlayer5.Visible = True
Case 6
picPlayer6.Image = Suit(CurrentCard).Image
lblPlayer6.Text = CardName(CurrentCard)
pnlPlayer6.Visible = True
End Select
ScorePlayer = ScorePlayer + Value(CurrentCard)
If Value(CurrentCard) = 1 Then
AcesPlayer += 1
End If
CurrentCard += 1
End Sub
Sub EndHand(ByVal Msg As String, ByVal Change As Integer)
pnlBack.Visible = False
lblResult.Text = Msg
'hand has ended - update winnings
Winnings = Winnings + Change
lblWinnings.Text = Str$(Winnings)
cmdTwist.Enabled = False
cmdStick.Enabled = False
cmdDeal.Enabled = True
End Sub
Sub NewHand()
Dim I As Integer
'clear table
pnlDealer1.Visible = False
pnlDealer2.Visible = False
pnlDealer3.Visible = False
pnlDealer4.Visible = False
pnlDealer5.Visible = False
pnlDealer6.Visible = False
pnlPlayer1.Visible = False
pnlPlayer2.Visible = False
pnlPlayer3.Visible = False
pnlPlayer4.Visible = False
pnlPlayer5.Visible = False
pnlPlayer6.Visible = False
lblResult.Text = ""
cmdTwist.Enabled = True
cmdStick.Enabled = True
cmdDeal.Enabled = False
If CurrentCard > 35 Then
Call Shuffle()
End If
'get 2 dealer cards
ScoreDealer = 0 : AcesDealer = 0 : NoCardsDealer = 0
pnlBack.Visible = True
Call AddDealer()
Call AddDealer()
'get 2 player cards
ScorePlayer = 0 : AcesPlayer = 0 : NoCardsPlayer = 0
Call AddPlayer()
Call AddPlayer()
'check for blackjacks
If ScoreDealer = 11 And AcesDealer = 1 Then
ScoreDealer = 21
End If
If ScorePlayer = 11 And AcesPlayer = 1 Then
ScorePlayer = 21
End If
If ScoreDealer = 21 And ScorePlayer = 21 Then
Call EndHand("Two blackjacks!", 0)
ElseIf ScoreDealer = 21 Then
Call EndHand("Dealer Blackjack!", -10)
ElseIf ScorePlayer = 21 Then
Call EndHand("Player Blackjack!", 15)
End If
End Sub
Sub Shuffle()
'randomly sore 52 integers and convert to cards
'cards 1-13 are hearts
'cards 14-26 are clubs
'cards 27-39 are diamonds
'cards 40-52 are spades
'when done:
'the array element CardName(I) has the name of the Ith card
'the array element Suit(I) has the suit graphic of the Ith card
'the array element Value(I) has the point value of the Ith card
Dim Cards(52) As Integer
Dim I As Integer
'shuffle cards
Call SortIntegers(52, Cards)
'assign names, suits, values
For I = 1 To 52
Select Case (Cards(I) - 1) Mod 13 + 1
Case 1
CardName(I) = "A"
Value(I) = 1
Case 2
CardName(I) = "2"
Value(I) = 2
Case 3
CardName(I) = "3"
Value(I) = 3
Case 4
CardName(I) = "4"
Value(I) = 4
Case 5
CardName(I) = "5"
Value(I) = 5
Case 6
CardName(I) = "6"
Value(I) = 6
Case 7
CardName(I) = "7"
Value(I) = 7
Case 8
CardName(I) = "8"
Value(I) = 8
Case 9
CardName(I) = "9"
Value(I) = 9
Case 10
CardName(I) = "10"
Value(I) = 10
Case 11
CardName(I) = "J"
Value(I) = 10
Case 12
CardName(I) = "Q"
Value(I) = 10
Case 13
CardName(I) = "K"
Value(I) = 10
End Select
Select Case Cards(I)
Case 1 To 13
Suit(I) = picHeart
Case 14 To 26
Suit(I) = picClub
Case 27 To 39
Suit(I) = picDiamond
Case 40 To 52
Suit(I) = picSpade
End Select
Next I
CurrentCard = 1
End Sub
Private Sub cmdDeal_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdDeal.Click
Call NewHand()
End Sub
Private Sub cmdExit_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles cmdExit.Click
'show final winnings and end
If Winnings > 0 Then
MessageBox.Show("You won" + Str(Winnings) + " points.",
"Game Over", MessageBoxButtons.OK)
ElseIf Winnings = 0 Then
MessageBox.Show("You broke even", "Game Over",
MessageBoxButtons.OK)
Else
MessageBox.Show("You lost" + Str(Math.Abs(Winnings)) + "
points.", "Game Over", MessageBoxButtons.OK)
End If
Me.Close()
End Sub
Private Sub cmdTwist_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles cmdTwist.Click
'add a card if player requests
Call AddPlayer()
If ScorePlayer > 21 Then
Call EndHand("Player Bust", -10)
Exit Sub
End If
If NoCardsPlayer = 6 Then
cmdTwist.Enabled = False
cmdStick.PerformClick()
Exit Sub
End If
End Sub
Private Sub cmdStick_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles cmdStick.Click
Dim ScoreTemp As Integer, AceTemp As Integer
'check for aces in player's hand and adjust score to highest
possible
cmdTwist.Enabled = False
cmdStick.Enabled = False
If AcesPlayer <> 0 Then
Do
ScorePlayer = ScorePlayer + 10
AcesPlayer -= 1
Loop Until AcesPlayer = 0 Or ScorePlayer > 21
If ScorePlayer > 21 Then
ScorePlayer -= 10
End If
End If
'uncover dealer face down card and play dealer hand
pnlBack.Visible = False
Do
ScoreTemp = ScoreDealer : AceTemp = AcesDealer
'check for aces and adjust score
If AceTemp <> 0 Then
Do
ScoreTemp += 10
AceTemp -= 1
Loop Until AceTemp = 0 Or ScoreTemp > 21
If ScoreTemp > 21 Then
ScoreTemp -= 10
End If
End If
'check if dealer won
If ScoreTemp > 16 Then
If ScoreTemp > ScorePlayer Then
Call EndHand("Dealer wins", -10)
Exit Do
ElseIf ScoreTemp = ScorePlayer Then
Call EndHand("It's a draw", 0)
Exit Do
Else
Call EndHand("You win", 10)
Exit Do
End If
End If
'if 6 cards shown & dealer hasn't won then player wins
If NoCardsDealer = 6 Then
Call EndHand("You win", 10)
Exit Do
End If
'see if twist is needed
If ScoreTemp < 17 Then
Call AddDealer()
End If
If ScoreDealer > 21 Then
Call EndHand("Dealer bust", 10)
Exit Do
End If
Loop
End Sub
Private Sub SortIntegers(ByVal N As Integer, ByVal SortedArray() As
Integer)
'randomly sorts N integers and puts results into SortedArray
Dim I As Integer, J As Integer, T As Integer
'order all elements initially
For I = 1 To N
SortedArray(I) = I
Next I
'J is the no. of integers remaining
For J = N To 2 Step -1
I = CInt(Rnd() * J - 0.5) + 1
T = SortedArray(J)
SortedArray(J) = SortedArray(I)
SortedArray(I) = T
Next J
End Sub
End Class
Get documents about "