Compare commits

..

No commits in common. "master" and "v1.0.0" have entirely different histories.

13 changed files with 318 additions and 500 deletions

View File

@ -1,28 +0,0 @@
# 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,59 +0,0 @@
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

@ -1,5 +1,5 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class GameWindow
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
@ -38,7 +38,6 @@ Partial Class GameWindow
PlayerTotal = New Label()
DealerTotal = New Label()
WinMessage = New Label()
deckPictureBox = New PictureBox()
CType(PlayerCard1, ComponentModel.ISupportInitialize).BeginInit()
CType(PlayerCard2, ComponentModel.ISupportInitialize).BeginInit()
CType(PlayerCard3, ComponentModel.ISupportInitialize).BeginInit()
@ -49,12 +48,11 @@ Partial Class GameWindow
CType(PlayerCard8, ComponentModel.ISupportInitialize).BeginInit()
CType(PlayerCard9, ComponentModel.ISupportInitialize).BeginInit()
CType(PlayerCard10, ComponentModel.ISupportInitialize).BeginInit()
CType(deckPictureBox, ComponentModel.ISupportInitialize).BeginInit()
SuspendLayout()
'
' HitButton
'
HitButton.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left
HitButton.Anchor = AnchorStyles.Top Or AnchorStyles.Right
HitButton.Enabled = False
HitButton.Font = New Font("Segoe UI", 36.0F, FontStyle.Regular, GraphicsUnit.Point)
HitButton.Location = New Point(100, 490)
@ -66,7 +64,7 @@ Partial Class GameWindow
'
' StandButton
'
StandButton.Anchor = AnchorStyles.Bottom Or AnchorStyles.Right
StandButton.Anchor = AnchorStyles.Top Or AnchorStyles.Right
StandButton.Enabled = False
StandButton.Font = New Font("Segoe UI", 36.0F, FontStyle.Regular, GraphicsUnit.Point)
StandButton.Location = New Point(780, 490)
@ -78,11 +76,11 @@ Partial Class GameWindow
'
' PlayerCard1
'
PlayerCard1.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left
PlayerCard1.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard1.ErrorImage = My.Resources.Resources.blue2
PlayerCard1.Image = My.Resources.Resources.blue
PlayerCard1.InitialImage = My.Resources.Resources.blue2
PlayerCard1.Location = New Point(150, 303)
PlayerCard1.Location = New Point(150, 284)
PlayerCard1.Name = "PlayerCard1"
PlayerCard1.Size = New Size(125, 175)
PlayerCard1.TabIndex = 2
@ -90,11 +88,11 @@ Partial Class GameWindow
'
' PlayerCard2
'
PlayerCard2.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left
PlayerCard2.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard2.ErrorImage = My.Resources.Resources.blue2
PlayerCard2.Image = My.Resources.Resources.blue
PlayerCard2.InitialImage = My.Resources.Resources.blue2
PlayerCard2.Location = New Point(364, 303)
PlayerCard2.Location = New Point(375, 284)
PlayerCard2.Name = "PlayerCard2"
PlayerCard2.Size = New Size(125, 175)
PlayerCard2.TabIndex = 3
@ -102,10 +100,10 @@ Partial Class GameWindow
'
' PlayerCard3
'
PlayerCard3.Anchor = AnchorStyles.Bottom
PlayerCard3.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard3.ErrorImage = Nothing
PlayerCard3.InitialImage = Nothing
PlayerCard3.Location = New Point(578, 303)
PlayerCard3.Location = New Point(578, 284)
PlayerCard3.Name = "PlayerCard3"
PlayerCard3.Size = New Size(125, 175)
PlayerCard3.TabIndex = 4
@ -113,10 +111,10 @@ Partial Class GameWindow
'
' PlayerCard4
'
PlayerCard4.Anchor = AnchorStyles.Bottom Or AnchorStyles.Right
PlayerCard4.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard4.ErrorImage = Nothing
PlayerCard4.InitialImage = Nothing
PlayerCard4.Location = New Point(792, 303)
PlayerCard4.Location = New Point(780, 284)
PlayerCard4.Name = "PlayerCard4"
PlayerCard4.Size = New Size(125, 175)
PlayerCard4.TabIndex = 5
@ -124,10 +122,10 @@ Partial Class GameWindow
'
' PlayerCard5
'
PlayerCard5.Anchor = AnchorStyles.Bottom Or AnchorStyles.Right
PlayerCard5.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard5.ErrorImage = Nothing
PlayerCard5.InitialImage = Nothing
PlayerCard5.Location = New Point(1005, 303)
PlayerCard5.Location = New Point(1005, 284)
PlayerCard5.Name = "PlayerCard5"
PlayerCard5.Size = New Size(125, 175)
PlayerCard5.TabIndex = 6
@ -153,7 +151,7 @@ Partial Class GameWindow
PlayerCard7.ErrorImage = My.Resources.Resources.blue2
PlayerCard7.Image = My.Resources.Resources.blue
PlayerCard7.InitialImage = My.Resources.Resources.blue2
PlayerCard7.Location = New Point(792, 12)
PlayerCard7.Location = New Point(780, 12)
PlayerCard7.Name = "PlayerCard7"
PlayerCard7.Size = New Size(125, 175)
PlayerCard7.TabIndex = 10
@ -161,7 +159,7 @@ Partial Class GameWindow
'
' PlayerCard8
'
PlayerCard8.Anchor = AnchorStyles.Top
PlayerCard8.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard8.ErrorImage = Nothing
PlayerCard8.InitialImage = Nothing
PlayerCard8.Location = New Point(578, 12)
@ -172,9 +170,10 @@ Partial Class GameWindow
'
' PlayerCard9
'
PlayerCard9.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard9.ErrorImage = Nothing
PlayerCard9.InitialImage = Nothing
PlayerCard9.Location = New Point(364, 12)
PlayerCard9.Location = New Point(375, 12)
PlayerCard9.Name = "PlayerCard9"
PlayerCard9.Size = New Size(125, 175)
PlayerCard9.TabIndex = 8
@ -182,6 +181,7 @@ Partial Class GameWindow
'
' PlayerCard10
'
PlayerCard10.Anchor = AnchorStyles.Top Or AnchorStyles.Right
PlayerCard10.ErrorImage = Nothing
PlayerCard10.InitialImage = Nothing
PlayerCard10.Location = New Point(150, 12)
@ -192,7 +192,7 @@ Partial Class GameWindow
'
' StartGame
'
StartGame.Anchor = AnchorStyles.Bottom
StartGame.Anchor = AnchorStyles.Top Or AnchorStyles.Right
StartGame.Font = New Font("Segoe UI", 26.25F, FontStyle.Regular, GraphicsUnit.Point)
StartGame.Location = New Point(535, 490)
StartGame.Name = "StartGame"
@ -203,7 +203,6 @@ Partial Class GameWindow
'
' PlayerTotal
'
PlayerTotal.Anchor = AnchorStyles.Bottom
PlayerTotal.AutoSize = True
PlayerTotal.Font = New Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point)
PlayerTotal.Location = New Point(535, 561)
@ -214,7 +213,6 @@ Partial Class GameWindow
'
' DealerTotal
'
DealerTotal.Anchor = AnchorStyles.Bottom
DealerTotal.AutoSize = True
DealerTotal.Font = New Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point)
DealerTotal.Location = New Point(535, 610)
@ -227,30 +225,15 @@ Partial Class GameWindow
'
WinMessage.AutoSize = True
WinMessage.Font = New Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point)
WinMessage.Location = New Point(535, 216)
WinMessage.Location = New Point(565, 221)
WinMessage.Name = "WinMessage"
WinMessage.Size = New Size(0, 30)
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
' Form1
'
AutoScaleMode = AutoScaleMode.Inherit
ClientSize = New Size(1264, 681)
Controls.Add(deckPictureBox)
Controls.Add(WinMessage)
Controls.Add(DealerTotal)
Controls.Add(PlayerTotal)
@ -268,7 +251,7 @@ Partial Class GameWindow
Controls.Add(StandButton)
Controls.Add(HitButton)
MinimumSize = New Size(1280, 720)
Name = "GameWindow"
Name = "Form1"
StartPosition = FormStartPosition.CenterScreen
Text = "Blackjack"
CType(PlayerCard1, ComponentModel.ISupportInitialize).EndInit()
@ -281,7 +264,6 @@ Partial Class GameWindow
CType(PlayerCard8, ComponentModel.ISupportInitialize).EndInit()
CType(PlayerCard9, ComponentModel.ISupportInitialize).EndInit()
CType(PlayerCard10, ComponentModel.ISupportInitialize).EndInit()
CType(deckPictureBox, ComponentModel.ISupportInitialize).EndInit()
ResumeLayout(False)
PerformLayout()
End Sub
@ -302,5 +284,4 @@ Partial Class GameWindow
Friend WithEvents PlayerTotal As Label
Friend WithEvents DealerTotal As Label
Friend WithEvents WinMessage As Label
Friend WithEvents deckPictureBox As PictureBox
End Class

View File

@ -0,0 +1,258 @@
Public Class Form1
Inherits Form
Dim player As New Player()
Dim dealer As New Dealer()
Dim deck As New List(Of String)
Dim gameRunning As Boolean = True
Private Sub StartGame_Click(sender As Object, e As EventArgs) Handles StartGame.Click
PlayGame()
End Sub
Private Sub HitButton_Click(sender As Object, e As EventArgs) Handles HitButton.Click
If gameRunning And player.hand.Count < 5 And player.ingame Then
DealCard(player)
CheckPlayer(player)
End If
End Sub
Private Sub StandButton_Click(sender As Object, e As EventArgs) Handles StandButton.Click
If gameRunning And player.ingame Then
player.ingame = False
DealerTurn()
End If
End Sub
Private Sub ResetCards()
Dim pictureBoxes() As PictureBox = {PlayerCard1, PlayerCard2, PlayerCard3, PlayerCard4, PlayerCard5, PlayerCard6, PlayerCard7, PlayerCard8, PlayerCard9, PlayerCard10}
For Each box In pictureBoxes
box.Image = Nothing
Next
End Sub
Sub PlayGame()
InitGame()
End Sub
Sub InitGame()
ResetCards()
WinMessage.ResetText()
HitButton.Enabled = True
StandButton.Enabled = True
StartGame.Enabled = False
gameRunning = True
player.Start()
dealer.Start()
CreateDeck()
DealCard(player)
DealCard(dealer, isDealer:=True)
DealCard(player)
DealCard(dealer, isDealer:=True)
CheckPlayer(player)
End Sub
Sub CreateDeck()
deck.Clear()
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"}
For Each s As String In suits
For Each n As String In nums
deck.Add(n + " of " + s)
Next
Next
Shuffle(deck)
End Sub
Sub Shuffle(deck)
Dim max As Integer = deck.Count - 1
Dim random As New Random()
For x As Integer = 0 To max
Dim rand As Integer = random.Next(0, max)
Dim temp As String = deck(x)
deck(x) = deck(rand)
deck(rand) = temp
Next
End Sub
Sub DealCard(player, Optional suppress = False, Optional isDealer = False)
Dim card = deck(0)
player.hand.Add(card)
deck.RemoveAt(0)
GetTotal(player)
Dim cardNumber As String = If(isDealer, (player.hand.count + 5).ToString(), player.hand.count)
Dim pictureBox As PictureBox = CType(Me.Controls.Find("PlayerCard" + cardNumber, True).First(), PictureBox)
pictureBox.Image = GetCardImage(card)
SetTotalLabels()
End Sub
Sub GetTotal(player)
Dim cards As List(Of String) = player.hand
If cards.Count = 0 Then
player.total = 0
Return
End If
Dim t As Integer = 0
Dim a As Integer = 0
For Each x As String In cards
Dim card As String = x
Dim num As String = card.Split(" "c)(0)
If num = "K" Or num = "Q" Or num = "J" Then
num = 10
End If
If num = "A" Then
num = 11
a += 1
End If
num = Integer.Parse(num)
t += num
Next
While (a > 0 And t > 21)
a -= 1
t = t - 10
End While
player.total = t
End Sub
Sub SetTotalLabels()
Dim dealerLabelTotal As String = DealerTotal.Text.Split(": ")(0)
Dim playerLabelTotal As String = PlayerTotal.Text.Split(": ")(0)
DealerTotal.Text = dealerLabelTotal + ": " + dealer.total.ToString()
PlayerTotal.Text = playerLabelTotal + ": " + player.total.ToString()
End Sub
Sub CheckPlayer(player)
If player.total = 21 And player.hand.count = 2 Then
player.winType = WinCondition.Blackjack
player.ingame = False
dealer.ingame = False
DealerTurn()
ElseIf player.total > 21 Then
player.winType = WinCondition.Bust
player.ingame = False
DealerTurn()
ElseIf player.total < 22 And player.hand.count = 5 Then
player.winType = WinCondition.FiveCard
player.ingame = False
dealer.ingame = False
DealerTurn()
End If
If player.total = 21 Then
player.ingame = False
DealerTurn()
End If
End Sub
Sub DealerTurn()
If dealer.ingame Then
If dealer.total = 21 And dealer.hand.Count = 2 Then
dealer.winType = WinCondition.Blackjack
dealer.ingame = False
ElseIf dealer.total > 21 Then
dealer.winType = WinCondition.Bust
player.ingame = False
ElseIf dealer.total < dealer.limit Then
DealCard(dealer, isDealer:=True)
DealerTurn()
Else
dealer.winType = WinCondition.NormalWin
End If
End If
CheckGame()
End Sub
Sub CheckGame()
WinMessage.Text = GetResults()
HitButton.Enabled = False
StandButton.Enabled = False
StartGame.Enabled = True
End Sub
Function GetResults()
If dealer.winType = WinCondition.Blackjack Then
If player.winType = WinCondition.Blackjack Then
PrintCurrentGame()
Return "Player ties with Blackjack!"
Else
PrintCurrentGame()
Return "Dealer wins with Blackjack!"
End If
End If
If player.winType = WinCondition.Blackjack Then
PrintCurrentGame()
Return "Player wins with Blackjack!"
End If
If player.winType = WinCondition.FiveCard Then
PrintCurrentGame()
Return "Player wins with Five Card Charlie!"
End If
If player.winType = WinCondition.Bust Then
PrintCurrentGame()
Return "Player busts!"
End If
If dealer.winType = WinCondition.Bust Then
PrintCurrentGame()
Return "Dealer busts!"
End If
If player.total > dealer.total Then
PrintCurrentGame()
Return "Player wins with total of " + player.total.ToString() + "!"
End If
If player.total = dealer.total Then
PrintCurrentGame()
Return "Tie!"
End If
If player.total < dealer.total Then
PrintCurrentGame()
Return "Dealer wins with total of " + dealer.total.ToString() + "!"
End If
PrintCurrentGame()
Return "error"
End Function
Function GetCardImage(card) As Image
Dim num As String = card.split(" ")(0)
Dim suit As String = card.split(" ")(2)
Select Case num
Case "K"
num = "king"
Case "Q"
num = "queen"
Case "J"
num = "jack"
Case "A"
num = "ace"
End Select
Dim img As String = suit + "_" + num
Return My.Resources.ResourceManager.GetObject(img.ToLower())
End Function
Sub PrintCurrentGame()
Console.WriteLine("Dealer Hand: " + String.Join(", ", dealer.hand) + " Total: " + dealer.total.ToString())
Console.WriteLine("Player Hand: " + String.Join(", ", player.hand) + " Total: " + player.total.ToString())
End Sub
End Class
Public Class Player
Private _winCondition As WinCondition
Public Property hand As New List(Of String)
Public Property total As Integer
Public Property ingame As Boolean
Public Property winType
Get
Return _winCondition
End Get
Set
_winCondition = Value
End Set
End Property
Sub Start()
hand.Clear()
total = 0
ingame = True
winType = WinCondition.NormalWin
End Sub
End Class
Public Class Dealer
Inherits Player
Public Property limit As Integer = 17
End Class
Enum WinCondition
Bust
NormalWin
FiveCard
Blackjack
End Enum

View File

@ -1,205 +0,0 @@
Public Class Game
Public Event ResetUI()
Public Event CardDealt(card, cardNumber, hide)
Public Event SetTotalLabels(playerTotal, dealerTotal)
Public Event ShowDealerCard(card)
Public Event EndPlayerTurn()
Public Event EndGame(winMessage)
Public Event MessageLabel(message)
Private player As Player
Private dealer As Dealer
Private deck As List(Of (String, String))
Private WithEvents dealerDelay As Timer
Public Sub Start()
Init()
player.Start()
dealer.Start()
DealCard(player)
DealCard(dealer)
DealCard(player)
DealCard(dealer, hide:=True)
CheckPlayer(player)
CheckPlayer(dealer, True)
End Sub
Sub Init()
player = New Player()
dealer = New Dealer()
deck = CreateDeck()
RaiseEvent ResetUI()
End Sub
Sub DealCard(playerDealt As Object, Optional hide As Boolean = False)
Dim card As (String, String) = deck(0)
Dim playingCard = New Card(card, hide)
playerDealt.hand.Add(playingCard)
deck.RemoveAt(0)
GetTotal(playerDealt, hide)
If hide Then
playerDealt.hidden = card
End If
Dim cardNumber As String =
If(TypeOf playerDealt Is Dealer, (playerDealt.hand.Count + 5).ToString(), playerDealt.hand.Count)
RaiseEvent CardDealt(playingCard, cardNumber, hide)
RaiseEvent SetTotalLabels(player.total, dealer.total)
End Sub
Sub GetTotal(playerToCheck As Object, Optional hide As Boolean = False)
Dim cards As List(Of Card) = playerToCheck.hand
If cards.Count = 0 Then
playerToCheck.total = 0
Return
End If
Dim total = 0
Dim aceTotal = 0
For Each card In cards
Dim num As String = card.GetNumber()
If num = "K" Or num = "Q" Or num = "J" Then
num = 10
End If
If num = "A" Then
num = 11
aceTotal += 1
End If
num = Integer.Parse(num)
total += num
Next
While (aceTotal > 0 And total > 21)
aceTotal -= 1
total -= 10
End While
If hide Then
playerToCheck.trueTotal = total
Else
playerToCheck.total = total
End If
End Sub
Sub CheckPlayer(playerToCheck As Object, Optional peek As Boolean = False)
Dim total As Integer = playerToCheck.total
If peek Then
total = playerToCheck.trueTotal
End If
If total = 21 And playerToCheck.hand.Count = 2 Then
playerToCheck.winType = WinCondition.Blackjack
playerToCheck.ingame = False
If peek Then
player.ingame = False
Else
dealer.ingame = False
End If
DealerTurn()
ElseIf total > 21 Then
playerToCheck.winType = WinCondition.Bust
playerToCheck.ingame = False
DealerTurn()
ElseIf total < 22 And playerToCheck.hand.Count = 5 Then
playerToCheck.winType = WinCondition.FiveCard
playerToCheck.ingame = False
dealer.ingame = False
DealerTurn()
End If
If total = 21 Then
playerToCheck.ingame = False
DealerTurn()
End If
End Sub
Sub DealerTurn()
GetTotal(dealer)
RaiseEvent MessageLabel("Dealer's turn...")
RaiseEvent EndPlayerTurn()
RaiseEvent SetTotalLabels(player.total, dealer.total)
RaiseEvent ShowDealerCard(dealer.hidden)
If player.winType = WinCondition.Bust Then
CheckGame()
Exit Sub
End If
If dealer.ingame Then
If dealer.total = 21 And dealer.hand.Count = 2 Then
dealer.winType = WinCondition.Blackjack
dealer.ingame = False
ElseIf dealer.total > 21 Then
dealer.winType = WinCondition.Bust
player.ingame = False
ElseIf dealer.total < dealer.limit And dealer.hand.Count < 5 Then
dealerDelay = New Timer With {
.Interval = 1000
}
dealerDelay.Start()
Exit Sub
Else
dealer.winType = WinCondition.NormalWin
End If
End If
CheckGame()
End Sub
Sub OnTickDealerDelay(sender As Object, e As EventArgs) Handles dealerDelay.Tick
dealerDelay.Stop()
dealerDelay.Dispose()
DealCard(dealer)
DealerTurn()
End Sub
Sub Hit()
If player.hand.Count < 5 And player.ingame Then
DealCard(player)
CheckPlayer(player)
End If
End Sub
Sub Stand()
If player.ingame Then
player.ingame = False
DealerTurn()
End If
End Sub
Sub CheckGame()
Dim winMessage As String = GetResults()
RaiseEvent EndGame(winMessage)
End Sub
Function GetResults()
Select Case True
Case dealer.winType = WinCondition.Blackjack
If player.winType = WinCondition.Blackjack Then
Return "Player ties with Blackjack!"
Else
Return "Dealer wins with Blackjack!"
End If
Case player.winType = WinCondition.Blackjack
Return "Player wins with Blackjack!"
Case player.winType = WinCondition.FiveCard
Return "Player wins with Five Card Charlie!"
Case player.winType = WinCondition.Bust
Return "Player busts!"
Case dealer.winType = WinCondition.Bust
Return "Dealer busts!"
Case player.total > dealer.total
Return "Player wins with a total of " & player.total.ToString() & "!"
Case player.total = dealer.total
Return "Tie!"
Case Else
Return "Dealer wins with a total of " & dealer.total.ToString() & "!"
End Select
End Function
Shared Function CreateDeck() As List(Of (String,String))
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 response As List(Of (String, String)) = (From suit In suits From num In nums Select (suit, num)).ToList()
Return Utilities.Shuffle(response)
End Function
End Class
Public Enum WinCondition
Bust
NormalWin
FiveCard
Blackjack
End Enum

View File

@ -1,67 +0,0 @@
Public Class GameWindow
Private WithEvents game As Game
Private Sub StartGame_Click(sender As Object, e As EventArgs) Handles StartGame.Click
game = New Game()
game.Start()
End Sub
Private Sub HitButton_Click(sender As Object, e As EventArgs) Handles HitButton.Click
game.Hit()
End Sub
Private Sub StandButton_Click(sender As Object, e As EventArgs) Handles StandButton.Click
game.Stand()
End Sub
Private Sub OnResetUI() Handles game.ResetUI
Dim pictureBoxes() As PictureBox =
{PlayerCard1, PlayerCard2, PlayerCard3, PlayerCard4, PlayerCard5, PlayerCard6, PlayerCard7, PlayerCard8,
PlayerCard9, PlayerCard10}
For Each box In pictureBoxes
box.Image = Nothing
Next
WinMessage.ResetText()
HitButton.Enabled = True
StandButton.Enabled = True
StartGame.Enabled = False
End Sub
Private Sub OnCardDealt(card As Card, cardNumber As String, hide As Boolean) _
Handles game.CardDealt
Dim pictureBox As PictureBox
pictureBox = CType(Me.Controls.Find("PlayerCard" + cardNumber, True).First(), PictureBox)
If hide Then
pictureBox.Image = My.Resources.blue
Else
pictureBox.Image = Utilities.GetCardImage((card.GetSuit(), card.GetNumber()))
End If
End Sub
Private Sub SetTotalLabels(playerTotalAmount, dealerTotalAmount) Handles game.SetTotalLabels
Dim dealerLabelTotal As String = DealerTotal.Text.Split(": ")(0)
Dim playerLabelTotal As String = PlayerTotal.Text.Split(": ")(0)
DealerTotal.Text = dealerLabelTotal + ": " + dealerTotalAmount.ToString()
PlayerTotal.Text = playerLabelTotal + ": " + playerTotalAmount.ToString()
End Sub
Private Sub ShowDealerCard(card) Handles game.ShowDealerCard
PlayerCard7.Image = Utilities.GetCardImage(card)
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
WinMessage.Text = message
HitButton.Enabled = False
StandButton.Enabled = False
StartGame.Enabled = True
End Sub
End Class

View File

@ -31,7 +31,7 @@ Namespace My
<Global.System.Diagnostics.DebuggerStepThroughAttribute()>
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = GameWindow
Me.MainForm = Form1
End Sub
End Class
End Namespace

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -1,38 +0,0 @@
Public Class Utilities
Public Shared Function Shuffle(list)
Dim max As Integer = list.Count - 1
Dim random As New Random()
For x = 0 To max
Dim rand As Integer = random.Next(0, max)
Dim temp = list(x)
list(x) = list(rand)
list(rand) = temp
Next
Return list
End Function
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 num As String = card.Item2
Select Case num
Case "K"
num = "king"
Case "Q"
num = "queen"
Case "J"
num = "jack"
Case "A"
num = "ace"
End Select
Dim img As String = suit + "_" + num
Try
Return My.Resources.ResourceManager.GetObject(img.ToLower())
Catch
Return My.Resources.blue
End Try
End Function
End Class

View File

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