Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
puzzleplayer
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Floris
puzzleplayer
Commits
c7ed7df2
Commit
c7ed7df2
authored
3 months ago
by
bionic85
Browse files
Options
Downloads
Patches
Plain Diff
Blackjack is donee
parent
a44022e0
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
PuzzlePlayer/BlackJack.cs
+93
-55
93 additions, 55 deletions
PuzzlePlayer/BlackJack.cs
with
93 additions
and
55 deletions
PuzzlePlayer/BlackJack.cs
+
93
−
55
View file @
c7ed7df2
...
...
@@ -48,7 +48,7 @@ namespace PuzzlePlayer_Namespace
// visibility depends on game state
Panel
SetupPanel
;
Panel
GamePanel
;
Panel
ResultPanel
;
Button
RestartButton
;
List
<
Card
>
cardsLeft
;
List
<
Card
>
playerCards
=
new
();
...
...
@@ -65,15 +65,13 @@ namespace PuzzlePlayer_Namespace
defaultFontSize
=
screen
.
Width
/
50
;
Paint
+=
BlackJack_Paint
;
money
=
ReadMoney
();
cardsLeft
=
getAllCards
();
SetupUI
();
}
List
<
Card
>
getAllCards
()
List
<
Card
>
getAllCards
()
// returns a list with all the 52 classic cards
{
List
<
Card
>
cards
=
new
List
<
Card
>();
string
[]
numbers
=
{
"2"
,
"3"
,
"4"
,
"5"
,
"6"
,
"7"
,
"8"
,
"9"
,
"10"
,
"ace"
,
"jack"
,
"king"
,
"queen"
};
...
...
@@ -86,10 +84,8 @@ namespace PuzzlePlayer_Namespace
int
val
;
if
(
num
==
"jack"
||
num
==
"king"
||
num
==
"queen"
)
val
=
10
;
else
if
(
num
==
"ace"
)
// if it is an ace the player can chose between 1 or 11
{
else
if
(
num
==
"ace"
)
// an ace is worth either 1 or 11, the logic for this is handled in GetValue()
val
=
11
;
}
else
val
=
int
.
Parse
(
num
);
cards
.
Add
(
new
Card
(
num
+
"_of_"
+
kind
,
val
));
...
...
@@ -133,7 +129,7 @@ namespace PuzzlePlayer_Namespace
b
.
BackColor
=
chip
.
Item3
;
b
.
Font
=
new
Font
(
BJFont
,
b
.
Size
.
Width
/
5
);
b
.
Click
+=
m
oneyButtonClick
;
b
.
Click
+=
M
oneyButtonClick
;
SetupPanel
.
Controls
.
Add
(
b
);
goofyIndex
++;
...
...
@@ -146,7 +142,7 @@ namespace PuzzlePlayer_Namespace
dealButton
.
Location
=
new
Point
(
SetupPanel
.
Width
/
2
-
dealButton
.
Width
/
2
,
SetupPanel
.
Height
/
4
);
dealButton
.
Font
=
new
Font
(
BJFont
,
dealButton
.
Size
.
Width
/
5
);
dealButton
.
BackColor
=
Color
.
DodgerBlue
;
dealButton
.
Click
+=
d
ealButtonClick
;
dealButton
.
Click
+=
D
ealButtonClick
;
SetupPanel
.
Controls
.
Add
(
dealButton
);
Controls
.
Add
(
SetupPanel
);
...
...
@@ -183,30 +179,28 @@ namespace PuzzlePlayer_Namespace
StandButton
.
Text
=
"STAND"
;
StandButton
.
Click
+=
(
object
sender
,
EventArgs
e
)
=>
EndGame
();
StandButton
.
BackColor
=
Color
.
Blue
;
StandButton
.
Size
=
new
Size
(
GamePanel
.
Width
/
5
,
GamePanel
.
Height
/
5
)
;
StandButton
.
Location
=
new
Point
(
GamePanel
.
Width
-
GamePanel
.
Width
/
4
-
StandButton
.
Width
/
2
,
GamePanel
.
Height
/
2
-
StandButton
.
Size
.
Height
/
2
);
StandButton
.
Font
=
new
Font
(
BJFont
,
StandButton
.
Size
.
Width
/
6
,
FontStyle
.
Bold
);
StandButton
.
Size
=
HitButton
.
Size
;
StandButton
.
Location
=
new
Point
(
GamePanel
.
Width
-
GamePanel
.
Width
/
4
-
StandButton
.
Width
/
2
,
HitButton
.
Location
.
Y
);
StandButton
.
Font
=
new
Font
(
BJFont
,
StandButton
.
Width
/
6
,
FontStyle
.
Bold
);
GamePanel
.
Controls
.
Add
(
StandButton
);
RestartButton
=
new
Button
();
RestartButton
.
Text
=
"Next Round"
;
RestartButton
.
Click
+=
RestartButtonClick
;
RestartButton
.
BackColor
=
Color
.
DarkCyan
;
RestartButton
.
Size
=
HitButton
.
Size
;
RestartButton
.
Location
=
new
Point
(
GamePanel
.
Width
/
2
-
RestartButton
.
Width
/
2
,
HitButton
.
Location
.
Y
);
RestartButton
.
Font
=
new
Font
(
BJFont
,
RestartButton
.
Width
/
6
,
FontStyle
.
Bold
);
RestartButton
.
Hide
();
// hide until game state is reached
GamePanel
.
Controls
.
Add
(
RestartButton
);
GamePanel
.
Hide
();
//Hide until the game state is reached
Controls
.
Add
(
GamePanel
);
#
endregion
//result
#
region
ResultPanel
ResultPanel
=
new
Panel
();
ResultPanel
.
Hide
();
//Hide until the result state is reached
ResultPanel
.
BackColor
=
Color
.
Transparent
;
ResultPanel
.
Size
=
screen
;
//ResultPanel.Paint += Result_Paint;
Controls
.
Add
(
ResultPanel
);
#
endregion
}
//button logic
private
void
m
oneyButtonClick
(
object
sender
,
EventArgs
e
)
private
void
M
oneyButtonClick
(
object
sender
,
EventArgs
e
)
{
Button
b
=
(
Button
)
sender
;
(
int
,
string
,
Color
)
chip
=
chipInfo
[
int
.
Parse
(
b
.
Name
)];
...
...
@@ -219,7 +213,7 @@ namespace PuzzlePlayer_Namespace
Invalidate
(
true
);
}
private
void
d
ealButtonClick
(
object
sender
,
EventArgs
e
)
private
void
D
ealButtonClick
(
object
sender
,
EventArgs
e
)
{
if
(
deployedMoney
==
0
)
return
;
...
...
@@ -233,9 +227,26 @@ namespace PuzzlePlayer_Namespace
GamePanel
.
Show
();
result
=
BJRESULTS
.
Won
;
}
private
void
RestartButtonClick
(
object
sender
,
EventArgs
e
)
//reset everything
{
result
=
BJRESULTS
.
Lost
;
deployedMoney
=
0
;
roundFinished
=
false
;
resultReady
=
false
;
playerCards
.
Clear
();
dealerCards
.
Clear
();
RestartButton
.
Hide
();
GamePanel
.
Hide
();
SetupPanel
.
Show
();
}
// end of the game, fancy async methode
private
async
void
EndGame
()
{
if
(
roundFinished
)
return
;
//only run it once
roundFinished
=
true
;
// check for blackjack or bust (above 21 so player loses)
...
...
@@ -247,6 +258,21 @@ namespace PuzzlePlayer_Namespace
else
// if the player scored below 21 then the dealer must draw cards
await
DealerAnimation
();
// fancy Asynchronous animation function
switch
(
result
)
{
case
BJRESULTS
.
Lost
:
break
;
case
BJRESULTS
.
Won
:
case
BJRESULTS
.
Blackjack
:
money
+=
deployedMoney
*
2
;
break
;
case
BJRESULTS
.
Draw
:
money
+=
deployedMoney
;
break
;
}
RestartButton
.
Show
();
resultReady
=
true
;
Invalidate
(
true
);
}
...
...
@@ -266,10 +292,11 @@ namespace PuzzlePlayer_Namespace
int
playerScore
=
getValue
(
playerCards
);
int
dealerScore
=
getValue
(
getVisableDealerCards
());
// let the dealer hit until it has above 17 points (dealer will hit on soft 17 type shit)
// the dealer must hit until it has 17 or more points
// if the dealer has 17 points and a ace in hand then the dealer must also hit (dealer will hit on soft 17 type shit)
// also if the dealer has a higher score then the player then the dealer won, so no need to push the luck and draw more cards
// if the dealer has the same score then it is a draw and the dealer will not draw more cards
while
(
dealerScore
<
=
17
&&
dealerScore
<
playerScore
)
while
(
(
dealerScore
<
17
&&
dealerScore
<
playerScore
)
||
DealerHasSoft17
())
{
dealerCards
.
Add
((
PopCard
(),
true
));
dealerScore
=
getValue
(
getVisableDealerCards
());
// update dealer score
...
...
@@ -291,18 +318,24 @@ namespace PuzzlePlayer_Namespace
});
}
// paint events for all the different states
private
void
BlackJack_Paint
(
object
sender
,
PaintEventArgs
e
)
//this will always get drawn
private
bool
DealerHasSoft17
()
// fancy blackjack rule
{
Graphics
g
=
e
.
Graphics
;
List
<
Card
>
cards
=
getVisableDealerCards
();
if
(
getValue
(
cards
)
!=
17
)
return
false
;
foreach
(
Card
card
in
cards
)
{
if
(
card
.
value
==
11
)
// check if the dealer has a ace
return
true
;
}
Font
moneyFont
=
new
Font
(
BJFont
,
defaultFontSize
,
FontStyle
.
Bold
);
//g.DrawString("Money: $" + money.ToString(), moneyFont, Brushes.Black, new PointF(0,0));
return
false
;
}
// paint events for all the different states
private
void
Setup_Paint
(
object
sender
,
PaintEventArgs
e
)
{
Graphics
g
=
e
.
Graphics
;
DrawMoney
(
g
);
// draw deployd money
...
...
@@ -355,17 +388,14 @@ namespace PuzzlePlayer_Namespace
g
.
DrawString
(
dealerString
,
f
,
Brushes
.
Black
,
dealerStrPos
);
//draw deployed money
string
deployedString
=
$"$
{
deployedMoney
}
"
;
string
deployedString
=
$"
Playing for
$
{
deployedMoney
}
"
;
SizeF
deployedSF
=
g
.
MeasureString
(
deployedString
,
f
);
PointF
deployedStrPos
=
new
PointF
(
GamePanel
.
Width
/
2
-
deployedSF
.
Width
/
2
,
GamePanel
.
Height
/
2
-
deployedSF
.
Height
/
2
);
g
.
DrawString
(
deployedString
,
f
,
Brushes
.
Black
,
deployedStrPos
);
// draw result text when ready
if
(
resultReady
)
Result_Paint
(
g
);
}
private
void
DrawMoney
(
Graphics
g
)
...
...
@@ -377,42 +407,49 @@ namespace PuzzlePlayer_Namespace
private
void
Result_Paint
(
Graphics
g
)
{
string
resultText
=
""
;
Font
f
=
new
Font
(
BJFont
,
screen
.
Width
/
10
,
FontStyle
.
Bold
);
string
moneyText
=
""
;
Color
c
=
Color
.
Red
;
Font
resFont
=
new
Font
(
BJFont
,
screen
.
Width
/
10
,
FontStyle
.
Bold
);
Font
moneyFont
=
new
Font
(
BJFont
,
screen
.
Width
/
20
,
FontStyle
.
Underline
);
switch
(
result
)
{
case
BJRESULTS
.
Lost
:
resultText
=
"YOU LOSE"
;
moneyText
=
$"You lost -$
{
deployedMoney
}
"
;
break
;
case
BJRESULTS
.
Won
:
resultText
=
"YOU WINNN"
;
moneyText
=
$"You won $
{
deployedMoney
*
2
}
"
;
c
=
Color
.
LimeGreen
;
break
;
case
BJRESULTS
.
Blackjack
:
resultText
=
"!BLACKJACK!"
;
moneyText
=
$"You won $
{
deployedMoney
*
2
}
"
;
c
=
Color
.
Gold
;
break
;
case
BJRESULTS
.
Draw
:
resultText
=
"draw"
;
resultText
=
"Draw"
;
moneyText
=
$"You got your $
{
deployedMoney
}
back"
;
c
=
Color
.
Gray
;
break
;
}
SizeF
size
=
g
.
MeasureString
(
resultText
,
f
);
Point
pos
=
new
Point
(
GamePanel
.
Width
/
2
-
(
int
)(
size
.
Width
/
2
),
GamePanel
.
Height
/
4
-
(
int
)(
size
.
Height
/
2
));
SizeF
resSize
=
g
.
MeasureString
(
resultText
,
resFont
);
Point
resPos
=
new
Point
(
GamePanel
.
Width
/
2
-
(
int
)(
resSize
.
Width
/
2
),
GamePanel
.
Height
/
5
-
(
int
)(
resSize
.
Height
/
2
));
SizeF
moneySize
=
g
.
MeasureString
(
moneyText
,
moneyFont
);
Point
moneyPos
=
new
Point
(
GamePanel
.
Width
/
2
-
(
int
)(
moneySize
.
Width
/
2
),
GamePanel
.
Height
/
3
-
(
int
)(
moneySize
.
Height
/
2
));
//crazy outline
GraphicsPath
p
=
new
GraphicsPath
();
p
.
AddString
(
resultText
,
// text to draw
BJFont
,
// or any other font family
(
int
)
FontStyle
.
Bold
,
// font style (bold, italic, etc.)
g
.
DpiY
*
screen
.
Width
/
10
/
72
,
// em size
pos
,
// location where to draw text
new
StringFormat
());
// set options here (e.g. center alignment)
Pen
pen
=
new
Pen
(
Color
.
Black
,
screen
.
Width
/
50
);
p
.
AddString
(
resultText
,
BJFont
,
(
int
)
FontStyle
.
Bold
,
g
.
DpiY
*
screen
.
Width
/
10
/
72
,
resPos
,
new
StringFormat
());
Pen
pen
=
new
Pen
(
Color
.
Black
,
screen
.
Width
/
60
);
g
.
DrawPath
(
pen
,
p
);
g
.
DrawString
(
resultText
,
f
,
Brushes
.
Red
,
pos
);
//actual text
SolidBrush
brush
=
new
SolidBrush
(
c
);
g
.
DrawString
(
resultText
,
resFont
,
brush
,
resPos
);
g
.
DrawString
(
moneyText
,
moneyFont
,
brush
,
moneyPos
);
}
// some draw thingies
private
void
DrawChip
(
Graphics
g
,
Color
c
,
int
r
,
Point
pos
,
string
value
)
...
...
@@ -445,7 +482,8 @@ namespace PuzzlePlayer_Namespace
Image
img
=
SettingForm
.
GetEmbeddedImage
(
"BlackJack.cards."
+
cardName
+
".png"
);
g
.
DrawImage
(
img
,
pos
.
X
,
pos
.
Y
,
width
,
(
float
)(
width
*
cardMultply
));
//img is 500x726
}
// interact with the cards methodes
// methodes for interacting with the cards
private
Card
PopCard
()
{
if
(
cardsLeft
.
Count
==
0
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment