Hi, I used an Adamspeight2008 tutorial dealing with playing cards on a forum tutorial located here to generate cards, a deck, and hands. I modified the code to deal 2 cards with 2 hands to make a blackjack game. everything has ran smoothly up until i need to keep a running total of what each card is worth. Any suggestions would be great. Thanks!
Original tutorial code located here : http://www.dreamincode.net/forums/topic/74005-playing-cards/
My code:
Original tutorial code located here : http://www.dreamincode.net/forums/topic/74005-playing-cards/
My code:
Public Class frmGame
Protected mHand As List(Of PlayingCard)
Dim TheDeck As DeckOfCards
Dim Hands(NumberOfHands - 1) As HandOfCards
Const NumberOfHands As Integer = 2
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
If TheDeck IsNot Nothing Then
For i = 0 To NumberOfHands - 1
Hands(i).DrawHand(e.Graphics, 423, 250 + i * 65)
Next
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Console.WriteLine("--------")
DealerCover.Visible = True
btnHit.Visible = True
btnStay.Visible = True
TheDeck = New DeckOfCards
TheDeck.ShuffleCards()
TheDeck.ShuffleCards()
'TheDeck.ShuffleCards()
'TheDeck.ShuffleCards()
For i = 0 To NumberOfHands - 1
Hands(i) = New HandOfCards
For c As Integer = 0 To 1
Hands(i).AddCard(TheDeck.TakeCard)
Next
Next
Me.Refresh()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub btnHit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHit.Click
Console.WriteLine("--------")
Hands(1).AddCard(TheDeck.TakeCard)
Me.Refresh()
End Sub
End Class
Public Class HandOfCards
Dim Handvalue As Integer = 0
Protected mHand As List(Of PlayingCard)
Public Sub AddCard(ByVal card As PlayingCard)
mHand.Add(card)
End Sub
Public Function Card(ByRef index As Integer) As PlayingCard
If index < 0 Or index > 4 Then Return Nothing
Return mHand(index)
End Function
Public Sub New()
mHand = New List(Of PlayingCard)
End Sub
Public Sub DrawHand(ByRef g As Graphics, ByRef x As Integer, ByRef y As Integer, Optional ByRef t As Boolean = True)
For i As Integer = 0 To mHand.Count - 1
mHand(i).DrawCard(g, 400 + 25 * i, y)
Next
End Sub
End Class
Public Class DeckOfCards
Dim r As New Random(Now.Millisecond)
Dim mDeck As New List(Of PlayingCard)
Dim Suits() As String = {"S", "D", "C", "H"}
Dim Faces() As String = {"2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A"}
Public Sub New()
For Each Suit As String In Suits
For Each Face As String In Faces.Reverse
mDeck.Add(New PlayingCard(Suit, Face))
Next
Next
End Sub
Public Sub ShuffleCards()
Dim rc As PlayingCard
Dim rn As Integer
For i As Integer = 0 To 52
rn = r.Next(0, 51) Mod mDeck.Count
rc = mDeck(rn)
mDeck.RemoveAt(rn)
mDeck.Add(rc)
Next
End Sub
Public ReadOnly Property TakeCard() As PlayingCard
Get
Dim RemovedCard As PlayingCard = mDeck(0)
mDeck.RemoveAt(0)
Return RemovedCard
End Get
End Property
End Class
Public Class PlayingCard
Dim CardPoints As Integer = 0
Dim Suits() As String = {"S", "D", "C", "H"}
Dim Faces() As String = {"2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A"}
Private mFace As String
Private mSuit As String
Protected cv As Integer = 0
Protected sv As Integer = 0
Public Sub New(ByVal tSuit As String, ByVal tFaceValue As String)
mFace = tFaceValue
mSuit = tSuit
cv = Array.IndexOf(Of String)(Faces, mFace) '+ 1
sv = Array.IndexOf(Of String)(Suits, mSuit) ' + 1
End Sub
Public ReadOnly Property Suit() As String
Get
Return mSuit
End Get
End Property
Public ReadOnly Property Face() As String
Get
Return mFace
End Get
End Property
Public Overrides Function ToString() As String
Return mSuit & mFace
End Function
Public Sub DrawCard(ByRef g As Graphics, ByRef x As Integer, ByRef y As Integer)
g.CompositingQuality = Drawing2D.CompositingQuality.GammaCorrected
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
g.DrawImage(New System.Drawing.Bitmap(System.Windows.Forms.Application.StartupPath & "\cards_png\" & Me.ToString & ".png"), x, y, 46, 64) '71, 96)
End Sub
Public ReadOnly Property CardValue() As Integer
Get
Return cv
End Get
End Property
Public ReadOnly Property SuitValue() As Integer
Get
Return sv
End Get
End Property
End Class