Blackjack Dim CardName(52) As String Dim Suit(52) As PictureBox

Description

Blackjack Dim CardName(52) As String Dim Suit(52) As PictureBox

Shared by: sdfsb346f
-
Stats
views:
4
posted:
3/14/2010
language:
English
pages:
7
Document Sample
scope of work template
							                               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

						
Related docs
Other docs by sdfsb346f