Compare commits

...

18 Commits

Author SHA1 Message Date
CrystalMoogle 9877b71b07 Test 2024-10-22 20:21:58 +01:00
CrystalMoogle 14787c3753 Add description to README 2023-08-12 11:28:17 +01:00
zana a1274d7335 Add text to README 2023-08-12 10:22:50 +00:00
zana 4647fb8288 test mirror 2023-08-12 10:21:39 +00:00
zana de6a9a0645 Add readme.md 2023-08-12 10:21:04 +00:00
CrystalMoogle 98d7967726 Make slight changes to layout, add deck for future animation, add a size attribute 2023-07-22 19:45:15 +01:00
CrystalMoogle 959b3cd71d Change how suit/number is handled in the card class, change the layout of the card tuples. 2023-07-21 21:24:37 +01:00
CrystalMoogle f381a1806e Delete extra file 2023-07-21 18:22:09 +01:00
CrystalMoogle 9581591605 Fix 2023-07-21 18:20:29 +01:00
CrystalMoogle a368d0af41 Convert more functions to use card class 2023-07-21 18:20:03 +01:00
CrystalMoogle c286b08521 Rename for consistency 2023-07-20 20:11:35 +01:00
CrystalMoogle cc8fbf33ee Start working on a unified card class 2023-07-20 19:59:45 +01:00
CrystalMoogle 2455812fb2 Add a message for dealer's turn, also an event to add any message if needed in the future 2023-07-16 17:40:28 +01:00
CrystalMoogle 20f702b537 Disable buttons when player turn ended 2023-07-16 17:34:38 +01:00
CrystalMoogle de4dda9b25 Merge branch 'master' of https://github.com/CrystalMoogle/BlackjackGUI 2023-07-16 17:18:15 +01:00
CrystalMoogle ceef90be2e More formatting 2023-07-16 17:17:03 +01:00
Zana 0047e56ec3
Update dotnet.yml 2023-07-16 17:07:14 +01:00
Zana b090e3f83c
Create dotnet.yml 2023-07-16 17:04:19 +01:00
9 changed files with 209 additions and 89 deletions

28
.github/workflows/dotnet.yml vendored 100644
View File

@ -0,0 +1,28 @@
# This workflow will build a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net
name: .NET
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 6.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Test
run: dotnet test --no-build --verbosity normal

View File

@ -1,45 +1,45 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework> <TargetFramework>net6.0-windows</TargetFramework>
<StartupObject>Sub Main</StartupObject> <StartupObject>Sub Main</StartupObject>
<UseWindowsForms>true</UseWindowsForms> <UseWindowsForms>true</UseWindowsForms>
<MyType>WindowsForms</MyType> <MyType>WindowsForms</MyType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Import Include="System.Data" /> <Import Include="System.Data" />
<Import Include="System.Drawing" /> <Import Include="System.Drawing" />
<Import Include="System.Windows.Forms" /> <Import Include="System.Windows.Forms" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Update="My Project\Application.Designer.vb"> <Compile Update="My Project\Application.Designer.vb">
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon> <DependentUpon>Application.myapp</DependentUpon>
</Compile> </Compile>
<Compile Update="My Project\Resources.Designer.vb"> <Compile Update="My Project\Resources.Designer.vb">
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Update="My Project\Resources.resx"> <EmbeddedResource Update="My Project\Resources.resx">
<CustomToolNamespace>My.Resources</CustomToolNamespace> <CustomToolNamespace>My.Resources</CustomToolNamespace>
<Generator>VbMyResourcesResXFileCodeGenerator</Generator> <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput> <LastGenOutput>Resources.Designer.vb</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Update="My Project\Application.myapp"> <None Update="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator> <Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput> <LastGenOutput>Application.Designer.vb</LastGenOutput>
</None> </None>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,59 @@
Public Class Card
Private Shared idCounter As Integer = 1
Private id As Integer
Private boxId As PictureBox
Private cardImage As Image
Private card As (suit As String, number As String)
Private cardLocation As Point
Private cardHidden As Boolean
Private size As Size
Public Sub New(name As (String, String), Optional hidden As Boolean = False)
id = idCounter
idCounter += 1
boxId = New PictureBox()
card = name
cardHidden = hidden
cardImage = Utilities.GetCardImage(name, hidden)
size = New Size(125,175)
End Sub
Public Sub SetLocation(location As point)
cardLocation = location
End Sub
Public Sub SetName(name As (String, String))
card = name
End Sub
Public Sub SetHidden(hidden As Boolean)
cardHidden = hidden
End Sub
Public Function GetId()
Return id
End Function
Public Function GetBoxId()
Return boxId
End Function
Public Function GetName()
Return card
End Function
Public Function GetSuit() As String
Return card.suit
End Function
Public Function GetNumber() As String
Return card.number
End Function
Public Function GetLocation()
Return cardLocation
End Function
Public Function IsHidden()
Return cardHidden
End Function
End Class

View File

@ -3,11 +3,13 @@
Public Event CardDealt(card, cardNumber, hide) Public Event CardDealt(card, cardNumber, hide)
Public Event SetTotalLabels(playerTotal, dealerTotal) Public Event SetTotalLabels(playerTotal, dealerTotal)
Public Event ShowDealerCard(card) Public Event ShowDealerCard(card)
Public Event EndPlayerTurn()
Public Event EndGame(winMessage) Public Event EndGame(winMessage)
Public Event MessageLabel(message)
Private player As Player Private player As Player
Private dealer As Dealer Private dealer As Dealer
Private deck As List(Of Tuple(Of String, String)) Private deck As List(Of (String, String))
Private WithEvents dealerDelay As Timer Private WithEvents dealerDelay As Timer
Public Sub Start() Public Sub Start()
@ -30,8 +32,9 @@
End Sub End Sub
Sub DealCard(playerDealt As Object, Optional hide As Boolean = False) Sub DealCard(playerDealt As Object, Optional hide As Boolean = False)
Dim card As Tuple(Of String, String) = deck(0) Dim card As (String, String) = deck(0)
playerDealt.hand.Add(card) Dim playingCard = New Card(card, hide)
playerDealt.hand.Add(playingCard)
deck.RemoveAt(0) deck.RemoveAt(0)
GetTotal(playerDealt, hide) GetTotal(playerDealt, hide)
If hide Then If hide Then
@ -40,20 +43,20 @@
Dim cardNumber As String = Dim cardNumber As String =
If(TypeOf playerDealt Is Dealer, (playerDealt.hand.Count + 5).ToString(), playerDealt.hand.Count) If(TypeOf playerDealt Is Dealer, (playerDealt.hand.Count + 5).ToString(), playerDealt.hand.Count)
RaiseEvent CardDealt(card, cardNumber, hide) RaiseEvent CardDealt(playingCard, cardNumber, hide)
RaiseEvent SetTotalLabels(player.total, dealer.total) RaiseEvent SetTotalLabels(player.total, dealer.total)
End Sub End Sub
Sub GetTotal(playerToCheck As Object, Optional hide As Boolean = False) Sub GetTotal(playerToCheck As Object, Optional hide As Boolean = False)
Dim cards As List(Of Tuple(Of String, String)) = playerToCheck.hand Dim cards As List(Of Card) = playerToCheck.hand
If cards.Count = 0 Then If cards.Count = 0 Then
playerToCheck.total = 0 playerToCheck.total = 0
Return Return
End If End If
Dim total As Integer = 0 Dim total = 0
Dim aceTotal As Integer = 0 Dim aceTotal = 0
For Each card In cards For Each card In cards
Dim num As String = card.Item2 Dim num As String = card.GetNumber()
If num = "K" Or num = "Q" Or num = "J" Then If num = "K" Or num = "Q" Or num = "J" Then
num = 10 num = 10
End If End If
@ -107,6 +110,8 @@
Sub DealerTurn() Sub DealerTurn()
GetTotal(dealer) GetTotal(dealer)
RaiseEvent MessageLabel("Dealer's turn...")
RaiseEvent EndPlayerTurn()
RaiseEvent SetTotalLabels(player.total, dealer.total) RaiseEvent SetTotalLabels(player.total, dealer.total)
RaiseEvent ShowDealerCard(dealer.hidden) RaiseEvent ShowDealerCard(dealer.hidden)
If player.winType = WinCondition.Bust Then If player.winType = WinCondition.Bust Then
@ -184,15 +189,10 @@
End Select End Select
End Function End Function
Function CreateDeck() As List(Of Tuple(Of String, String)) Shared Function CreateDeck() As List(Of (String,String))
Dim response As New List(Of Tuple(Of String, String))
Dim nums As String() = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"} Dim nums As String() = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}
Dim suits As String() = {"Hearts", "Diamonds", "Spades", "Clubs"} Dim suits As String() = {"Hearts", "Diamonds", "Spades", "Clubs"}
For Each suit As String In suits Dim response As List(Of (String, String)) = (From suit In suits From num In nums Select (suit, num)).ToList()
For Each num As String In nums
response.Add(Tuple.Create(suit, num))
Next
Next
Return Utilities.Shuffle(response) Return Utilities.Shuffle(response)
End Function End Function
End Class End Class

View File

@ -38,6 +38,7 @@ Partial Class GameWindow
PlayerTotal = New Label() PlayerTotal = New Label()
DealerTotal = New Label() DealerTotal = New Label()
WinMessage = New Label() WinMessage = New Label()
deckPictureBox = New PictureBox()
CType(PlayerCard1, ComponentModel.ISupportInitialize).BeginInit() CType(PlayerCard1, ComponentModel.ISupportInitialize).BeginInit()
CType(PlayerCard2, ComponentModel.ISupportInitialize).BeginInit() CType(PlayerCard2, ComponentModel.ISupportInitialize).BeginInit()
CType(PlayerCard3, ComponentModel.ISupportInitialize).BeginInit() CType(PlayerCard3, ComponentModel.ISupportInitialize).BeginInit()
@ -48,11 +49,12 @@ Partial Class GameWindow
CType(PlayerCard8, ComponentModel.ISupportInitialize).BeginInit() CType(PlayerCard8, ComponentModel.ISupportInitialize).BeginInit()
CType(PlayerCard9, ComponentModel.ISupportInitialize).BeginInit() CType(PlayerCard9, ComponentModel.ISupportInitialize).BeginInit()
CType(PlayerCard10, ComponentModel.ISupportInitialize).BeginInit() CType(PlayerCard10, ComponentModel.ISupportInitialize).BeginInit()
CType(deckPictureBox, ComponentModel.ISupportInitialize).BeginInit()
SuspendLayout() SuspendLayout()
' '
' HitButton ' HitButton
' '
HitButton.Anchor = AnchorStyles.Top Or AnchorStyles.Right HitButton.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left
HitButton.Enabled = False HitButton.Enabled = False
HitButton.Font = New Font("Segoe UI", 36.0F, FontStyle.Regular, GraphicsUnit.Point) HitButton.Font = New Font("Segoe UI", 36.0F, FontStyle.Regular, GraphicsUnit.Point)
HitButton.Location = New Point(100, 490) HitButton.Location = New Point(100, 490)
@ -64,7 +66,7 @@ Partial Class GameWindow
' '
' StandButton ' StandButton
' '
StandButton.Anchor = AnchorStyles.Top Or AnchorStyles.Right StandButton.Anchor = AnchorStyles.Bottom Or AnchorStyles.Right
StandButton.Enabled = False StandButton.Enabled = False
StandButton.Font = New Font("Segoe UI", 36.0F, FontStyle.Regular, GraphicsUnit.Point) StandButton.Font = New Font("Segoe UI", 36.0F, FontStyle.Regular, GraphicsUnit.Point)
StandButton.Location = New Point(780, 490) StandButton.Location = New Point(780, 490)
@ -76,11 +78,11 @@ Partial Class GameWindow
' '
' PlayerCard1 ' PlayerCard1
' '
PlayerCard1.Anchor = AnchorStyles.Top Or AnchorStyles.Right PlayerCard1.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left
PlayerCard1.ErrorImage = My.Resources.Resources.blue2 PlayerCard1.ErrorImage = My.Resources.Resources.blue2
PlayerCard1.Image = My.Resources.Resources.blue PlayerCard1.Image = My.Resources.Resources.blue
PlayerCard1.InitialImage = My.Resources.Resources.blue2 PlayerCard1.InitialImage = My.Resources.Resources.blue2
PlayerCard1.Location = New Point(150, 284) PlayerCard1.Location = New Point(150, 303)
PlayerCard1.Name = "PlayerCard1" PlayerCard1.Name = "PlayerCard1"
PlayerCard1.Size = New Size(125, 175) PlayerCard1.Size = New Size(125, 175)
PlayerCard1.TabIndex = 2 PlayerCard1.TabIndex = 2
@ -88,11 +90,11 @@ Partial Class GameWindow
' '
' PlayerCard2 ' PlayerCard2
' '
PlayerCard2.Anchor = AnchorStyles.Top Or AnchorStyles.Right PlayerCard2.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left
PlayerCard2.ErrorImage = My.Resources.Resources.blue2 PlayerCard2.ErrorImage = My.Resources.Resources.blue2
PlayerCard2.Image = My.Resources.Resources.blue PlayerCard2.Image = My.Resources.Resources.blue
PlayerCard2.InitialImage = My.Resources.Resources.blue2 PlayerCard2.InitialImage = My.Resources.Resources.blue2
PlayerCard2.Location = New Point(375, 284) PlayerCard2.Location = New Point(364, 303)
PlayerCard2.Name = "PlayerCard2" PlayerCard2.Name = "PlayerCard2"
PlayerCard2.Size = New Size(125, 175) PlayerCard2.Size = New Size(125, 175)
PlayerCard2.TabIndex = 3 PlayerCard2.TabIndex = 3
@ -100,10 +102,10 @@ Partial Class GameWindow
' '
' PlayerCard3 ' PlayerCard3
' '
PlayerCard3.Anchor = AnchorStyles.Top Or AnchorStyles.Right PlayerCard3.Anchor = AnchorStyles.Bottom
PlayerCard3.ErrorImage = Nothing PlayerCard3.ErrorImage = Nothing
PlayerCard3.InitialImage = Nothing PlayerCard3.InitialImage = Nothing
PlayerCard3.Location = New Point(578, 284) PlayerCard3.Location = New Point(578, 303)
PlayerCard3.Name = "PlayerCard3" PlayerCard3.Name = "PlayerCard3"
PlayerCard3.Size = New Size(125, 175) PlayerCard3.Size = New Size(125, 175)
PlayerCard3.TabIndex = 4 PlayerCard3.TabIndex = 4
@ -111,10 +113,10 @@ Partial Class GameWindow
' '
' PlayerCard4 ' PlayerCard4
' '
PlayerCard4.Anchor = AnchorStyles.Top Or AnchorStyles.Right PlayerCard4.Anchor = AnchorStyles.Bottom Or AnchorStyles.Right
PlayerCard4.ErrorImage = Nothing PlayerCard4.ErrorImage = Nothing
PlayerCard4.InitialImage = Nothing PlayerCard4.InitialImage = Nothing
PlayerCard4.Location = New Point(780, 284) PlayerCard4.Location = New Point(792, 303)
PlayerCard4.Name = "PlayerCard4" PlayerCard4.Name = "PlayerCard4"
PlayerCard4.Size = New Size(125, 175) PlayerCard4.Size = New Size(125, 175)
PlayerCard4.TabIndex = 5 PlayerCard4.TabIndex = 5
@ -122,10 +124,10 @@ Partial Class GameWindow
' '
' PlayerCard5 ' PlayerCard5
' '
PlayerCard5.Anchor = AnchorStyles.Top Or AnchorStyles.Right PlayerCard5.Anchor = AnchorStyles.Bottom Or AnchorStyles.Right
PlayerCard5.ErrorImage = Nothing PlayerCard5.ErrorImage = Nothing
PlayerCard5.InitialImage = Nothing PlayerCard5.InitialImage = Nothing
PlayerCard5.Location = New Point(1005, 284) PlayerCard5.Location = New Point(1005, 303)
PlayerCard5.Name = "PlayerCard5" PlayerCard5.Name = "PlayerCard5"
PlayerCard5.Size = New Size(125, 175) PlayerCard5.Size = New Size(125, 175)
PlayerCard5.TabIndex = 6 PlayerCard5.TabIndex = 6
@ -151,7 +153,7 @@ Partial Class GameWindow
PlayerCard7.ErrorImage = My.Resources.Resources.blue2 PlayerCard7.ErrorImage = My.Resources.Resources.blue2
PlayerCard7.Image = My.Resources.Resources.blue PlayerCard7.Image = My.Resources.Resources.blue
PlayerCard7.InitialImage = My.Resources.Resources.blue2 PlayerCard7.InitialImage = My.Resources.Resources.blue2
PlayerCard7.Location = New Point(780, 12) PlayerCard7.Location = New Point(792, 12)
PlayerCard7.Name = "PlayerCard7" PlayerCard7.Name = "PlayerCard7"
PlayerCard7.Size = New Size(125, 175) PlayerCard7.Size = New Size(125, 175)
PlayerCard7.TabIndex = 10 PlayerCard7.TabIndex = 10
@ -159,7 +161,7 @@ Partial Class GameWindow
' '
' PlayerCard8 ' PlayerCard8
' '
PlayerCard8.Anchor = AnchorStyles.Top Or AnchorStyles.Right PlayerCard8.Anchor = AnchorStyles.Top
PlayerCard8.ErrorImage = Nothing PlayerCard8.ErrorImage = Nothing
PlayerCard8.InitialImage = Nothing PlayerCard8.InitialImage = Nothing
PlayerCard8.Location = New Point(578, 12) PlayerCard8.Location = New Point(578, 12)
@ -170,10 +172,9 @@ Partial Class GameWindow
' '
' PlayerCard9 ' PlayerCard9
' '
PlayerCard9.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard9.ErrorImage = Nothing PlayerCard9.ErrorImage = Nothing
PlayerCard9.InitialImage = Nothing PlayerCard9.InitialImage = Nothing
PlayerCard9.Location = New Point(375, 12) PlayerCard9.Location = New Point(364, 12)
PlayerCard9.Name = "PlayerCard9" PlayerCard9.Name = "PlayerCard9"
PlayerCard9.Size = New Size(125, 175) PlayerCard9.Size = New Size(125, 175)
PlayerCard9.TabIndex = 8 PlayerCard9.TabIndex = 8
@ -181,7 +182,6 @@ Partial Class GameWindow
' '
' PlayerCard10 ' PlayerCard10
' '
PlayerCard10.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard10.ErrorImage = Nothing PlayerCard10.ErrorImage = Nothing
PlayerCard10.InitialImage = Nothing PlayerCard10.InitialImage = Nothing
PlayerCard10.Location = New Point(150, 12) PlayerCard10.Location = New Point(150, 12)
@ -192,7 +192,7 @@ Partial Class GameWindow
' '
' StartGame ' StartGame
' '
StartGame.Anchor = AnchorStyles.Top Or AnchorStyles.Right StartGame.Anchor = AnchorStyles.Bottom
StartGame.Font = New Font("Segoe UI", 26.25F, FontStyle.Regular, GraphicsUnit.Point) StartGame.Font = New Font("Segoe UI", 26.25F, FontStyle.Regular, GraphicsUnit.Point)
StartGame.Location = New Point(535, 490) StartGame.Location = New Point(535, 490)
StartGame.Name = "StartGame" StartGame.Name = "StartGame"
@ -203,6 +203,7 @@ Partial Class GameWindow
' '
' PlayerTotal ' PlayerTotal
' '
PlayerTotal.Anchor = AnchorStyles.Bottom
PlayerTotal.AutoSize = True PlayerTotal.AutoSize = True
PlayerTotal.Font = New Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point) PlayerTotal.Font = New Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point)
PlayerTotal.Location = New Point(535, 561) PlayerTotal.Location = New Point(535, 561)
@ -213,6 +214,7 @@ Partial Class GameWindow
' '
' DealerTotal ' DealerTotal
' '
DealerTotal.Anchor = AnchorStyles.Bottom
DealerTotal.AutoSize = True DealerTotal.AutoSize = True
DealerTotal.Font = New Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point) DealerTotal.Font = New Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point)
DealerTotal.Location = New Point(535, 610) DealerTotal.Location = New Point(535, 610)
@ -230,10 +232,25 @@ Partial Class GameWindow
WinMessage.Size = New Size(0, 30) WinMessage.Size = New Size(0, 30)
WinMessage.TabIndex = 15 WinMessage.TabIndex = 15
' '
' deckPictureBox
'
deckPictureBox.Anchor = AnchorStyles.Top Or AnchorStyles.Right
deckPictureBox.BackgroundImageLayout = ImageLayout.None
deckPictureBox.ErrorImage = My.Resources.Resources.blue2
deckPictureBox.Image = My.Resources.Resources.blue
deckPictureBox.InitialImage = My.Resources.Resources.blue2
deckPictureBox.Location = New Point(1136, 156)
deckPictureBox.Name = "deckPictureBox"
deckPictureBox.Size = New Size(125, 175)
deckPictureBox.SizeMode = PictureBoxSizeMode.Zoom
deckPictureBox.TabIndex = 16
deckPictureBox.TabStop = False
'
' GameWindow ' GameWindow
' '
AutoScaleMode = AutoScaleMode.Inherit AutoScaleMode = AutoScaleMode.Inherit
ClientSize = New Size(1264, 681) ClientSize = New Size(1264, 681)
Controls.Add(deckPictureBox)
Controls.Add(WinMessage) Controls.Add(WinMessage)
Controls.Add(DealerTotal) Controls.Add(DealerTotal)
Controls.Add(PlayerTotal) Controls.Add(PlayerTotal)
@ -264,6 +281,7 @@ Partial Class GameWindow
CType(PlayerCard8, ComponentModel.ISupportInitialize).EndInit() CType(PlayerCard8, ComponentModel.ISupportInitialize).EndInit()
CType(PlayerCard9, ComponentModel.ISupportInitialize).EndInit() CType(PlayerCard9, ComponentModel.ISupportInitialize).EndInit()
CType(PlayerCard10, ComponentModel.ISupportInitialize).EndInit() CType(PlayerCard10, ComponentModel.ISupportInitialize).EndInit()
CType(deckPictureBox, ComponentModel.ISupportInitialize).EndInit()
ResumeLayout(False) ResumeLayout(False)
PerformLayout() PerformLayout()
End Sub End Sub
@ -284,4 +302,5 @@ Partial Class GameWindow
Friend WithEvents PlayerTotal As Label Friend WithEvents PlayerTotal As Label
Friend WithEvents DealerTotal As Label Friend WithEvents DealerTotal As Label
Friend WithEvents WinMessage As Label Friend WithEvents WinMessage As Label
Friend WithEvents deckPictureBox As PictureBox
End Class End Class

View File

@ -27,20 +27,15 @@
StartGame.Enabled = False StartGame.Enabled = False
End Sub End Sub
Private Sub OnCardDealt(card As Tuple(Of String, String), cardNumber As String, hide As Boolean) _ Private Sub OnCardDealt(card As Card, cardNumber As String, hide As Boolean) _
Handles game.CardDealt Handles game.CardDealt
Dim pictureBox As PictureBox Dim pictureBox As PictureBox
Debug.Print(cardNumber) pictureBox = CType(Me.Controls.Find("PlayerCard" + cardNumber, True).First(), PictureBox)
Try If hide Then
pictureBox = CType(Me.Controls.Find("PlayerCard" + cardNumber, True).First(), PictureBox) pictureBox.Image = My.Resources.blue
If hide Then Else
pictureBox.Image = My.Resources.blue pictureBox.Image = Utilities.GetCardImage((card.GetSuit(), card.GetNumber()))
Else End If
pictureBox.Image = Utilities.GetCardImage(card)
End If
Catch ex As Exception
EndGame("Error: " + ex.Message)
End Try
End Sub End Sub
Private Sub SetTotalLabels(playerTotalAmount, dealerTotalAmount) Handles game.SetTotalLabels Private Sub SetTotalLabels(playerTotalAmount, dealerTotalAmount) Handles game.SetTotalLabels
@ -54,10 +49,19 @@
PlayerCard7.Image = Utilities.GetCardImage(card) PlayerCard7.Image = Utilities.GetCardImage(card)
End Sub End Sub
Private Sub EndPlayerTurn() Handles game.EndPlayerTurn
HitButton.Enabled = False
StandButton.Enabled = False
End Sub
Private Sub MessageLabel(message) Handles game.MessageLabel
WinMessage.Text = message
End Sub
Private Sub EndGame(message) Handles game.EndGame Private Sub EndGame(message) Handles game.EndGame
WinMessage.Text = message WinMessage.Text = message
HitButton.Enabled = False HitButton.Enabled = False
StandButton.Enabled = False StandButton.Enabled = False
StartGame.Enabled = True StartGame.Enabled = True
End Sub End Sub
End Class End Class

View File

@ -1,10 +1,10 @@
Public Class Player Public Class Player
Public Property hand As New List(Of Tuple(Of String, String)) Public Property hand As New List(Of Card)
Public Property total As Integer Public Property total As Integer
Public Property ingame As Boolean Public Property ingame As Boolean
Public Property winType As WinCondition Public Property winType As WinCondition
Sub Start() Public Sub Start()
hand.Clear() hand.Clear()
total = 0 total = 0
ingame = True ingame = True
@ -16,6 +16,6 @@ Public Class Dealer
Inherits Player Inherits Player
Public Property limit As Integer = 17 Public Property limit As Integer = 17
Public Property hidden As Tuple(Of String, String) Public Property hidden As (String, String)
Public Property trueTotal As Integer Public Property trueTotal As Integer
End Class End Class

View File

@ -2,7 +2,7 @@
Public Shared Function Shuffle(list) Public Shared Function Shuffle(list)
Dim max As Integer = list.Count - 1 Dim max As Integer = list.Count - 1
Dim random As New Random() Dim random As New Random()
For x As Integer = 0 To max For x = 0 To max
Dim rand As Integer = random.Next(0, max) Dim rand As Integer = random.Next(0, max)
Dim temp = list(x) Dim temp = list(x)
list(x) = list(rand) list(x) = list(rand)
@ -11,7 +11,10 @@
Return list Return list
End Function End Function
Public Shared Function GetCardImage(card As Tuple(Of String, String)) As Image Public Shared Function GetCardImage(card As (String, String), Optional hidden As Boolean = False) As Image
If hidden Then
Return My.Resources.blue
End If
Dim suit As String = card.Item1 Dim suit As String = card.Item1
Dim num As String = card.Item2 Dim num As String = card.Item2
Select Case num Select Case num
@ -26,6 +29,10 @@
End Select End Select
Dim img As String = suit + "_" + num Dim img As String = suit + "_" + num
Return My.Resources.ResourceManager.GetObject(img.ToLower()) Try
Return My.Resources.ResourceManager.GetObject(img.ToLower())
Catch
Return My.Resources.blue
End Try
End Function End Function
End Class End Class

3
README.md 100644
View File

@ -0,0 +1,3 @@
# BlackjackGUI
A simple Blackjack game to help learn VB.net and its GUI interactions.