From 35c74616e1292c02ee83468f59a11fd7b166a35d Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Mon, 22 May 2023 20:39:48 +1000 Subject: [PATCH 01/24] Added List to organise --- list.txt | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 list.txt diff --git a/list.txt b/list.txt new file mode 100644 index 0000000..6ce72d1 --- /dev/null +++ b/list.txt @@ -0,0 +1,48 @@ +Schema: +ID, NAME, WHOOWNSIT, GENRE, BRAINLEVEL, TIMETOPLAY, GAMEPASS + +Satisfactory MBA +Factorio MBA +Magicka 2 MBAT +Phasmo MBA +RS6 MBAT +VCD MBA +DRG MBAT +Star Dew MBA +Minecraft MBAT +TTSim MBAT +BTD6 MBAT +ARMA3 MBA +Blood and Bacon MBAT +NMRIH MBAT +GMOD MBAT +INSIDE THE BACKROOMS MBAT +PZ MBAT +READY OR NOT MBAT +SCP MBAT +WITCH IT MBA +BAUROTRAUMA MA +BORDERLANDS 3 MBA +BORDERLANDS 2 MBA +BORDERLANDS THE PRE SEQUEL MBA +CSGO MBA +GTAV MBA +CREATIVERSE MBA +Dying Light MBA +The forest MBA +RDRO MBAT +Risk of Rain MBAT +ROTMG MBAT +L4D2 MBAT +Unturned MBAT +Due Process MBA + +Gamepass Game: +Aragami +Sea of theives +Astroneer +GWYF +No Mans Sky +Valheim +Power Wash Sim +B4B \ No newline at end of file From 0c32e3048860f375c639201619041c31d0c88453 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Wed, 24 May 2023 22:19:53 +1000 Subject: [PATCH 02/24] made calculator a seperate file, added to list --- .gitignore | 3 +- Acronymbot.py | 131 +------------------------------------------------- Calculator.py | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++ list.txt | 21 ++++++-- 4 files changed, 152 insertions(+), 134 deletions(-) create mode 100644 Calculator.py diff --git a/.gitignore b/.gitignore index bfd19d3..9529f6e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ ledger.db -__pycache__/* \ No newline at end of file +__pycache__/* +*.drawio \ No newline at end of file diff --git a/Acronymbot.py b/Acronymbot.py index e37e3b7..2e04eb6 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -2,6 +2,7 @@ import discord import sqlite3 from discord import app_commands from BlackJack import BlackJack +from Calculator import Calculator botIntents = discord.Intents.all() @@ -105,133 +106,6 @@ async def bal(interaction: discord.Interaction): """ #### Calculator #### """ -class Calculator(discord.ui.View): - def __init__(self, *, timeout=180): - super().__init__(timeout=timeout) - self.numDigs = 0 - self.MAXIMUMBARSIZE = 30 - m = 0 - self.inputOne = 0 - self.inputTwo = None - self.expression = None - self.output = None - self.digit = 1 - self.addition = lambda x, y: x + y - self.subtraction = lambda x, y: x - y - self.multiplication = lambda x, y: x * y - self.division = lambda x, y: x / y - self.exponent = lambda x, y: x ** y - self.funckyDict = { - self.addition: "+", - self.subtraction: "-", - self.multiplication: "*", - self.division: "/", - self.exponent: "^" - } - - def numDigits(self, integer): - numDigits = 0 - while(integer): - numDigits += 1 - integer = integer // 10 - return numDigits - - def display(self): - inputOneLength = self.numDigits(self.inputOne) - inputTwoLength = self.numDigits(self.inputTwo) - outputLength = self.numDigits(self.output) - if (self.inputTwo is None) and (self.output is None): - padding = self.MAXIMUMBARSIZE - inputOneLength - 1 - displayOutput = " ".join(['`', ' ' * padding, f"{self.inputOne}", "`"]) - elif (self.output is None): - padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - 3 - displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{self.funckyDict[self.expression]}", f"{self.inputOne}", "`"]) - else: - padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - outputLength - 4 - displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{self.funckyDict[self.expression]}", f"{self.inputOne}", "=", f"{self.output}", "`"]) - return displayOutput - - async def number(self, interaction: discord.Interaction, number): - self.inputOne = self.inputOne * 10 + number - self.numDigs = self.numDigs + 1 - await interaction.response.edit_message( - content=self.display(), - view=self) - - async def operator(self, interaction: discord.Interaction, operation): - self.inputTwo = self.inputOne - self.inputOne = 0 - self.expression = operation - await interaction.response.edit_message( - content=self.display(), - view=self) - - @discord.ui.button(label="^", style=discord.ButtonStyle.red, row=4) - async def power(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.exponent) - - @discord.ui.button(label="0", style=discord.ButtonStyle.blurple,row=4) - async def zero(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 0) - - @discord.ui.button(label="1", style=discord.ButtonStyle.blurple, row=1) - async def one(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 1) - - @discord.ui.button(label="2", style=discord.ButtonStyle.blurple, row=1) - async def two(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 2) - - @discord.ui.button(label="3", style=discord.ButtonStyle.blurple, row=1) - async def three(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 3) - - @discord.ui.button(label="4", style=discord.ButtonStyle.blurple, row=2) - async def four(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 4) - - @discord.ui.button(label="5", style=discord.ButtonStyle.blurple, row=2) - async def five(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 5) - - @discord.ui.button(label="6", style=discord.ButtonStyle.blurple, row=2) - async def six(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 6) - - @discord.ui.button(label="7", style=discord.ButtonStyle.blurple, row=3) - async def seven(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 7) - - @discord.ui.button(label="8", style=discord.ButtonStyle.blurple, row=3) - async def eight(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 8) - - @discord.ui.button(label="9", style=discord.ButtonStyle.blurple, row=3) - async def nine(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 9) - - @discord.ui.button(label="+", style=discord.ButtonStyle.red, row=1) - async def plus(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.addition) - - @discord.ui.button(label="*", style=discord.ButtonStyle.red, row=2) - async def mult(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.multiplication) - - @discord.ui.button(label="-", style=discord.ButtonStyle.red, row=3) - async def minus(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.subtraction) - - @discord.ui.button(label="=", style=discord.ButtonStyle.green, row=4) - async def equals(self, interaction: discord.Interaction, button: discord.ui.Button): - self.output = self.expression(self.inputTwo, self.inputOne) - await interaction.response.edit_message( - content=self.display(), - view=self) - - @discord.ui.button(label="/", style=discord.ButtonStyle.red, row=4) - async def divide(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.division) @tree.command(description="Do Meth") async def calculator(interaction: discord.Interaction): @@ -239,9 +113,6 @@ async def calculator(interaction: discord.Interaction): calculator = Calculator() await interaction.followup.send(content="`" + " " * calculator.MAXIMUMBARSIZE + "0`", view=calculator) - - - """ #### Fin #### """ diff --git a/Calculator.py b/Calculator.py new file mode 100644 index 0000000..8e27c9d --- /dev/null +++ b/Calculator.py @@ -0,0 +1,131 @@ +import discord + +class Calculator(discord.ui.View): + def __init__(self, *, timeout=180): + super().__init__(timeout=timeout) + self.numDigs = 0 + self.MAXIMUMBARSIZE = 30 + m = 0 + self.inputOne = 0 + self.inputTwo = None + self.expression = None + self.output = None + self.digit = 1 + self.addition = lambda x, y: x + y + self.subtraction = lambda x, y: x - y + self.multiplication = lambda x, y: x * y + self.division = lambda x, y: x / y + self.exponent = lambda x, y: x ** y + self.funckyDict = { + self.addition: "+", + self.subtraction: "-", + self.multiplication: "*", + self.division: "/", + self.exponent: "^" + } + + def numDigits(self, integer): + numDigits = 0 + while(integer): + numDigits += 1 + integer = integer // 10 + return numDigits + + def display(self): + inputOneLength = self.numDigits(self.inputOne) + inputTwoLength = self.numDigits(self.inputTwo) + outputLength = self.numDigits(self.output) + if (self.inputTwo is None) and (self.output is None): + padding = self.MAXIMUMBARSIZE - inputOneLength - 1 + displayOutput = " ".join(['`', ' ' * padding, f"{self.inputOne}", "`"]) + elif (self.output is None): + padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - 3 + displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{self.funckyDict[self.expression]}", f"{self.inputOne}", "`"]) + else: + padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - outputLength - 4 + displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{self.funckyDict[self.expression]}", f"{self.inputOne}", "=", f"{self.output}", "`"]) + return displayOutput + + async def number(self, interaction: discord.Interaction, number): + self.inputOne = self.inputOne * 10 + number + self.numDigs = self.numDigs + 1 + await interaction.response.edit_message( + content=self.display(), + view=self) + + async def operator(self, interaction: discord.Interaction, operation): + self.inputTwo = self.inputOne + self.inputOne = 0 + self.expression = operation + await interaction.response.edit_message( + content=self.display(), + view=self) + + @discord.ui.button(label="^", style=discord.ButtonStyle.red, row=4) + async def power(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.operator(interaction, self.exponent) + + @discord.ui.button(label="0", style=discord.ButtonStyle.blurple,row=4) + async def zero(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 0) + + @discord.ui.button(label="1", style=discord.ButtonStyle.blurple, row=1) + async def one(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 1) + + @discord.ui.button(label="2", style=discord.ButtonStyle.blurple, row=1) + async def two(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 2) + + @discord.ui.button(label="3", style=discord.ButtonStyle.blurple, row=1) + async def three(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 3) + + @discord.ui.button(label="4", style=discord.ButtonStyle.blurple, row=2) + async def four(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 4) + + @discord.ui.button(label="5", style=discord.ButtonStyle.blurple, row=2) + async def five(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 5) + + @discord.ui.button(label="6", style=discord.ButtonStyle.blurple, row=2) + async def six(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 6) + + @discord.ui.button(label="7", style=discord.ButtonStyle.blurple, row=3) + async def seven(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 7) + + @discord.ui.button(label="8", style=discord.ButtonStyle.blurple, row=3) + async def eight(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 8) + + @discord.ui.button(label="9", style=discord.ButtonStyle.blurple, row=3) + async def nine(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.number(interaction, 9) + + @discord.ui.button(label="+", style=discord.ButtonStyle.red, row=1) + async def plus(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.operator(interaction, self.addition) + + @discord.ui.button(label="*", style=discord.ButtonStyle.red, row=2) + async def mult(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.operator(interaction, self.multiplication) + + @discord.ui.button(label="-", style=discord.ButtonStyle.red, row=3) + async def minus(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.operator(interaction, self.subtraction) + + @discord.ui.button(label="=", style=discord.ButtonStyle.green, row=4) + async def equals(self, interaction: discord.Interaction, button: discord.ui.Button): + self.output = self.expression(self.inputTwo, self.inputOne) + if (self.inputTwo == 9) and (self.inputOne == 10): + self.output = 21 + await interaction.response.edit_message( + content=self.display(), + view=self) + + @discord.ui.button(label="/", style=discord.ButtonStyle.red, row=4) + async def divide(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.operator(interaction, self.division) diff --git a/list.txt b/list.txt index 6ce72d1..f9a59d8 100644 --- a/list.txt +++ b/list.txt @@ -1,5 +1,11 @@ -Schema: -ID, NAME, WHOOWNSIT, GENRE, BRAINLEVEL, TIMETOPLAY, GAMEPASS +Schemas - +GAMEINFO: +ID, NAME, GENRE, GAMEPASS +WHOOWNSIT (bitmap index): +ID, MARCUS, BENSON, ALEX, TIM +GAMEFACTORS: +ID, BRAINLEVEL, TIMETOPLAY, CAMPAIGN + Satisfactory MBA Factorio MBA @@ -36,12 +42,21 @@ ROTMG MBAT L4D2 MBAT Unturned MBAT Due Process MBA +Valorant MBAT +Terraria MA +Modded Minecraft MBAT +Warframe MBAT +Ghost recon wildlands (if tim buys) +Ghost Recon Breakpoint MBA +Rocket League BM +OW2 MBAT +ROBLOX MBAT (Prison Royale) Gamepass Game: Aragami Sea of theives Astroneer -GWYF +GWYF No Mans Sky Valheim Power Wash Sim From 41235c87ed96466a008a23f0075390904d1cd65b Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Mon, 29 May 2023 19:31:17 +1000 Subject: [PATCH 03/24] VERY BASIC implementation --- .vscode/settings.json | 3 +++ Acronymbot.py | 12 ++++++++++++ Gamepicker.py | 23 +++++++++++++++++++++++ __pycache__/Ledger.cpython-310.pyc | Bin 2742 -> 2742 bytes 4 files changed, 38 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 Gamepicker.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a6735e5 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.analysis.typeCheckingMode": "off" +} \ No newline at end of file diff --git a/Acronymbot.py b/Acronymbot.py index 2e04eb6..4c4fcd6 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -3,6 +3,7 @@ import sqlite3 from discord import app_commands from BlackJack import BlackJack from Calculator import Calculator +from Gamepicker import pick_game botIntents = discord.Intents.all() @@ -113,6 +114,17 @@ async def calculator(interaction: discord.Interaction): calculator = Calculator() await interaction.followup.send(content="`" + " " * calculator.MAXIMUMBARSIZE + "0`", view=calculator) + +""" +#### Game Picker #### +""" +@tree.command(description="Pick a game") +async def gimmegame(interaction: discord.Interaction): + + game = pick_game() + await interaction.response.send_message(game) + + """ #### Fin #### """ diff --git a/Gamepicker.py b/Gamepicker.py new file mode 100644 index 0000000..104efa9 --- /dev/null +++ b/Gamepicker.py @@ -0,0 +1,23 @@ +import discord +import random + +# Temporary List +games = ["Left 4 Dead 2", + "Aragami", + "Astroneer", + "Factorio", + "Borderlands", + "Stardew Valley", + "Viscera Cleanup Detail", + "SCP"] + +def pick_game(): + + randomIndex = random.randrange(0, len(games)) + coinFlip = random.randrange(0, 2) + if coinFlip: + + return "Valorant" + else: + + return games[randomIndex] diff --git a/__pycache__/Ledger.cpython-310.pyc b/__pycache__/Ledger.cpython-310.pyc index 6d254bab781723dc5977ddb59d4a4be935acaadc..7f10395fbd525f51fd2d1dc36409d29e18dff60c 100644 GIT binary patch delta 27 hcmdlcx=oZjpO=@50SIK6^EPtlGBPG^u4J_31OQQb1;GFS delta 27 hcmdlcx=oZjpO=@50SGFMEjM!KGBP@Du4J_31OQdU1^EB~ From a81359a27430be9cc171dd25f2d12311f538f8ae Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Tue, 30 May 2023 09:43:31 +1000 Subject: [PATCH 04/24] Added a few games to games list --- Gamepicker.py | 6 +++++- list.txt | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Gamepicker.py b/Gamepicker.py index 104efa9..ba0102a 100644 --- a/Gamepicker.py +++ b/Gamepicker.py @@ -9,7 +9,11 @@ games = ["Left 4 Dead 2", "Borderlands", "Stardew Valley", "Viscera Cleanup Detail", - "SCP"] + "SCP", + "Satisfactory", + "Backrooms (Alternate Ending)", + "Magicka 2", + ] def pick_game(): diff --git a/list.txt b/list.txt index f9a59d8..62b0376 100644 --- a/list.txt +++ b/list.txt @@ -1,8 +1,10 @@ Schemas - GAMEINFO: ID, NAME, GENRE, GAMEPASS + WHOOWNSIT (bitmap index): ID, MARCUS, BENSON, ALEX, TIM + GAMEFACTORS: ID, BRAINLEVEL, TIMETOPLAY, CAMPAIGN From 95ff2e7e460cbd27e3e8f9ed5644b6dde4456d2a Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Fri, 9 Jun 2023 19:33:41 +1000 Subject: [PATCH 05/24] calculator updates '=' button --- Calculator.py | 17 +++++++++++++++++ Gamepicker.py | 6 +++++- ledger.db-journal | Bin 4616 -> 0 bytes 3 files changed, 22 insertions(+), 1 deletion(-) delete mode 100644 ledger.db-journal diff --git a/Calculator.py b/Calculator.py index 8e27c9d..6a874cc 100644 --- a/Calculator.py +++ b/Calculator.py @@ -23,6 +23,7 @@ class Calculator(discord.ui.View): self.division: "/", self.exponent: "^" } + self.clearRequirement = 0 def numDigits(self, integer): numDigits = 0 @@ -31,6 +32,11 @@ class Calculator(discord.ui.View): integer = integer // 10 return numDigits + def clear(self): + self.inputOne = 0 + self.inputTwo = None + self.output = None + def display(self): inputOneLength = self.numDigits(self.inputOne) inputTwoLength = self.numDigits(self.inputTwo) @@ -47,6 +53,9 @@ class Calculator(discord.ui.View): return displayOutput async def number(self, interaction: discord.Interaction, number): + if self.output is not None: + self.inputOne = 0 + self.output = None self.inputOne = self.inputOne * 10 + number self.numDigs = self.numDigs + 1 await interaction.response.edit_message( @@ -54,6 +63,7 @@ class Calculator(discord.ui.View): view=self) async def operator(self, interaction: discord.Interaction, operation): + self.output = None self.inputTwo = self.inputOne self.inputOne = 0 self.expression = operation @@ -119,12 +129,19 @@ class Calculator(discord.ui.View): @discord.ui.button(label="=", style=discord.ButtonStyle.green, row=4) async def equals(self, interaction: discord.Interaction, button: discord.ui.Button): + if self.clearRequirement: + self.clear() + else: + self.clearRequirement += 1 self.output = self.expression(self.inputTwo, self.inputOne) if (self.inputTwo == 9) and (self.inputOne == 10): self.output = 21 await interaction.response.edit_message( content=self.display(), view=self) + + self.inputOne = self.output + self.inputTwo = None @discord.ui.button(label="/", style=discord.ButtonStyle.red, row=4) async def divide(self, interaction: discord.Interaction, button: discord.ui.Button): diff --git a/Gamepicker.py b/Gamepicker.py index ba0102a..508d395 100644 --- a/Gamepicker.py +++ b/Gamepicker.py @@ -15,13 +15,17 @@ games = ["Left 4 Dead 2", "Magicka 2", ] +def add_game(game: str): + games.append(game) + + def pick_game(): randomIndex = random.randrange(0, len(games)) coinFlip = random.randrange(0, 2) if coinFlip: - return "Valorant" + return f"Valorant ({games[randomIndex]})" else: return games[randomIndex] diff --git a/ledger.db-journal b/ledger.db-journal deleted file mode 100644 index 9200c0dc7d492dd02a194a6370669971040aae99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4616 zcmZQzK!EwZG53HxCNN?UKuC Date: Fri, 9 Jun 2023 20:51:57 +1000 Subject: [PATCH 06/24] Blackjack ledger works --- Acronymbot.py | 7 +++---- BlackJack.py | 10 +++++----- Calculator.py | 7 +++++++ Ledger.py | 12 +++++++----- __pycache__/BlackJack.cpython-310.pyc | Bin 5464 -> 5540 bytes __pycache__/Ledger.cpython-310.pyc | Bin 2742 -> 2820 bytes ledger.db | Bin 8192 -> 8192 bytes ledger.db-journal | Bin 0 -> 4616 bytes 8 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 ledger.db-journal diff --git a/Acronymbot.py b/Acronymbot.py index 4c4fcd6..26e9fa5 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -98,11 +98,10 @@ async def discordOutput(interaction: discord.Interaction, message): @tree.command(description="Find your Balance") async def bal(interaction: discord.Interaction): - conn = sqlite3.connect("ledger.db") - cur = conn.cursor() ID = interaction.user.id - data = cur.execute("SELECT * FROM ledger WHERE USERID = ?", (ID,)) - await interaction.response.send_message(data) + data = blackJack.ledger.read(ID) + data = list(data) + await interaction.response.send_message(f"Wins:{data[2]}, Losses:{data[3]}. ${data[1]}") """ #### Calculator #### diff --git a/BlackJack.py b/BlackJack.py index 474069d..702230b 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -139,7 +139,7 @@ class BlackJack: playerStats = self.ledger.read(ID) if playerStats is None: self.ledger.write(ID) - playerStats = self.ledger.read + playerStats = self.ledger.read(ID) self.deal() while not gameOver: @@ -190,19 +190,19 @@ class BlackJack: if playerWinState == "w": await send("You won!") win = (2*bet, 1, 0, ID) - # self.ledger.updateLedger(playerStats, win) + self.ledger.update(ID, win) elif playerWinState == "l": await send("You busted!") loss = (-bet, 0, 1, ID) - # self.ledger.updateLedger(playerStats, loss) + self.ledger.update(ID, loss) elif dealerWinState == "w": await send("The Dealer reached 21 before you!") loss = (-bet, 0, 1, ID) - # self.ledger.updateLedger(playerStats, loss) + self.ledger.update(ID, loss) elif dealerWinState == "l": await send("The Dealer busted before you!") win = (2*bet, 1, 0, ID) - # self.ledger.updateLedger(playerStats, win) + self.ledger.update(ID, win) self.returnCards() if len(self.deck) < 0.25 * 52: diff --git a/Calculator.py b/Calculator.py index 6a874cc..fb9d45f 100644 --- a/Calculator.py +++ b/Calculator.py @@ -36,6 +36,7 @@ class Calculator(discord.ui.View): self.inputOne = 0 self.inputTwo = None self.output = None + self.clearRequirement = 0 def display(self): inputOneLength = self.numDigits(self.inputOne) @@ -129,6 +130,12 @@ class Calculator(discord.ui.View): @discord.ui.button(label="=", style=discord.ButtonStyle.green, row=4) async def equals(self, interaction: discord.Interaction, button: discord.ui.Button): + + if self.inputTwo is None: + await interaction.response.edit_message( + content="ERROR", + view=self) + if self.clearRequirement: self.clear() else: diff --git a/Ledger.py b/Ledger.py index 534c62e..8df1653 100644 --- a/Ledger.py +++ b/Ledger.py @@ -14,8 +14,9 @@ class Database(): self.data.execute(insertQuery, (ID,)) self.db.commit() - def update(self, data, newData, updateQuery): + def update(self, ID, data, newData, updateQuery): data = [data[i] + newData[i] for i in range(len(data))] + data.append(ID) self.data.execute(updateQuery, data) class Ledger(Database): @@ -37,15 +38,16 @@ class Ledger(Database): def write(self, ID): insertQuery = """ INSERT INTO ledger(USERID) VALUES(?) """ - super().read(ID, insertQuery) + super().write(ID, insertQuery) - def update(self, data, newData): + def update(self, ID, newData): query = """ UPDATE ledger SET MONEY = ?, WINS = ?, - LOSSES = ?, + LOSSES = ? WHERE USERID = ?""" - super().update(data, newData, query) + data = list(self.read(ID))[1:] + super().update(ID, data, newData, query) def main(): pass diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index 9b2f7de9e3c0ee5ad7303149a6dad8596daeb9fc..557540f4f64098ae811d7cd723ca135285619978 100644 GIT binary patch delta 453 zcmZXQJxc>Y5QcZoTyl50%k5oaM2*oPDky$60WItV12z`6g0LwxpyrIIuz`^DVwlvD z1JQt$mFSPqR?_(w>{L+aE})3J3_Hxb&%DDtPhZYh`<7)eIE!CgY^3QuS8Kc)};KV=w4+854R*@hbRY z_b=7xn-zeV$&^X-RRMQ s*sc_@>)zNM+P_kZfC(CfiLK;umIDU^5_JE*oGO}vxs-%0yhuHK1JU1god5s; delta 355 zcmY+Ay-EW?5XW~ex!m{d-6bZF#4kh$N<>Jbkj6^$0AgjgAS8H_RY;LN38b|U=LPN{ zR@zvI;4_#$&tPe3qjQRd3$yI}=KtT>+1d7D%e(MAo6&k}?~C}!`}E-sP2OCuDb{DH zrXT}g`MD2CNwKt$G0OGJ7wqwNxJSfLP6mmtblDv?FbOvCk?(dU$`IB-ladr}?h$rk z#V%2Y=rvLAk5a`{mOMiqEb*IRLz(hkIl?8~3_HOFz33!ZHJ+)W%Vp|ttbeGY;5ZKJ zZroM2hz8m%$PzkX(~Vo?^?yJe4{}f;@T=ItQMlGh{k-!Pr>TM|i0Xim`H*g`O`*pG yJIW_yX^8Xi3nH9HJzOb2@RWW@n-swXGY?#pN7V>y&4=LMZWi#oqTm$YE3e-IXjwb} diff --git a/__pycache__/Ledger.cpython-310.pyc b/__pycache__/Ledger.cpython-310.pyc index 7f10395fbd525f51fd2d1dc36409d29e18dff60c..1f8cdbd40fd02c003f7b0ac6158049cf7c2598cf 100644 GIT binary patch delta 599 zcmZ8eO-md>5bf&j*_|ETH6**UCXu*)>~0206ft7{fDi~F7|1OQgENRSZZ#nMzY-(s%G6j`!jzNpE^Kg2+$Z~-7vv84t&)#gZDy|gk5gU&{jsW|Fng`nGwIw6)Q z54nJ6;RtireALUu0?`R@%&}gBhM9Njzy9i5fV#OZoN7;E%j^~>t8GrGFpM!gA(%3k z#gi6C@J*ee#_%AN9WC?OZm;qHTrD49fk+4kszoMD)yt^__}%90FKXb{WF zzP}y^NwOZrvF{J1%k|5v<{~yJ&LvCuQ*2RzQD@YuTG%wodAGR49!a19U(uG?zP}x8 gc6^_vVkwcG$dBZHoTkqkH)l@0RJC8&$^m_M4>-GQcK`qY delta 499 zcmZ8dJxc>Y5WT&SOLD57fA7Hp(p>-@4OCf@d zWe{xa{2A9O_z!G#=CE>M-puZs*_k)D+1HHKO(aYWPmy=rx5&)e=8Fd1{|?1u9IaPZ z$J~~_cB)Ug&((y_3PvEH)oFVHKl3^e!z`fh90TT5+t?9QTU1ZRA+y!k%)MCRi?OWw zj@%p1I@Hu%)K0HZl|?X5kU}V__vpliHM(aA{^jKGt)_-@wN4ELS~y@H1DB0?U%Sz! z%xAvt^GD7!S3A-ieSh?zKIBl}EU7J-QQcVb+QAvH25bbHnc`4H0i!@%4m`N}-8TYV2oNIDYA=wO+kLXadNZ9v0^9Rrmy7b>B&P9e#*OFIrm0JWLZ0kra#RBYV+sH%(hm~= delta 50 zcmZp0XmFSy&B!!S#+i|6W5N=CHb(yU4E*mm3ksa&pV%NF$j`{ez{beI!MHtsa#RBY GV+sIV?hNSw diff --git a/ledger.db-journal b/ledger.db-journal new file mode 100644 index 0000000000000000000000000000000000000000..fe062861408064a61c6f1169b8aefc3fa2fc93c9 GIT binary patch literal 4616 zcmZQzKmc>8Z(%?l6BscFAS6av!#M<)ctMfQe~*FxJ&+g$qaiRF0;3@?8UmvsFd71* zAut*OqaiRF0;3@?8UmvsFd70wFa-FS*cjLtIXIXsYp2uz$97Wq86g6U+v6ukH83!y HfX00QVw?-A literal 0 HcmV?d00001 From 5dbc250a4a54c4d37713f6780dfb6a7db1920989 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Mon, 12 Jun 2023 11:19:03 +1000 Subject: [PATCH 07/24] Ledger reset bug fixed --- Acronymbot.py | 2 +- Ledger.py | 2 ++ __pycache__/Ledger.cpython-310.pyc | Bin 2820 -> 2842 bytes ledger.db | Bin 8192 -> 8192 bytes ledger.db-journal | Bin 4616 -> 0 bytes 5 files changed, 3 insertions(+), 1 deletion(-) delete mode 100644 ledger.db-journal diff --git a/Acronymbot.py b/Acronymbot.py index 26e9fa5..01d7c0a 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -85,7 +85,7 @@ async def bj(interaction: discord.Interaction): discinput = lambda m: discordInput(interaction, m) discoutput = lambda m: discordOutput(interaction, m) await interaction.response.send_message("Let's play Black Jack!") - await blackJack.play_game(interaction.user.id, 100, discinput, discoutput) + await blackJack.play_game(interaction.user.id, interaction.message, discinput, discoutput) async def discordInput(interaction: discord.Interaction, message:str): response = HitOrStand() diff --git a/Ledger.py b/Ledger.py index 8df1653..d965013 100644 --- a/Ledger.py +++ b/Ledger.py @@ -18,6 +18,8 @@ class Database(): data = [data[i] + newData[i] for i in range(len(data))] data.append(ID) self.data.execute(updateQuery, data) + self.db.commit() + class Ledger(Database): def __init__(self) -> None: diff --git a/__pycache__/Ledger.cpython-310.pyc b/__pycache__/Ledger.cpython-310.pyc index 1f8cdbd40fd02c003f7b0ac6158049cf7c2598cf..f23950111432625015d3e21b18ad5cfd76053957 100644 GIT binary patch delta 123 zcmZn>n`{LJoym&W=4(8WgKCQjJlK0a^^Ei ZOt$5UWi*>Sn=64+j6;rtnTwI-KLDXZ93=n% delta 104 zcmbOw)*{B6&&$ij00foH%_&S9dHtCgEhfh@n@^s{yqb}9vKNcolPfgMBlj+U6dPFh)l0$&Wen8O0_CbHy^6Oy0ylJ~l=U4kpXmDK$(&OdxqiMhK6Afp?84HvpBL5*q*j delta 72 zcmZp0XmFSy&B#1a#+i|MW5PmyZUzPhCjNU2{O|eiZ59;R%|Ee0T#28Fje(7kgM-Pk Yc1jHs149ZwBSe64d;H|61_s6y0DQv`Bme*a diff --git a/ledger.db-journal b/ledger.db-journal deleted file mode 100644 index fe062861408064a61c6f1169b8aefc3fa2fc93c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4616 zcmZQzKmc>8Z(%?l6BscFAS6av!#M<)ctMfQe~*FxJ&+g$qaiRF0;3@?8UmvsFd71* zAut*OqaiRF0;3@?8UmvsFd70wFa-FS*cjLtIXIXsYp2uz$97Wq86g6U+v6ukH83!y HfX00QVw?-A From 6e80036ba79bc53718e6e333bf2e8e0dc475035b Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Mon, 12 Jun 2023 12:32:36 +1000 Subject: [PATCH 08/24] Blackjack is a state machine --- Acronymbot.py | 2 +- BlackJack.py | 193 ++++++++++++++++---------- __pycache__/BlackJack.cpython-310.pyc | Bin 5540 -> 6091 bytes ledger.db | Bin 8192 -> 8192 bytes 4 files changed, 119 insertions(+), 76 deletions(-) diff --git a/Acronymbot.py b/Acronymbot.py index 01d7c0a..26e9fa5 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -85,7 +85,7 @@ async def bj(interaction: discord.Interaction): discinput = lambda m: discordInput(interaction, m) discoutput = lambda m: discordOutput(interaction, m) await interaction.response.send_message("Let's play Black Jack!") - await blackJack.play_game(interaction.user.id, interaction.message, discinput, discoutput) + await blackJack.play_game(interaction.user.id, 100, discinput, discoutput) async def discordInput(interaction: discord.Interaction, message:str): response = HitOrStand() diff --git a/BlackJack.py b/BlackJack.py index 702230b..24f1f5e 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -1,6 +1,16 @@ import random import Ledger +# Game States +INIT = 0 +PLAYING = 1 +ENDING = 2 +FINISHED = 3 +OVER = 5 +CHECKING = 6 + + + def convertNumberToCard(cardNumber): # Cards index from 0 i.e ace is 0, and the highest card value is 51 if cardNumber <= 12: @@ -49,13 +59,21 @@ def handNumbersToCards(hand): def getHandTotal(hand): cardValue = lambda c: min(c % 13 + 1, 10) i = 0 + aces = 0 for card in hand: card = cardValue(card) - if (card == 1) and (i < 20): + if card == 1: + aces += 1 + else: + i += card + + while aces > 0: + if i < 20: card = 11 if (i + card) > 21: card = 1 i += card + aces -= 1 return i def showDeck(deck): @@ -66,6 +84,7 @@ def showDeck(deck): class BlackJack: def __init__(self): + self.gameState = INIT self.playerTurn = True self.deck = generateDeck() random.shuffle(self.deck) @@ -118,11 +137,12 @@ class BlackJack: else: return "c" - def dealerHitLogic(self, hand): - total = getHandTotal() + def dealerHitLogic(self): + total = getHandTotal(self.dealerHand) if total > 17: self.stand() - elif total <= 16: + return True + else: self.hit() @@ -133,78 +153,101 @@ class BlackJack: elif state == "l": gameOver = True return gameOver + + def compareHands(self): + dealerTotal = getHandTotal(self.dealerHand) + playerTotal = getHandTotal(self.playerHand) + if dealerTotal < playerTotal: + return "l" + else: + return "w" async def play_game(self, ID, bet, recv, send): - gameOver = False - playerStats = self.ledger.read(ID) - if playerStats is None: - self.ledger.write(ID) - playerStats = self.ledger.read(ID) - - self.deal() - while not gameOver: - play = None - playerStood = False - validInput = False - - playerWinState = self.checkHandState(self.playerHand) - dealerWinState = self.checkHandState(self.dealerHand) - gameOver = self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState) - if gameOver: - continue - - await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards( - self.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(self.dealerHand[0]) + "??") - play = await recv("Hit or Stand? (h/s)") - while not validInput: - if play == "h": - self.hit() - validInput = True - elif play == "s": - self.stand() - validInput = True - playerStood = True - - playerWinState = self.checkHandState(self.playerHand) - if self.checkGameOver(playerWinState): - continue - - # Dealers turn - if playerStood: - while dealerWinState == 'c': - # Dealer hits - self.hit() - # Player stands - self.stand() - # Loop ends when game is over - dealerWinState = self.checkHandState(self.dealerHand) - else: - self.hit() - dealerWinState = self.checkHandState(self.dealerHand) - - if self.checkGameOver(dealerWinState): - continue - await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) + - "\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand)) - if playerWinState == "w": - await send("You won!") - win = (2*bet, 1, 0, ID) - self.ledger.update(ID, win) - elif playerWinState == "l": - await send("You busted!") - loss = (-bet, 0, 1, ID) - self.ledger.update(ID, loss) - elif dealerWinState == "w": - await send("The Dealer reached 21 before you!") - loss = (-bet, 0, 1, ID) - self.ledger.update(ID, loss) - elif dealerWinState == "l": - await send("The Dealer busted before you!") - win = (2*bet, 1, 0, ID) - self.ledger.update(ID, win) + while self.gameState != OVER: - self.returnCards() - if len(self.deck) < 0.25 * 52: - await send("Shuffling Deck") - self.shuffle() + if self.gameState == INIT: + + gameOver = False + playerStats = self.ledger.read(ID) + if playerStats is None: + self.ledger.write(ID) + playerStats = self.ledger.read(ID) + self.deal() + + play = None + playerStood = False + dealerStood = False + validInput = False + self.gameState = PLAYING + + elif self.gameState == PLAYING: + + await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards( + self.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(self.dealerHand[0]) + "??") + play = await recv("Hit or Stand? (h/s)") + while not validInput: + if play == "h": + self.hit() + validInput = True + elif play == "s": + self.stand() + playerStood = True + validInput = True + + self.dealerHitLogic() + playerWinState = self.checkHandState(self.playerHand) + dealerWinState = self.checkHandState(self.dealerHand) + self.gameState = CHECKING + + elif self.gameState == ENDING: + + # Players turn + self.stand() + # Dealers turn + dealerStood = self.dealerHitLogic() + # Loop ends when game is over + dealerWinState = self.checkHandState(self.dealerHand) + if dealerStood: + + if dealerWinState == "c": + + dealerWinState = self.compareHands() + self.gameState = CHECKING + + elif self.gameState == CHECKING: + + if self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState): + self.gameState = FINISHED + elif playerStood: + self.gameState = ENDING + else: + self.gameState = PLAYING + + elif self.gameState == FINISHED: + + await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) + + "\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand)) + if playerWinState == "w": + await send("You won!") + win = (2*bet, 1, 0, ID) + self.ledger.update(ID, win) + elif playerWinState == "l": + await send("You busted!") + loss = (-bet, 0, 1, ID) + self.ledger.update(ID, loss) + elif dealerWinState == "w": + await send("The Dealer reached 21 before you!") + loss = (-bet, 0, 1, ID) + self.ledger.update(ID, loss) + elif dealerWinState == "l": + await send("The Dealer busted before you!") + win = (2*bet, 1, 0, ID) + self.ledger.update(ID, win) + + self.returnCards() + if len(self.deck) < 0.25 * 52: + await send("Shuffling Deck") + self.shuffle() + + self.gameState = OVER diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index 557540f4f64098ae811d7cd723ca135285619978..ff9eb03386b80046d84cec81b0e3ab02785eb798 100644 GIT binary patch literal 6091 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 YJjXXm_M{~NruT$r`8G&!y+YajA7<-exBvhE diff --git a/ledger.db b/ledger.db index f820787f2e5864524e36652ea47849c9f3a094ae..7fac1818f3161de2cd189fb12ddc7d8ffbefc628 100644 GIT binary patch delta 87 zcmZp0XmFSy%_uif#+gxWW5PmyZUzPhCjJ`?{5SaDY!(#Q%|9`K!%%^ZiIanId;DY} lMm7dECPqdOJF0NO n Date: Mon, 12 Jun 2023 17:29:25 +1000 Subject: [PATCH 09/24] Fixed control ofdealer bug --- Acronymbot.py | 2 +- BlackJack.py | 4 +++- Gamepicker.py | 17 ++++++++++++++++- __pycache__/BlackJack.cpython-310.pyc | Bin 6091 -> 6101 bytes ledger.db | Bin 8192 -> 8192 bytes 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Acronymbot.py b/Acronymbot.py index 26e9fa5..e21a209 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -118,7 +118,7 @@ async def calculator(interaction: discord.Interaction): #### Game Picker #### """ @tree.command(description="Pick a game") -async def gimmegame(interaction: discord.Interaction): +async def gg(interaction: discord.Interaction): game = pick_game() await interaction.response.send_message(game) diff --git a/BlackJack.py b/BlackJack.py index 24f1f5e..99f4bd1 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -163,12 +163,13 @@ class BlackJack: return "w" async def play_game(self, ID, bet, recv, send): + + self.gameState = INIT while self.gameState != OVER: if self.gameState == INIT: - gameOver = False playerStats = self.ledger.read(ID) if playerStats is None: self.ledger.write(ID) @@ -176,6 +177,7 @@ class BlackJack: self.deal() play = None + self.playerTurn = True playerStood = False dealerStood = False validInput = False diff --git a/Gamepicker.py b/Gamepicker.py index 508d395..1929221 100644 --- a/Gamepicker.py +++ b/Gamepicker.py @@ -18,7 +18,6 @@ games = ["Left 4 Dead 2", def add_game(game: str): games.append(game) - def pick_game(): randomIndex = random.randrange(0, len(games)) @@ -29,3 +28,19 @@ def pick_game(): else: return games[randomIndex] + +I = 1000000000 +i = I +zeros = 0 +ones = 0 +while i > 0: + number = random.randrange(0, 2) + if number: + ones += 1 + + else: + zeros += 1 + i -= 1 + +percentZeros = zeros/I +print(percentZeros) diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index ff9eb03386b80046d84cec81b0e3ab02785eb798..27c346363569c47b782b882ac4908b1ba6c15dc9 100644 GIT binary patch delta 998 zcma)5O=}ZD7@nEk>~40mNz-hyZDTKrpn~*Li{in93hl*GQ$*`Wp-u}LSYa}Hnl-IK z@n&VggQw&tXaqfZ5j-gP0eb0A@aWlt&&;av6HIt#->>I+-#oKv)dwMi%O!%Dplkvm8@-TQ*qDuq|L+;cvjz5bU@RB zDsXb0h`rhUvAA1Mr0)y}C7h%V2YS`zEY;@0iqg}Z+ca4;TpqX{D4ScdD1Bst9_`VX za62Zll*fn)FbA0snKE}LiRtlTJQpx$9@CV?i#qD+Fm+V1b4xkg2ff5X6|)dci%ALD z0NG7s$G&AW*eo(wO6g5;npwdwOfOcLQ4@1Q(8Jj`Rl`G!K$oS84<&q}`8MhhkimK9pQIaevpN|{d zVb!&HZ3I*-Al&6u1Jk#c!$Jd_gEslN7RE*YiE09s4@-cmk5KuNYya93;!f(jl~Y)w z*`vJCCXnzpNa7I*x^|f^rbRbWu-`V$J6MtQtP#^&XNGMH01)>3oG*}@42?VhqYY?$8XuUwQhlz}! zpozFYaBgS=G6fX{NHkDD0TTWbNHny(T`Q0viri`UX5P%aH#fKUb?)O_bSH{@hU>-P z38z<4twiI|!O}76mjLFl-edJLv0?bfaOb1u@>8;Zc}sjr3doo%HfvG%K{*OKm&>yw__%Q zi4V`g$^i+1MBHsKljFsBE<)lggp|$m+g{=+zxPmiya4vQie*L9il6x15NH5Y0WA&t zxB;1&L6tAf~4ArFza z1-y#*Hp3UgQ0^o28KIgAhSYm!tZ+!;gRC2&w<<3_$%?VxOh(szZA$AM3m@q5o+cMz za+B#s|4g?5VAl`>UNppw^maM!yNYf&Nd!SVixsJ8Xc6l!seqSF);#1Z+e63HtblQs zPnoLXpQ@s%I*v(9xSOb|?xm^-v00Q&#MaZPO1%2tmN2(z{n=y#qB8^H^$w1h*nm*H zLx^RwCJRTrr4Oq)<~@(IWt^d9c4Yco`n1xdmGoOBJG@^k;GY;f&5LKwi+Pyhr13@j z8XxB#h+DEP7SpV{&Cd+q+%>9xCDEF+Shs12rH w!mu8NmTx&$NO=lz=gF}~-)jK{E1Jzv-b{bgTeU0NU)5VnZCvZ$=RAcmMzZ diff --git a/ledger.db b/ledger.db index 7fac1818f3161de2cd189fb12ddc7d8ffbefc628..0704eba57212b255ba317d48d164f154da629cd1 100644 GIT binary patch delta 42 xcmZp0XmFSy&1gPR#+lK4V?u|#1p5VUW+5gv1~w)}MkdSJDK$(C4B}VRgaP3$2~z+7 delta 42 xcmZp0XmFSy%_uif#+gxWV?u|#1gi);lMoXd0~-?~Ba>zAlo}=m2Ei#(+yKa22m}BC From 762841fb202c36b5764c229952c337a53c040051 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Mon, 12 Jun 2023 20:30:53 +1000 Subject: [PATCH 10/24] Calculator - Equals is broken --- Calculator.py | 274 +++++++++++++++++++++++++------------------------- Gamepicker.py | 16 +-- 2 files changed, 136 insertions(+), 154 deletions(-) diff --git a/Calculator.py b/Calculator.py index fb9d45f..bfabc35 100644 --- a/Calculator.py +++ b/Calculator.py @@ -1,155 +1,151 @@ import discord +addition = lambda x, y: x + y +subtraction = lambda x, y: x - y +multiplication = lambda x, y: x * y +division = lambda x, y: x / y +exponent = lambda x, y: x ** y + +funckyDict = { + addition: "+", + subtraction: "-", + multiplication: "*", + division: "/", + exponent: "^" +} + + +async def number(self, interaction: discord.Interaction, number): + if self.output is not None: + self.inputOne = 0 + self.output = None + self.inputOne = self.inputOne * 10 + number + self.numDigs = self.numDigs + 1 + await interaction.response.edit_message( + content=self.display(), + view=self) + +async def operator(self, interaction: discord.Interaction, operation): + self.output = None + self.inputTwo = self.inputOne + self.inputOne = 0 + self.expression = operation + await interaction.response.edit_message( + content=self.display(), + view=self) + + +class NumberButton(discord.ui.Button): + + def __init__(self, number: int, row) -> None: + super().__init__() + self.number = number + self.row = row + self.style = discord.ButtonStyle.blurple + self.label = str(number) + + async def callback(self, interaction: discord.Interaction): + await number(self.view, interaction, self.number) + +class OperatorButton(discord.ui.Button): + + def __init__(self, function, row) -> None: + super().__init__() + self.function = function + self.row = row + self.style = discord.ButtonStyle.red + self.label = funckyDict[function] + + async def callback(self, interaction: discord.Interaction): + await operator(self.view, interaction, self.function) + class Calculator(discord.ui.View): - def __init__(self, *, timeout=180): - super().__init__(timeout=timeout) - self.numDigs = 0 - self.MAXIMUMBARSIZE = 30 - m = 0 - self.inputOne = 0 - self.inputTwo = None - self.expression = None - self.output = None - self.digit = 1 - self.addition = lambda x, y: x + y - self.subtraction = lambda x, y: x - y - self.multiplication = lambda x, y: x * y - self.division = lambda x, y: x / y - self.exponent = lambda x, y: x ** y - self.funckyDict = { - self.addition: "+", - self.subtraction: "-", - self.multiplication: "*", - self.division: "/", - self.exponent: "^" - } - self.clearRequirement = 0 + def __init__(self, *, timeout=180): + super().__init__(timeout=timeout) + self.numDigs = 0 + self.MAXIMUMBARSIZE = 30 + m = 0 + self.inputOne = 0 + self.inputTwo = None + self.expression = None + self.output = None + self.digit = 1 - def numDigits(self, integer): - numDigits = 0 - while(integer): - numDigits += 1 - integer = integer // 10 - return numDigits - def clear(self): - self.inputOne = 0 - self.inputTwo = None - self.output = None - self.clearRequirement = 0 + self.clearRequirement = 0 - def display(self): - inputOneLength = self.numDigits(self.inputOne) - inputTwoLength = self.numDigits(self.inputTwo) - outputLength = self.numDigits(self.output) - if (self.inputTwo is None) and (self.output is None): - padding = self.MAXIMUMBARSIZE - inputOneLength - 1 - displayOutput = " ".join(['`', ' ' * padding, f"{self.inputOne}", "`"]) - elif (self.output is None): - padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - 3 - displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{self.funckyDict[self.expression]}", f"{self.inputOne}", "`"]) - else: - padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - outputLength - 4 - displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{self.funckyDict[self.expression]}", f"{self.inputOne}", "=", f"{self.output}", "`"]) - return displayOutput - - async def number(self, interaction: discord.Interaction, number): - if self.output is not None: - self.inputOne = 0 - self.output = None - self.inputOne = self.inputOne * 10 + number - self.numDigs = self.numDigs + 1 - await interaction.response.edit_message( - content=self.display(), - view=self) - - async def operator(self, interaction: discord.Interaction, operation): - self.output = None - self.inputTwo = self.inputOne - self.inputOne = 0 - self.expression = operation - await interaction.response.edit_message( - content=self.display(), - view=self) + numRows = 4 + numColumns = 4 - @discord.ui.button(label="^", style=discord.ButtonStyle.red, row=4) - async def power(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.exponent) - - @discord.ui.button(label="0", style=discord.ButtonStyle.blurple,row=4) - async def zero(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 0) - - @discord.ui.button(label="1", style=discord.ButtonStyle.blurple, row=1) - async def one(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 1) + buttonFunctions = [ + [1, 2, 3, addition], + [4, 5, 6, multiplication], + [7, 8, 9, subtraction], + [exponent, 0, None, division] + ] - @discord.ui.button(label="2", style=discord.ButtonStyle.blurple, row=1) - async def two(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 2) + for i in range(0, numRows): + for j in range(0, numColumns): + item = buttonFunctions[i][j] + if item is None: + continue + if isinstance(item, int): - @discord.ui.button(label="3", style=discord.ButtonStyle.blurple, row=1) - async def three(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 3) + button = NumberButton(item, i) + else: - @discord.ui.button(label="4", style=discord.ButtonStyle.blurple, row=2) - async def four(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 4) + button = OperatorButton(item, i) + self.add_item(button) - @discord.ui.button(label="5", style=discord.ButtonStyle.blurple, row=2) - async def five(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 5) - @discord.ui.button(label="6", style=discord.ButtonStyle.blurple, row=2) - async def six(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 6) - @discord.ui.button(label="7", style=discord.ButtonStyle.blurple, row=3) - async def seven(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 7) + def numDigits(self, integer): + numDigits = 0 + while(integer): + numDigits += 1 + integer = integer // 10 + return numDigits - @discord.ui.button(label="8", style=discord.ButtonStyle.blurple, row=3) - async def eight(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 8) + def clear(self): + self.inputOne = 0 + self.inputTwo = None + self.output = None + self.clearRequirement = 0 - @discord.ui.button(label="9", style=discord.ButtonStyle.blurple, row=3) - async def nine(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.number(interaction, 9) + def display(self): + inputOneLength = self.numDigits(self.inputOne) + inputTwoLength = self.numDigits(self.inputTwo) + outputLength = self.numDigits(self.output) + if (self.inputTwo is None) and (self.output is None): + padding = self.MAXIMUMBARSIZE - inputOneLength - 1 + displayOutput = " ".join(['`', ' ' * padding, f"{self.inputOne}", "`"]) + elif (self.output is None): + padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - 3 + displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{funckyDict[self.expression]}", f"{self.inputOne}", "`"]) + else: + padding = self.MAXIMUMBARSIZE - inputOneLength - inputTwoLength - outputLength - 4 + displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{funckyDict[self.expression]}", f"{self.inputOne}", "=", f"{self.output}", "`"]) + return displayOutput - @discord.ui.button(label="+", style=discord.ButtonStyle.red, row=1) - async def plus(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.addition) - - @discord.ui.button(label="*", style=discord.ButtonStyle.red, row=2) - async def mult(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.multiplication) - - @discord.ui.button(label="-", style=discord.ButtonStyle.red, row=3) - async def minus(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.subtraction) - - @discord.ui.button(label="=", style=discord.ButtonStyle.green, row=4) - async def equals(self, interaction: discord.Interaction, button: discord.ui.Button): - - if self.inputTwo is None: - await interaction.response.edit_message( - content="ERROR", - view=self) - - if self.clearRequirement: - self.clear() - else: - self.clearRequirement += 1 - self.output = self.expression(self.inputTwo, self.inputOne) - if (self.inputTwo == 9) and (self.inputOne == 10): - self.output = 21 - await interaction.response.edit_message( - content=self.display(), - view=self) - - self.inputOne = self.output - self.inputTwo = None - - @discord.ui.button(label="/", style=discord.ButtonStyle.red, row=4) - async def divide(self, interaction: discord.Interaction, button: discord.ui.Button): - await self.operator(interaction, self.division) + @discord.ui.button(label="=", style=discord.ButtonStyle.green, row=4) + async def equals(self, interaction: discord.Interaction, button: discord.ui.Button): + + if self.inputTwo is None: + await interaction.response.edit_message( + content="ERROR", + view=self) + + if self.clearRequirement: + self.clearRequirement = 0 + self.clear() + else: + self.clearRequirement += 1 + self.output = self.expression(self.inputTwo, self.inputOne) + if (self.inputTwo == 9) and (self.inputOne == 10): + self.output = 21 + await interaction.response.edit_message( + content=self.display(), + view=self) + + self.inputOne = self.output + self.inputTwo = None \ No newline at end of file diff --git a/Gamepicker.py b/Gamepicker.py index 1929221..15ab5a8 100644 --- a/Gamepicker.py +++ b/Gamepicker.py @@ -22,6 +22,7 @@ def pick_game(): randomIndex = random.randrange(0, len(games)) coinFlip = random.randrange(0, 2) + print(coinFlip) if coinFlip: return f"Valorant ({games[randomIndex]})" @@ -29,18 +30,3 @@ def pick_game(): return games[randomIndex] -I = 1000000000 -i = I -zeros = 0 -ones = 0 -while i > 0: - number = random.randrange(0, 2) - if number: - ones += 1 - - else: - zeros += 1 - i -= 1 - -percentZeros = zeros/I -print(percentZeros) From 50251c3f1d685e76fd1fdacfd232bced58058285 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Wed, 5 Jul 2023 09:40:01 +1000 Subject: [PATCH 11/24] Started working on rewriting blackjack --- BlackJack.py | 53 ++--- BlackJack2.py | 89 +++++++++ BlackJackTest.py | 271 ++++++++++++++++++++++++++ Calculator.py | 2 +- __pycache__/BlackJack.cpython-310.pyc | Bin 6101 -> 5929 bytes ledger.db | Bin 8192 -> 8192 bytes 6 files changed, 389 insertions(+), 26 deletions(-) create mode 100644 BlackJack2.py create mode 100644 BlackJackTest.py diff --git a/BlackJack.py b/BlackJack.py index 99f4bd1..e2bc738 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -84,7 +84,7 @@ def showDeck(deck): class BlackJack: def __init__(self): - self.gameState = INIT + self.gameInSession = False self.playerTurn = True self.deck = generateDeck() random.shuffle(self.deck) @@ -93,12 +93,6 @@ class BlackJack: self.dealerHand = [] self.ledger = Ledger.Ledger() - def getPH(self): - return self.playerHand - - def getDH(self): - return self.dealerHand - def returnCards(self): self.discard.extend(self.playerHand) self.playerHand.clear() @@ -164,30 +158,38 @@ class BlackJack: async def play_game(self, ID, bet, recv, send): - self.gameState = INIT + if self.gameInSession: + await send("Fuck you") + return + else: + self.gameInSession = True + gameState = INIT - while self.gameState != OVER: + while gameState != OVER: - if self.gameState == INIT: + if gameState == INIT: + self.returnCards() playerStats = self.ledger.read(ID) if playerStats is None: self.ledger.write(ID) playerStats = self.ledger.read(ID) self.deal() - + playerWinState = self.checkHandState(self.playerHand) + dealerWinState = self.checkHandState(self.dealerHand) + play = None - self.playerTurn = True playerStood = False dealerStood = False validInput = False - self.gameState = PLAYING + + gameState = CHECKING - elif self.gameState == PLAYING: + elif gameState == PLAYING: await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards( self.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(self.dealerHand[0]) + "??") - play = await recv("Hit or Stand? (h/s)") + play = await recv("Hit or Stand?") while not validInput: if play == "h": self.hit() @@ -197,12 +199,12 @@ class BlackJack: playerStood = True validInput = True - self.dealerHitLogic() + dealerStood = self.dealerHitLogic() playerWinState = self.checkHandState(self.playerHand) dealerWinState = self.checkHandState(self.dealerHand) - self.gameState = CHECKING + gameState = CHECKING - elif self.gameState == ENDING: + elif gameState == ENDING: # Players turn self.stand() @@ -215,18 +217,18 @@ class BlackJack: if dealerWinState == "c": dealerWinState = self.compareHands() - self.gameState = CHECKING + gameState = CHECKING - elif self.gameState == CHECKING: + elif gameState == CHECKING: if self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState): - self.gameState = FINISHED + gameState = FINISHED elif playerStood: - self.gameState = ENDING + gameState = ENDING else: - self.gameState = PLAYING + gameState = PLAYING - elif self.gameState == FINISHED: + elif gameState == FINISHED: await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) + "\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand)) @@ -252,4 +254,5 @@ class BlackJack: await send("Shuffling Deck") self.shuffle() - self.gameState = OVER + gameState = OVER + self.gameInSession = False diff --git a/BlackJack2.py b/BlackJack2.py new file mode 100644 index 0000000..337c316 --- /dev/null +++ b/BlackJack2.py @@ -0,0 +1,89 @@ +import random + +""" +Class which describes playing cards +""" +class Card(): + """ + A joker card has value 0 and suit 0 + """ + HEARTS = 1 + DIAMONDS = 2 + SPADES = 3 + CLUBS = 4 + + def __init__(self, value, suit) -> None: + self.value = value + self.suit = suit + + def __str__(self) -> str: + suits = ["J", "♥", "♦", "♠", "♣"] + special_cards = {1: "A", 11: "J", 12: "Q", 13: "K"} + strValue = "" + + if self.value in special_cards.keys(): + strValue = special_cards[self.value] + else: + strValue = str(self.value) + + string = "" + string.format("%s %s", suits[self.suit], strValue) + return string + + + + +""" +Class for interacting with a deck of cards +""" +class Deck(): + def __init__(self) -> None: + self.deck = [] + self.discard = [] + self.joker = False + if self.joker: + self.deck = [x for x in range(0, 52)] + else: + self.deck = [x for x in range(0, 51)] + + def shuffle(self): + random.shuffle(self.deck) + + def take_from_deck(self): + card = self.deck.pop() + return card + + def return_to_deck_top(self, card): + self.deck.insert(0, card) + + def returnToDeckBottom(self, card): + self.deck.append(card) + + def addToDiscard(self, card): + self.discard.insert(0, card) + + def returnFromDiscard(self): + self.returnToDeckTop(self.discard.pop()) + + def __str__(self) -> str: + string = "" + for card in self.deck: + string += convertNumberToCard(card) + return string + +class Hand(): + def __init__(self) -> None: + self.hand = [] + + def sortHand(self): + self.hand.sort() + + def addToHand(self, card): + self.hand.append(card) + + def removeFromHand(self, index): + card = self.hand.remove(index) + return card + + + \ No newline at end of file diff --git a/BlackJackTest.py b/BlackJackTest.py new file mode 100644 index 0000000..2f1ba72 --- /dev/null +++ b/BlackJackTest.py @@ -0,0 +1,271 @@ +import random +import Ledger + +# Game States +INIT = 0 +PLAYING = 1 +ENDING = 2 +FINISHED = 3 +OVER = 5 +CHECKING = 6 + + + +def convertNumberToCard(cardNumber): + # Cards index from 0 i.e ace is 0, and the highest card value is 51 + if cardNumber <= 12: + cardSuit = "♣" + elif cardNumber <= 25: + cardSuit = "♦" + elif cardNumber <= 38: + cardSuit = "♥" + elif cardNumber <= 51: + cardSuit = "♠" + + cardNumber = cardNumber % 13 + + if cardNumber == 0: + cardNumber = "A" + elif cardNumber == 10: + cardNumber = "J" + elif cardNumber == 11: + cardNumber = "Q" + elif cardNumber == 12: + cardNumber = "K" + else: + cardNumber += 1 + + return "{value}{suit} ".format(value=str(cardNumber), suit=cardSuit) + +def generateDeck(): + return [x for x in range(0, 51)] + +def addCardToHand(hand, deck): + card = deck.pop(0) + hand.append(card) + +def generateHand(hand, deck, handSize = 2): + i = 0 + while i < handSize: + addCardToHand(hand, deck) + i += 1 + +def handNumbersToCards(hand): + cards = "" + for card in hand: + cards += convertNumberToCard(card) + return cards + +def getHandTotal(hand): + cardValue = lambda c: min(c % 13 + 1, 10) + i = 0 + aces = 0 + for card in hand: + card = cardValue(card) + if card == 1: + aces += 1 + else: + i += card + + while aces > 0: + if i < 20: + card = 11 + if (i + card) > 21: + card = 1 + i += card + aces -= 1 + return i + +def showDeck(deck): + string = "" + for card in deck: + string += convertNumberToCard(card) + return string + +class BlackJack: + def __init__(self): + self.gameInSession = False + self.playerTurn = True + self.deck = generateDeck() + random.shuffle(self.deck) + self.discard = [] + self.playerHand = [] + self.dealerHand = [] + self.ledger = Ledger.Ledger() + + def returnCards(self): + self.discard.extend(self.playerHand) + self.playerHand.clear() + self.discard.extend(self.dealerHand) + self.dealerHand.clear() + + def deal(self): + generateHand(self.playerHand, self.deck) + generateHand(self.dealerHand, self.deck) + + def shuffle(self): + self.deck.extend(self.discard) + self.discard.clear() + random.shuffle(self.deck) + + def stand(self): + if self.playerTurn: + self.playerTurn = False + + def hit(self): + if self.playerTurn: + addCardToHand(self.playerHand, self.deck) + self.playerTurn = False + else: + addCardToHand(self.dealerHand, self.deck) + self.playerTurn = True + + def checkHandState(self, hand): + # Check the hand state and return w if game is won, l if lost and c for continue + total = getHandTotal(hand) + + if total == 21: + return "w" + elif total > 21: + return "l" + else: + return "c" + + def dealerHitLogic(self): + total = getHandTotal(self.dealerHand) + if total > 17: + self.stand() + return True + else: + self.hit() + + + def checkGameOver(self, state): + gameOver = False + if state == "w": + gameOver = True + elif state == "l": + gameOver = True + return gameOver + + def compareHands(self): + dealerTotal = getHandTotal(self.dealerHand) + playerTotal = getHandTotal(self.playerHand) + if dealerTotal < playerTotal: + return "l" + else: + return "w" + + def play_game(self, ID, bet, recv, send): + + if self.gameInSession: + send("Fuck you") + return + else: + self.gameInSession = True + gameState = INIT + + while gameState != OVER: + + if gameState == INIT: + + self.returnCards() + playerStats = self.ledger.read(ID) + if playerStats is None: + self.ledger.write(ID) + playerStats = self.ledger.read(ID) + self.deal() + playerWinState = self.checkHandState(self.playerHand) + dealerWinState = self.checkHandState(self.dealerHand) + + play = None + playerStood = False + dealerStood = False + validInput = False + + gameState = CHECKING + + elif gameState == PLAYING: + + send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards( + self.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(self.dealerHand[0]) + "??") + play = recv("Hit or Stand?") + while not validInput: + if play == "h": + self.hit() + validInput = True + elif play == "s": + self.stand() + playerStood = True + validInput = True + + dealerStood = self.dealerHitLogic() + playerWinState = self.checkHandState(self.playerHand) + dealerWinState = self.checkHandState(self.dealerHand) + gameState = CHECKING + + elif gameState == ENDING: + + # Players turn + self.stand() + # Dealers turn + dealerStood = self.dealerHitLogic() + # Loop ends when game is over + dealerWinState = self.checkHandState(self.dealerHand) + if dealerStood: + + if dealerWinState == "c": + + dealerWinState = self.compareHands() + gameState = CHECKING + + elif gameState == CHECKING: + + if self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState): + gameState = FINISHED + elif playerStood: + gameState = ENDING + else: + gameState = PLAYING + + elif gameState == FINISHED: + + send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) + + "\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand)) + if playerWinState == "w": + send("You won!") + win = (2*bet, 1, 0, ID) + self.ledger.update(ID, win) + elif playerWinState == "l": + send("You busted!") + loss = (-bet, 0, 1, ID) + self.ledger.update(ID, loss) + elif dealerWinState == "w": + send("The Dealer reached 21 before you!") + loss = (-bet, 0, 1, ID) + self.ledger.update(ID, loss) + elif dealerWinState == "l": + send("The Dealer busted before you!") + win = (2*bet, 1, 0, ID) + self.ledger.update(ID, win) + + self.returnCards() + if len(self.deck) < 0.25 * 52: + send("Shuffling Deck") + self.shuffle() + + gameState = OVER + self.gameInSession = False + +def send(str): + return input(str) + +def main(): + + bj = BlackJack() + bj.play_game(12, 100, send, print) + + +if __name__ == "__main__": + main() + diff --git a/Calculator.py b/Calculator.py index bfabc35..37437e0 100644 --- a/Calculator.py +++ b/Calculator.py @@ -127,7 +127,7 @@ class Calculator(discord.ui.View): displayOutput = " ".join(['`', ' ' * padding, f"{self.inputTwo}", f"{funckyDict[self.expression]}", f"{self.inputOne}", "=", f"{self.output}", "`"]) return displayOutput - @discord.ui.button(label="=", style=discord.ButtonStyle.green, row=4) + @discord.ui.button(label="=", style=discord.ButtonStyle.green, row=3) async def equals(self, interaction: discord.Interaction, button: discord.ui.Button): if self.inputTwo is None: diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index 27c346363569c47b782b882ac4908b1ba6c15dc9..5591cd5c5ebc5e3c40848ff407f260104955c6d6 100644 GIT binary patch delta 1711 zcmaJ>O>7%Q6rR~#uh;uyr?DL;Eh^5TNTyNvOAE9rQU2|uxM`hMBs~<@vq=*NyP92t z64r82Brbp`45;cU_N7uJB!mP434stus1gzqLL9o{0z#ZXh$|=F8z&8=0e8gIi~K= zq6o|}`n>quT&82ITGX`Ddbe@G5A4hl^VM2UwJw(^UU)Bb#3*Yu4d<6XB zH+zJ7V$gY?zAV0TUhkd8r6oJ#pri*Ik}p^-tGVRx7WHx8q(k5Ag+F z5O(4j`lgsmH1q;8^5W~nIeJ43^gP*0fFlCqD;VCmO2{i9%NpTMpfS2d3xtt8p@5~X zRK%yvND%Rrs(PLBZLnxn;b#NVRy&XfT$GS@Xj2b#MjC`4lRh1N|B91#wACfG4M>Us zDGG(qHo-O+X~vk^G+|gUY~N}|uG3l`7PVo~_n<}1cl%-owcV}b463}VcJ@~=TF2e3V+H0_!VUR?ABczbufCPo6A zUjtvVLz>oZ^Y?888?XHiZKt5ZH+vP31^d5ClY0&Oi2R2#47I;a?n*m-5d9Ci} z6(|;A2J4kH{6D+2xTGBiJ-W+X23mT5x&LJy0#!U=?vm|#rgrzYkK z#hEZVe|l^Y44%T^qX;>K3t1h9K|(Ge@2OBJOfIRHT|d;gTX`|mJh#S{Vt9GNzI}Jex+(?2i6W8QF#+-WLGMHC>5Qjp~X7oXHd>|rzPCxdbj+P2p;Kyv7rvRY> z)G)>4eWQmpnD^Y;OpdRYE7e&T!`Q|pY^#`yi#Pfn9+sj?32{4JF{CU~QItgrftnCr k5r6azn*CrJ#Gr;L4rh)YT)@a8!V7%Q6rQ)X*SqWW=ErM0zrvIs#S~f)ZAn^al*CD$G;z`-qWrc*87Bk>HyUq* zQmt{@0OC-IiV+AQMY0b)v=;=e6eI*fAaURX5*+Y_BNCTNa6=q;Z?={N2Vht8?VE4j z`)1}n?YnX4$HVap@wmnCIq~6JeCXr&?I?Kit7y^XJ#Vn*9Nx?O@Y})rmsoZ{9yGFN zJ?69XzyVS7Lc25zdy%^Cvsc0m0Jcs{RH32J^sKtoAU4Js%4mh>SG#A( z`7}aS6Qg7oFO9@pW#Yy63ZchdK~c&9aSbtW?v)C8Rs=(ov2}z9}}4 z>mm-n-LyI07Z0Uu2kn@bpwpLs!!__+6yI;D1d&y|UEA9?#4SI@ZS=c^e6qn>3bpe0 zN+N+vKj2czw;E9SMp?M2_|{9SjlS@s;yce(_NPJW%C}Wyx};%=-u_>ii(}@3>^gU| zTWh5kiN7V$;*Js?MB$EBI-FI=p6uTR zo+>d+;hQLuZi}GXfO69)=_=LuH&iU@JgWQj6y#6cBW@zU;bks}4ECNfAI%KCe7KU8 znZzK>%9Dv6n3HD{o3%l4gnqoE2+i>P)02zhDP@Y{3U5YU6B}MpOq0hkqN5A5W6w?( zP6?N&M+uG-WC_v)CkW`T7wZ2%L)JV()0oIlPMpTrraoE7k;XF8kBB9;IEAfpDLf2i!TcyYo9oj6GgZ49w)2t&)ZoeJd+FaQw3hJm8`MLYB+;i`hzqYuz_5Cffa% zHa<_?ypZjbcajecQy&+T1a#aWPju4Y?kWp(ccHRC7gcu_Yx3t*TAoW;&H!=-!yPR= aOGt{;!9G=v=gId)f^!7V5WFDwQ{pe7LXi{z diff --git a/ledger.db b/ledger.db index 0704eba57212b255ba317d48d164f154da629cd1..552732d3f13ddb17d0e787388a54e75eb9492c3b 100644 GIT binary patch delta 87 zcmZp0XmFSy&6qY(#+fl~W5N=CE@uAI4E#6v-|(N_EGV#--;|q~je(Jgk&%aK4;z~h mBO3!7ki)n=esWX;10(+eadsglh!~S)?UWiO1_mh|Jy`&*a}o&v delta 84 zcmZp0XmFSy&1gPR#+lK4W5N=C4krE^4E#6v-)t5X*u_6FfYVTcjfsJwc6 From 72aa847663dff85e77cdc9a49e6d734952e687f6 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Wed, 19 Jul 2023 09:55:54 +1000 Subject: [PATCH 12/24] BlackJack 2 Progress --- BlackJack.py | 2 +- BlackJack2.py | 112 ++++++++++++++++++++++---- __pycache__/BlackJack.cpython-310.pyc | Bin 5929 -> 5929 bytes 3 files changed, 96 insertions(+), 18 deletions(-) diff --git a/BlackJack.py b/BlackJack.py index e2bc738..ff1462c 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -133,7 +133,7 @@ class BlackJack: def dealerHitLogic(self): total = getHandTotal(self.dealerHand) - if total > 17: + if total >= 17: self.stand() return True else: diff --git a/BlackJack2.py b/BlackJack2.py index 337c316..62cfc6c 100644 --- a/BlackJack2.py +++ b/BlackJack2.py @@ -1,4 +1,5 @@ import random +from Ledger import Ledger """ Class which describes playing cards @@ -15,6 +16,17 @@ class Card(): def __init__(self, value, suit) -> None: self.value = value self.suit = suit + self.hidden = False + + def turn_card(self): + # XOR to flip hidden element + self.hidden = self.hidden != True + + def get_value(self): + return self.value + + def get_suit(self): + return self.suit def __str__(self) -> str: suits = ["J", "♥", "♦", "♠", "♣"] @@ -27,27 +39,35 @@ class Card(): strValue = str(self.value) string = "" - string.format("%s %s", suits[self.suit], strValue) + string = f"{suits[self.suit]}{strValue}" + if self.hidden: + string = "??" return string - - - - + + def __repr__(self) -> str: + return str(self) """ Class for interacting with a deck of cards """ class Deck(): - def __init__(self) -> None: + def __init__(self, joker = False) -> None: self.deck = [] self.discard = [] - self.joker = False - if self.joker: - self.deck = [x for x in range(0, 52)] - else: - self.deck = [x for x in range(0, 51)] + self.joker = joker + + self.deck.extend([Card(x, Card.HEARTS) for x in range(1, 13)]) + self.deck.extend([Card(x, Card.DIAMONDS) for x in range(1, 13)]) + self.deck.extend([Card(x, Card.SPADES) for x in range(1, 13)]) + self.deck.extend([Card(x, Card.CLUBS) for x in range(1, 13)]) + + if joker: + self.deck.append(Card(0, 0)) def shuffle(self): random.shuffle(self.deck) + + def sort(self): + self.deck.sort() def take_from_deck(self): card = self.deck.pop() @@ -68,7 +88,7 @@ class Deck(): def __str__(self) -> str: string = "" for card in self.deck: - string += convertNumberToCard(card) + string += str(card) return string class Hand(): @@ -78,12 +98,70 @@ class Hand(): def sortHand(self): self.hand.sort() - def addToHand(self, card): + def add_to_hand(self, card): self.hand.append(card) - def removeFromHand(self, index): - card = self.hand.remove(index) - return card + def remove_from_hand(self, index): + return self.hand.pop(index) + + def hide_card(self, index): + card = self.remove_from_hand(0) + card.turn_card() + self.add_to_hand(card) + + def __str__(self) -> str: + string = "" + for card in self.hand: + string += str(card) + string += " " + return string + + def __iter__(self): + self.iter = iter(self.hand) + return self.iter + + def __next__(self): + return next(self.iter) - \ No newline at end of file +class BlackJack: + def __init__(self) -> None: + self.deck = Deck() + self.playerHand = Hand() + self.dealerHand = Hand() + self.ledger = Ledger() + + def deal_card(self, hand): + hand.add_to_hand(self.deck.take_from_deck()) + + def game_setup(self): + # Deal cards in alternate order + self.deck.shuffle() + for _ in range(2): + self.deal_card(self.playerHand) + self.deal_card(self.dealerHand) + + # Hide one of the dealers cards + self.dealerHand.hide_card(1) + + def play_game(self): + # Load player statistics + + self.game_setup() + + # Show Cards to player + print("Player Hand:", end=" ") + print(self.playerHand) + print("Dealer Hand:", end=" ") + print(self.dealerHand) + + + +def main(): + game = BlackJack() + game.play_game() + +if __name__ == "__main__": + main() + + diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index 5591cd5c5ebc5e3c40848ff407f260104955c6d6..febc2c103277ccb997f6993e718028f3096bf20c 100644 GIT binary patch delta 29 jcmZ3fw^ENcpO=@50SMH7uTFWsk=KKlk#%zz?`2K^dB+HG delta 29 jcmZ3fw^ENcpO=@50SM;vEl7E`k=KKlk!5oj?`2K^a>xhp From 33a1fb01f632def8bb5d95ebcdb21c0aa38ef3e4 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Wed, 19 Jul 2023 10:45:42 +1000 Subject: [PATCH 13/24] Base game works but no win logic --- Acronymbot.py | 9 +- BlackJack.py | 413 ++++++++++++-------------- BlackJack2.py | 167 ----------- BlackJackOld.py | 258 ++++++++++++++++ __pycache__/BlackJack.cpython-310.pyc | Bin 5929 -> 7207 bytes 5 files changed, 448 insertions(+), 399 deletions(-) delete mode 100644 BlackJack2.py create mode 100644 BlackJackOld.py diff --git a/Acronymbot.py b/Acronymbot.py index e21a209..d160a58 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -62,11 +62,11 @@ async def test(interaction:discord.Interaction): class HitOrStand(discord.ui.View): def __init__(self, *, timeout=180): super().__init__(timeout=timeout) - self.content = None + self.content = False @discord.ui.button(label="Hit", style=discord.ButtonStyle.green) async def hit(self, interaction: discord.Interaction, button: discord.ui.Button): - self.content = "h" + self.content = True for child in self.children: child.disabled = True await interaction.response.edit_message(content="You Hit!", view=self) @@ -74,7 +74,7 @@ class HitOrStand(discord.ui.View): @discord.ui.button(label="Stand", style=discord.ButtonStyle.red) async def stand(self, interaction: discord.Interaction, button: discord.ui.Button): - self.content = "s" + self.content = False for child in self.children: child.disabled = True await interaction.response.edit_message(content="You stood!", view=self) @@ -85,7 +85,8 @@ async def bj(interaction: discord.Interaction): discinput = lambda m: discordInput(interaction, m) discoutput = lambda m: discordOutput(interaction, m) await interaction.response.send_message("Let's play Black Jack!") - await blackJack.play_game(interaction.user.id, 100, discinput, discoutput) + await blackJack.play_game(discinput, discoutput) + # await blackJack.play_game(interaction.user.id, 100, discinput, discoutput) async def discordInput(interaction: discord.Interaction, message:str): response = HitOrStand() diff --git a/BlackJack.py b/BlackJack.py index ff1462c..18734f2 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -1,258 +1,215 @@ import random -import Ledger +from Ledger import Ledger # Game States INIT = 0 -PLAYING = 1 -ENDING = 2 +PLAYERTURN = 1 +DEALERTURN = 2 FINISHED = 3 OVER = 5 CHECKING = 6 +""" +Class which describes playing cards +""" +class Card(): + """ + A joker card has value 0 and suit 0 + """ + HEARTS = 1 + DIAMONDS = 2 + SPADES = 3 + CLUBS = 4 -def convertNumberToCard(cardNumber): - # Cards index from 0 i.e ace is 0, and the highest card value is 51 - if cardNumber <= 12: - cardSuit = "♣" - elif cardNumber <= 25: - cardSuit = "♦" - elif cardNumber <= 38: - cardSuit = "♥" - elif cardNumber <= 51: - cardSuit = "♠" + def __init__(self, value, suit) -> None: + self.value = value + self.suit = suit + self.hidden = False - cardNumber = cardNumber % 13 + def turn_card(self): + # XOR to flip hidden element + self.hidden = self.hidden != True - if cardNumber == 0: - cardNumber = "A" - elif cardNumber == 10: - cardNumber = "J" - elif cardNumber == 11: - cardNumber = "Q" - elif cardNumber == 12: - cardNumber = "K" - else: - cardNumber += 1 - - return "{value}{suit} ".format(value=str(cardNumber), suit=cardSuit) - -def generateDeck(): - return [x for x in range(0, 51)] - -def addCardToHand(hand, deck): - card = deck.pop(0) - hand.append(card) - -def generateHand(hand, deck, handSize = 2): - i = 0 - while i < handSize: - addCardToHand(hand, deck) - i += 1 - -def handNumbersToCards(hand): - cards = "" - for card in hand: - cards += convertNumberToCard(card) - return cards - -def getHandTotal(hand): - cardValue = lambda c: min(c % 13 + 1, 10) - i = 0 - aces = 0 - for card in hand: - card = cardValue(card) - if card == 1: - aces += 1 - else: - i += card + def get_value(self): + return self.value - while aces > 0: - if i < 20: - card = 11 - if (i + card) > 21: - card = 1 - i += card - aces -= 1 - return i + def get_suit(self): + return self.suit -def showDeck(deck): - string = "" - for card in deck: - string += convertNumberToCard(card) - return string + def __str__(self) -> str: + suits = ["J", "♥", "♦", "♠", "♣"] + special_cards = {1: "A", 11: "J", 12: "Q", 13: "K"} + strValue = "" -class BlackJack: - def __init__(self): - self.gameInSession = False - self.playerTurn = True - self.deck = generateDeck() - random.shuffle(self.deck) + if self.value in special_cards.keys(): + strValue = special_cards[self.value] + else: + strValue = str(self.value) + + string = "" + string = f"{suits[self.suit]}{strValue}" + if self.hidden: + string = "??" + return string + + def __repr__(self) -> str: + return str(self) +""" +Class for interacting with a deck of cards +""" +class Deck(): + def __init__(self, joker = False) -> None: + self.deck = [] self.discard = [] - self.playerHand = [] - self.dealerHand = [] - self.ledger = Ledger.Ledger() + self.joker = joker - def returnCards(self): - self.discard.extend(self.playerHand) - self.playerHand.clear() - self.discard.extend(self.dealerHand) - self.dealerHand.clear() + self.deck.extend([Card(x, Card.HEARTS) for x in range(1, 13)]) + self.deck.extend([Card(x, Card.DIAMONDS) for x in range(1, 13)]) + self.deck.extend([Card(x, Card.SPADES) for x in range(1, 13)]) + self.deck.extend([Card(x, Card.CLUBS) for x in range(1, 13)]) - def deal(self): - generateHand(self.playerHand, self.deck) - generateHand(self.dealerHand, self.deck) + if joker: + self.deck.append(Card(0, 0)) def shuffle(self): - self.deck.extend(self.discard) - self.discard.clear() random.shuffle(self.deck) - def stand(self): - if self.playerTurn: - self.playerTurn = False - - def hit(self): - if self.playerTurn: - addCardToHand(self.playerHand, self.deck) - self.playerTurn = False - else: - addCardToHand(self.dealerHand, self.deck) - self.playerTurn = True - - def checkHandState(self, hand): - # Check the hand state and return w if game is won, l if lost and c for continue - total = getHandTotal(hand) - - if total == 21: - return "w" - elif total > 21: - return "l" - else: - return "c" - - def dealerHitLogic(self): - total = getHandTotal(self.dealerHand) - if total >= 17: - self.stand() - return True - else: - self.hit() - - - def checkGameOver(self, state): - gameOver = False - if state == "w": - gameOver = True - elif state == "l": - gameOver = True - return gameOver - - def compareHands(self): - dealerTotal = getHandTotal(self.dealerHand) - playerTotal = getHandTotal(self.playerHand) - if dealerTotal < playerTotal: - return "l" - else: - return "w" - - async def play_game(self, ID, bet, recv, send): - - if self.gameInSession: - await send("Fuck you") - return - else: - self.gameInSession = True - gameState = INIT + def sort(self): + self.deck.sort() + def take_from_deck(self): + card = self.deck.pop() + return card + + def return_to_deck_top(self, card): + self.deck.insert(0, card) + + def returnToDeckBottom(self, card): + self.deck.append(card) + + def addToDiscard(self, card): + self.discard.insert(0, card) + + def returnFromDiscard(self): + self.returnToDeckTop(self.discard.pop()) + + def __str__(self) -> str: + string = "" + for card in self.deck: + string += str(card) + return string + +class Hand(): + def __init__(self) -> None: + self.hand = [] + + def sortHand(self): + self.hand.sort() + + def add_to_hand(self, card): + self.hand.append(card) + + def remove_from_hand(self, index): + return self.hand.pop(index) + + def hide_card(self, index): + card = self.remove_from_hand(index) + card.turn_card() + self.add_to_hand(card) + + def __str__(self) -> str: + string = "" + for card in self.hand: + string += str(card) + string += " " + return string + + def __repr__(self) -> str: + value = 0 + for card in self.hand: + value += card.value + return str(value) + + def __iter__(self): + self.iter = iter(self.hand) + return self.iter + + def __next__(self): + return next(self.iter) + + +class BlackJack: + def __init__(self) -> None: + self.deck = Deck() + self.playerHand = Hand() + self.dealerHand = Hand() + self.ledger = Ledger() + + def deal_card(self, hand): + hand.add_to_hand(self.deck.take_from_deck()) + + def game_setup(self): + # Deal cards in alternate order + self.deck.shuffle() + for _ in range(2): + self.deal_card(self.playerHand) + self.deal_card(self.dealerHand) + + # Hide one of the dealers cards + self.dealerHand.hide_card(1) + + async def show_cards(self, send, displayDealerScore=False): + # Show Cards to player + string = f"Player Hand = {repr(self.playerHand)}: {self.playerHand}\nDealer Hand = ??: {self.dealerHand}" + if displayDealerScore: + string = f"Player Hand = {repr(self.playerHand)}: {self.playerHand}\nDealer Hand = {repr(self.dealerHand)}: {self.dealerHand}" + + await send(string) + + async def play_game(self, recv, send): + gameState = INIT + while gameState != OVER: - if gameState == INIT: + # TODO: Load player statistics + self.game_setup() + gameState = PLAYERTURN - self.returnCards() - playerStats = self.ledger.read(ID) - if playerStats is None: - self.ledger.write(ID) - playerStats = self.ledger.read(ID) - self.deal() - playerWinState = self.checkHandState(self.playerHand) - dealerWinState = self.checkHandState(self.dealerHand) + if gameState == PLAYERTURN: - play = None - playerStood = False - dealerStood = False - validInput = False - - gameState = CHECKING - - elif gameState == PLAYING: - - await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards( - self.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(self.dealerHand[0]) + "??") - play = await recv("Hit or Stand?") - while not validInput: - if play == "h": - self.hit() - validInput = True - elif play == "s": - self.stand() - playerStood = True - validInput = True - - dealerStood = self.dealerHitLogic() - playerWinState = self.checkHandState(self.playerHand) - dealerWinState = self.checkHandState(self.dealerHand) - gameState = CHECKING - - elif gameState == ENDING: - - # Players turn - self.stand() - # Dealers turn - dealerStood = self.dealerHitLogic() - # Loop ends when game is over - dealerWinState = self.checkHandState(self.dealerHand) - if dealerStood: - - if dealerWinState == "c": - - dealerWinState = self.compareHands() - gameState = CHECKING - - elif gameState == CHECKING: - - if self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState): - gameState = FINISHED - elif playerStood: - gameState = ENDING + await self.show_cards(send) + playerHit = await recv("Hit or Stand?") + if playerHit: + self.deal_card(self.playerHand) else: - gameState = PLAYING - - elif gameState == FINISHED: - - await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) + - "\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand)) - if playerWinState == "w": - await send("You won!") - win = (2*bet, 1, 0, ID) - self.ledger.update(ID, win) - elif playerWinState == "l": - await send("You busted!") - loss = (-bet, 0, 1, ID) - self.ledger.update(ID, loss) - elif dealerWinState == "w": - await send("The Dealer reached 21 before you!") - loss = (-bet, 0, 1, ID) - self.ledger.update(ID, loss) - elif dealerWinState == "l": - await send("The Dealer busted before you!") - win = (2*bet, 1, 0, ID) - self.ledger.update(ID, win) - - self.returnCards() - if len(self.deck) < 0.25 * 52: - await send("Shuffling Deck") - self.shuffle() + gameState = DEALERTURN + if int(repr(self.playerHand)) >= 21: + + self.dealerHand.hide_card(1) + gameState = FINISHED + + if gameState == DEALERTURN: + + self.dealerHand.hide_card(1) + self.deal_card(self.dealerHand) + if int(repr(self.dealerHand)) >= 17: + gameState = FINISHED + + if gameState == FINISHED: + + await self.show_cards(send, True) + await send("You won or lost idk lmao") gameState = OVER - self.gameInSession = False + + +def main(): + game = BlackJack() + trueFalseInput = lambda x: input(x) == "h" + game.play_game(recv=trueFalseInput, send=print) + +if __name__ == "__main__": + main() + + diff --git a/BlackJack2.py b/BlackJack2.py deleted file mode 100644 index 62cfc6c..0000000 --- a/BlackJack2.py +++ /dev/null @@ -1,167 +0,0 @@ -import random -from Ledger import Ledger - -""" -Class which describes playing cards -""" -class Card(): - """ - A joker card has value 0 and suit 0 - """ - HEARTS = 1 - DIAMONDS = 2 - SPADES = 3 - CLUBS = 4 - - def __init__(self, value, suit) -> None: - self.value = value - self.suit = suit - self.hidden = False - - def turn_card(self): - # XOR to flip hidden element - self.hidden = self.hidden != True - - def get_value(self): - return self.value - - def get_suit(self): - return self.suit - - def __str__(self) -> str: - suits = ["J", "♥", "♦", "♠", "♣"] - special_cards = {1: "A", 11: "J", 12: "Q", 13: "K"} - strValue = "" - - if self.value in special_cards.keys(): - strValue = special_cards[self.value] - else: - strValue = str(self.value) - - string = "" - string = f"{suits[self.suit]}{strValue}" - if self.hidden: - string = "??" - return string - - def __repr__(self) -> str: - return str(self) -""" -Class for interacting with a deck of cards -""" -class Deck(): - def __init__(self, joker = False) -> None: - self.deck = [] - self.discard = [] - self.joker = joker - - self.deck.extend([Card(x, Card.HEARTS) for x in range(1, 13)]) - self.deck.extend([Card(x, Card.DIAMONDS) for x in range(1, 13)]) - self.deck.extend([Card(x, Card.SPADES) for x in range(1, 13)]) - self.deck.extend([Card(x, Card.CLUBS) for x in range(1, 13)]) - - if joker: - self.deck.append(Card(0, 0)) - - def shuffle(self): - random.shuffle(self.deck) - - def sort(self): - self.deck.sort() - - def take_from_deck(self): - card = self.deck.pop() - return card - - def return_to_deck_top(self, card): - self.deck.insert(0, card) - - def returnToDeckBottom(self, card): - self.deck.append(card) - - def addToDiscard(self, card): - self.discard.insert(0, card) - - def returnFromDiscard(self): - self.returnToDeckTop(self.discard.pop()) - - def __str__(self) -> str: - string = "" - for card in self.deck: - string += str(card) - return string - -class Hand(): - def __init__(self) -> None: - self.hand = [] - - def sortHand(self): - self.hand.sort() - - def add_to_hand(self, card): - self.hand.append(card) - - def remove_from_hand(self, index): - return self.hand.pop(index) - - def hide_card(self, index): - card = self.remove_from_hand(0) - card.turn_card() - self.add_to_hand(card) - - def __str__(self) -> str: - string = "" - for card in self.hand: - string += str(card) - string += " " - return string - - def __iter__(self): - self.iter = iter(self.hand) - return self.iter - - def __next__(self): - return next(self.iter) - - -class BlackJack: - def __init__(self) -> None: - self.deck = Deck() - self.playerHand = Hand() - self.dealerHand = Hand() - self.ledger = Ledger() - - def deal_card(self, hand): - hand.add_to_hand(self.deck.take_from_deck()) - - def game_setup(self): - # Deal cards in alternate order - self.deck.shuffle() - for _ in range(2): - self.deal_card(self.playerHand) - self.deal_card(self.dealerHand) - - # Hide one of the dealers cards - self.dealerHand.hide_card(1) - - def play_game(self): - # Load player statistics - - self.game_setup() - - # Show Cards to player - print("Player Hand:", end=" ") - print(self.playerHand) - print("Dealer Hand:", end=" ") - print(self.dealerHand) - - - -def main(): - game = BlackJack() - game.play_game() - -if __name__ == "__main__": - main() - - diff --git a/BlackJackOld.py b/BlackJackOld.py new file mode 100644 index 0000000..ff1462c --- /dev/null +++ b/BlackJackOld.py @@ -0,0 +1,258 @@ +import random +import Ledger + +# Game States +INIT = 0 +PLAYING = 1 +ENDING = 2 +FINISHED = 3 +OVER = 5 +CHECKING = 6 + + + +def convertNumberToCard(cardNumber): + # Cards index from 0 i.e ace is 0, and the highest card value is 51 + if cardNumber <= 12: + cardSuit = "♣" + elif cardNumber <= 25: + cardSuit = "♦" + elif cardNumber <= 38: + cardSuit = "♥" + elif cardNumber <= 51: + cardSuit = "♠" + + cardNumber = cardNumber % 13 + + if cardNumber == 0: + cardNumber = "A" + elif cardNumber == 10: + cardNumber = "J" + elif cardNumber == 11: + cardNumber = "Q" + elif cardNumber == 12: + cardNumber = "K" + else: + cardNumber += 1 + + return "{value}{suit} ".format(value=str(cardNumber), suit=cardSuit) + +def generateDeck(): + return [x for x in range(0, 51)] + +def addCardToHand(hand, deck): + card = deck.pop(0) + hand.append(card) + +def generateHand(hand, deck, handSize = 2): + i = 0 + while i < handSize: + addCardToHand(hand, deck) + i += 1 + +def handNumbersToCards(hand): + cards = "" + for card in hand: + cards += convertNumberToCard(card) + return cards + +def getHandTotal(hand): + cardValue = lambda c: min(c % 13 + 1, 10) + i = 0 + aces = 0 + for card in hand: + card = cardValue(card) + if card == 1: + aces += 1 + else: + i += card + + while aces > 0: + if i < 20: + card = 11 + if (i + card) > 21: + card = 1 + i += card + aces -= 1 + return i + +def showDeck(deck): + string = "" + for card in deck: + string += convertNumberToCard(card) + return string + +class BlackJack: + def __init__(self): + self.gameInSession = False + self.playerTurn = True + self.deck = generateDeck() + random.shuffle(self.deck) + self.discard = [] + self.playerHand = [] + self.dealerHand = [] + self.ledger = Ledger.Ledger() + + def returnCards(self): + self.discard.extend(self.playerHand) + self.playerHand.clear() + self.discard.extend(self.dealerHand) + self.dealerHand.clear() + + def deal(self): + generateHand(self.playerHand, self.deck) + generateHand(self.dealerHand, self.deck) + + def shuffle(self): + self.deck.extend(self.discard) + self.discard.clear() + random.shuffle(self.deck) + + def stand(self): + if self.playerTurn: + self.playerTurn = False + + def hit(self): + if self.playerTurn: + addCardToHand(self.playerHand, self.deck) + self.playerTurn = False + else: + addCardToHand(self.dealerHand, self.deck) + self.playerTurn = True + + def checkHandState(self, hand): + # Check the hand state and return w if game is won, l if lost and c for continue + total = getHandTotal(hand) + + if total == 21: + return "w" + elif total > 21: + return "l" + else: + return "c" + + def dealerHitLogic(self): + total = getHandTotal(self.dealerHand) + if total >= 17: + self.stand() + return True + else: + self.hit() + + + def checkGameOver(self, state): + gameOver = False + if state == "w": + gameOver = True + elif state == "l": + gameOver = True + return gameOver + + def compareHands(self): + dealerTotal = getHandTotal(self.dealerHand) + playerTotal = getHandTotal(self.playerHand) + if dealerTotal < playerTotal: + return "l" + else: + return "w" + + async def play_game(self, ID, bet, recv, send): + + if self.gameInSession: + await send("Fuck you") + return + else: + self.gameInSession = True + gameState = INIT + + while gameState != OVER: + + if gameState == INIT: + + self.returnCards() + playerStats = self.ledger.read(ID) + if playerStats is None: + self.ledger.write(ID) + playerStats = self.ledger.read(ID) + self.deal() + playerWinState = self.checkHandState(self.playerHand) + dealerWinState = self.checkHandState(self.dealerHand) + + play = None + playerStood = False + dealerStood = False + validInput = False + + gameState = CHECKING + + elif gameState == PLAYING: + + await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards( + self.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(self.dealerHand[0]) + "??") + play = await recv("Hit or Stand?") + while not validInput: + if play == "h": + self.hit() + validInput = True + elif play == "s": + self.stand() + playerStood = True + validInput = True + + dealerStood = self.dealerHitLogic() + playerWinState = self.checkHandState(self.playerHand) + dealerWinState = self.checkHandState(self.dealerHand) + gameState = CHECKING + + elif gameState == ENDING: + + # Players turn + self.stand() + # Dealers turn + dealerStood = self.dealerHitLogic() + # Loop ends when game is over + dealerWinState = self.checkHandState(self.dealerHand) + if dealerStood: + + if dealerWinState == "c": + + dealerWinState = self.compareHands() + gameState = CHECKING + + elif gameState == CHECKING: + + if self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState): + gameState = FINISHED + elif playerStood: + gameState = ENDING + else: + gameState = PLAYING + + elif gameState == FINISHED: + + await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) + + "\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand)) + if playerWinState == "w": + await send("You won!") + win = (2*bet, 1, 0, ID) + self.ledger.update(ID, win) + elif playerWinState == "l": + await send("You busted!") + loss = (-bet, 0, 1, ID) + self.ledger.update(ID, loss) + elif dealerWinState == "w": + await send("The Dealer reached 21 before you!") + loss = (-bet, 0, 1, ID) + self.ledger.update(ID, loss) + elif dealerWinState == "l": + await send("The Dealer busted before you!") + win = (2*bet, 1, 0, ID) + self.ledger.update(ID, win) + + self.returnCards() + if len(self.deck) < 0.25 * 52: + await send("Shuffling Deck") + self.shuffle() + + gameState = OVER + self.gameInSession = False diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index febc2c103277ccb997f6993e718028f3096bf20c..2f67a35e85678362173b1de00525bb9f2bc42389 100644 GIT binary patch literal 7207 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 Date: Wed, 19 Jul 2023 11:12:13 +1000 Subject: [PATCH 14/24] Added returning cards from hand at end of game --- BlackJack.py | 24 +++++++++++++++++++++++- __pycache__/BlackJack.cpython-310.pyc | Bin 7207 -> 7965 bytes 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/BlackJack.py b/BlackJack.py index 18734f2..1bc4a0c 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -93,6 +93,10 @@ class Deck(): def returnFromDiscard(self): self.returnToDeckTop(self.discard.pop()) + + def return_all_from_discard(self): + self.deck.extend(self.discard) + self.discard = [] def __str__(self) -> str: string = "" @@ -100,6 +104,9 @@ class Deck(): string += str(card) return string + def __len__(self): + return len(self.deck) + class Hand(): def __init__(self) -> None: self.hand = [] @@ -117,6 +124,9 @@ class Hand(): card = self.remove_from_hand(index) card.turn_card() self.add_to_hand(card) + + def __len__(self): + return len(self.hand) def __str__(self) -> str: string = "" @@ -158,6 +168,11 @@ class BlackJack: # Hide one of the dealers cards self.dealerHand.hide_card(1) + + def discard_hand(self, hand): + for _ in range(len(hand)): + card = hand.remove_from_hand(0) + self.deck.addToDiscard(card) async def show_cards(self, send, displayDealerScore=False): # Show Cards to player @@ -183,6 +198,7 @@ class BlackJack: if playerHit: self.deal_card(self.playerHand) else: + self.dealerHand.hide_card(1) gameState = DEALERTURN if int(repr(self.playerHand)) >= 21: @@ -192,7 +208,6 @@ class BlackJack: if gameState == DEALERTURN: - self.dealerHand.hide_card(1) self.deal_card(self.dealerHand) if int(repr(self.dealerHand)) >= 17: gameState = FINISHED @@ -201,6 +216,13 @@ class BlackJack: await self.show_cards(send, True) await send("You won or lost idk lmao") + self.discard_hand(self.playerHand) + self.discard_hand(self.dealerHand) + + if len(self.deck) < 0.25 * 51: + self.deck.return_all_from_discard() + self.deck.shuffle() + await send("Everyday I'm shuffling") gameState = OVER diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index 2f67a35e85678362173b1de00525bb9f2bc42389..09d0ea276256f771d8d6abcf76aebc4aeb9475a1 100644 GIT binary patch delta 1873 zcmZuxU2GIp6rMXXJDuH~nVp^O{**0JicnTa>tCRt)E2e{3>0k3-(uOWd$;Yf+pXN4 z@>5!YlqVD8&%p#WhE^YliHT`6F+LcdO-u|=Ci`xTi4Vq-_=cWyw-Ef9$^GuR=bU@) z`MKxb?ftmVnYHbZf?r$j*W7Mfb;b?1hRc$YV_eCpd;?FzRbyaFE05n)a$&BPtVxw8 zc=D#6vw4cQA=lyBsFG>_@<-!616)n-)zHEL9Q72!f^uG2W{BzvW6Bh+^D0+H6%j{a zMiaYm5_<@C!#yvxFDXj?oT%js)oOlH%+BO_xn3*?UO<()j^MBmn{UsSik0sFsKT(l z$V%{o{RI3Owc(CuZCs=Hd~$;=v4_X14Xs+LiCuK!j+T5L7x{bz71vY*v~NlK>w?eN zkl2R&Oa$)Rz3y=&MJK_N1Y-~}Qe8br?!zHtHWiDRwyEK-OGL`iEkpFcgV;vrJnB8l za1w4inLRdlFq0-{r6A@v!d=X7Xnhss9Rx;&Gn9+2$%{Jq3R_xyUT}aROo9 zK2)f2_#(Ig?x-eQi`eWmycOBT1bh|Q7d}mTFAyAnLLdea*J5+f?jAv{vb&pIh81@z z`6?;I2yzHmB8TX+uqoQfuEPH44k|L)kBJeI$U>@Ol<3o#(PXeu_?`BmLg9>`kb9<4E80HnVqN&3nG}@uM1gt#sKJc@(E% zB4!x3y-kU>y1q+u0{DmDql*NVoLirz1f_cHB-R ze8p!Ac-fa&RvEV!)djY!a<;-2HEaTHSzpko6E7ID3lHLkOhD|#saZjpAlZ~hNu)Qc zFK^B?DPQ}?+52!e)zODyn+%b7oo=c+ z$c>=!mWm>P=w+8&lT=hvDmUTV)TUH$7#p$dcg%{8Q6JOulAtH?*ErlyZMjBu#qP-T z&nE^imc$iaxYBXBYo?<5Sn2cBYJjLTq{`W4lBR*jYs8Z5(xSO*Wu`Ef@*~EK`uIs6bCR2{$&}V84Kt-s)XM zrl=y|lSK;R66{Uy?*AFdx`ALYlX*-mBH1wW`I$l)AN`CYUL;-WDDgUhAgB|}5nO=P gbjqdIplOu0i!Ssq3BRXzhM#esGLM>p5Yzwq8`VIQkN^Mx delta 1246 zcmYjQO>7%g5Z<@DUO%tb>-EptPMxGl(?XY`2EtFnf854x0#OKdT8Kltm^?R4-8jwj z3Q|a=M2(Q(P*g@p2oWjeg5ZWYa6#e>7nBPEb3hys7X+uCU}m?f>ec(+{Lgr1-tO~X zjN5Cel&RpaH1@3+FMMsEH*VcYX$4V)ca2I;Z6zyS~$p=A|tYBlN33T$J-Jr7E*v?P9u2<1OBTbm<(<@ zPZ)JdJpudqzC?FT22;(BXv1I5bF2HFpVv{+t_QTad_~M|wYBj;{nQ z>HF`&`}xOV&WZH}%BFIe-C%V^x|B=p>7CX_AQ#bk_}~YWavtHG6jgoP_etsd_chl$ zOEy%e49i|1Drz=SM+jagxBzLRG*Uxy8BaHlz_CMIi#|JM$GKtYvK9_y9M$)RV&hQy z4yA=Dk~^$n2uq~G@lea1UgG4H=2H7bJn*P91P2RGvl=uC74{)~R=7|MOM4Q-$tr@U zM$N2a9|zdSFk1Z7St8{d1Wkek__cVHeFAFfDEwXe!H6{QecvSe9P|SxkN<;K+bmG7 zYnxiY+M0YDZ>6ou%%-xZ-d30rXrWF+*#ra!Mq6qSzpe#5NMN^(8`y85wqtSvIdd;5 zwA&1Qtk5TpK8yFuF=mYT&?bsth7oj(uz1(YLa%k;WozjzxeU$z$Da8LExKa}>Xy#9%JI Date: Wed, 19 Jul 2023 11:27:15 +1000 Subject: [PATCH 15/24] Fixed card value logic --- BlackJack.py | 17 +++++++++++++++++ __pycache__/BlackJack.cpython-310.pyc | Bin 7965 -> 8129 bytes 2 files changed, 17 insertions(+) diff --git a/BlackJack.py b/BlackJack.py index 1bc4a0c..c69a4fb 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -137,8 +137,25 @@ class Hand(): def __repr__(self) -> str: value = 0 + aces = 0 + # Add static values for card in self.hand: + if card.value == 1: + aces += 1 + continue + if card.value > 10: + card.value = 10 value += card.value + + # Dynamically add ace value based on ideal rules + card = 11 + for _ in range(aces): + if value < 20: + card = 11 + if (value + card) >= 21: + card = 1 + value += card + return str(value) def __iter__(self): diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index 09d0ea276256f771d8d6abcf76aebc4aeb9475a1..8caf4f8a862a1ae726cfd067665f7a44245583ce 100644 GIT binary patch delta 700 zcmYk2O=uHQ5XX1keq>#fsLjTFG$~dHl2Z#F0!IA6)LPLXje=UjvhBv$rfJ%@DO%Vi zLQjfb97GU+JkuYD1zuoXHomU1YJl=`LEQP-5 z@*D3<_I3PjqNmeQr8q_5-y(Pr0)+^aC8eU&Goc!&OW=u?kcmKeqNIdkEi%;9mL^9% zsyh$>D^!EEh^K{WR|H}csNW8?06e{=$O+cjmr^{VrOT2hLbcAqu!UcK4ell5059?J z{`>F>CsL1cEp}XIEHdhZqS#q#9$h^VwVH0b;rNa2`sx5h`iU{mz6#gyZ8`?;@KgG` zu`>bRXDaYdmID9) delta 532 zcmZvYOG{f(5XbK%xyR#aa;wH`9_AV;xKI}^T&No*c%$`6F)b=$eI%mB_&V{i$z4cy zMM`m6`hXy~kS^Sa3n{Mr2!*b)>8cc${RBD_p{pL4-@P;E|DWN^?LfKT+75-3K_}LG zoeRY-t>f^tpHhxNisCau4m>CsdBZj4Ydl{GO1?bw7#{4Jdz8I_jG>1~*6!Cc^wCck z?4yG9ui)a54C8TQZBSAz01AR20dE?&;XQWR!?1vLDuS(c0N>dHKHx`tPAsy08J~(M zT1~AWuDY5mfG^k|Ie}CB5&7z@vLeS=VayZSebuoQ>i9O=3}<*AJr!$w>*A6b#@DeB zTwo#gS3LSK8+YOI>RbF1`0i{>B{E~{q^_tJlX{cw|Cv=$ZaOvoD606^ zxAyb~TjkKm zrBY^4>MY(nW%z^TmbQii_7w=UVD{)k{Mph||C@e`f*@$I4WK Date: Wed, 19 Jul 2023 14:13:53 +1000 Subject: [PATCH 16/24] End of game messages --- BlackJack.py | 53 +++++++++++++++++++++++--- __pycache__/BlackJack.cpython-310.pyc | Bin 8129 -> 8694 bytes 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/BlackJack.py b/BlackJack.py index c69a4fb..c0b65c0 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -7,8 +7,6 @@ PLAYERTURN = 1 DEALERTURN = 2 FINISHED = 3 OVER = 5 -CHECKING = 6 - """ Class which describes playing cards @@ -150,9 +148,10 @@ class Hand(): # Dynamically add ace value based on ideal rules card = 11 for _ in range(aces): - if value < 20: + + if value <= 10: card = 11 - if (value + card) >= 21: + if value > 10: card = 1 value += card @@ -230,12 +229,54 @@ class BlackJack: gameState = FINISHED if gameState == FINISHED: - + + playerBlackJack = False + dealerBlackJack = False + playerBust = False + dealerBust = False + playerHigher = False + dealerHigher = False + tie = False + playerScore = int(repr(self.playerHand)) + dealerScore = int(repr(self.dealerHand)) await self.show_cards(send, True) - await send("You won or lost idk lmao") + if playerScore == 21: + playerBlackJack = True + if dealerScore == 21: + dealerBlackJack = True + + if playerScore > 21: + playerBust = True + if dealerScore > 21: + dealerBust = True + + if dealerScore > playerScore: + dealerHigher = True + elif playerScore > dealerScore: + playerHigher = True + else: + tie = True self.discard_hand(self.playerHand) self.discard_hand(self.dealerHand) + if tie: + await send("You tied") + elif playerBlackJack: + await send("You reached BlackJack!") + elif dealerBlackJack: + await send("The dealer reached BlackJack!") + elif playerBust: + await send("You busted!") + elif dealerBust: + await send("The dealer busted!") + elif playerHigher: + await send("You won!") + elif dealerHigher: + await send("You lost!") + else: + await send("Report this game to my creator!") + + if len(self.deck) < 0.25 * 51: self.deck.return_all_from_discard() self.deck.shuffle() diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index 8caf4f8a862a1ae726cfd067665f7a44245583ce..5a665c50ce94b68c333219fc25ede3be8c3a56b0 100644 GIT binary patch literal 8694 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 Rum0C6SA!3O9OBQP{XcAfiO&E4 delta 3696 zcmb7GTWlN072Vlgl1qwQQq()PEIN`OtZm7LB|EldS+d@dqd1aP*R{1^y;4e9Zs!%%-`Yy|sDl*vmYUi$s-4g&REjroy8e zYR;f}j5ol%0p?NQ#(4r}37ExTX7VJ=k}zxFDc<;|l8f63o-V3l#Ex$$OyO*vzHHOx z2R-2@Vc2(Zv$5m-f0``O022`hvZaWmY*25p4!NYx9Zuj96DG2gJ0t}oKkBWBinW** z{DAzkI@UuF=^Yu84g_!8o^>Z*TCty%Q(Aw2Gs?68$uinf)KfB0$z3UUhfumrzNh^H zOmg(2ow$#$7wvnlueqKGAkfZiNSN{?{djwgp%KdhIm*53|Jq>aE|3?(PUj{g_4Jh!;*@zs8 z_8vl?g7+v*Cd6Bw!?`A#&)TI4^XZ3oVvOr7|Pi@=zXJ+bj)lqsq}Nndvz;nkHN z2KKCcCwBSbUU_ZVS%x%0b9^0Zq{bfK^zud9dQ~`Oi`$FEmt<4JtpVC9T&TDem|r85~20!t~5SaVxi5d3abrYznqJ<4vZNn5U(lf8kne63_x z0{z-;K+=b<0es6U%D1m(dnF4Xgdf!PmwT%g2={A=p?;7qOdQ`4>i z(giZrLIYP&Ye>G>I6S;}XH1uB_4=Vgh1>tt^iskuJ9nxTgGhJf?;BqpArMX6LRf0V zIYg?a0;Oi1RPduq1#Z*T^}1Y6Ki5Bp>Q#HFXOcVWctT+49-{Pu{A2p&i3|+?#WG+z zX;6q?LN>*e$WHEUNZxdwJ(NFenpkqUwwx+cyJX{Qkvs?}4XO#!+ zn@2q0ZNR;qjm%QF6B?jD!8e2G#1Y=5PsnmTFoAC2^ThYW@?_u&Gau0EDs=FWO*TP}!Mv%kBp1V6=nae;r2%geU zFIx6R+v2*w8I{<%);TJ%$uv13BKi=3n$30jm)2}Yo%2wk{Zt-lyS|;4WF9GDYp5o8 z;K^NEFhTq%xAP^+$oFug7v(S8-g=%isl8A@i^y3*Qb2+y-iCYy7iu75xASG&a^b>Q z{!o6m-JPf29ukB_Sx!|$n_#QT>OrnhCKF)2(uwn+?Nc@XTrPBcI!$a#rc+?r-GgGXobwV2lpmZ{c&#!yW$y^Asow&0|GP zd>{TR@ThHEQy!_0;aTfx#M5AHLTdXCvJ>*qzP^r$HRZL)BZI4t8OX#*CJHh)WqDs` z@n&@;4lC~hlD?+$&|`I4;mQ1fYcx31o2`AygAa$qmLMP{Qpk0$dnw{%M^GqQ!3{j z`M1uK>m`u!V^^DC5c0J`#S;}&H72HKr{|}}$3z(w zDex5Yt2o8%sx}E<7xv;E;lN5Rin%lIvUj>ql)-7#19G*KcnGSppr@NU$qZF>) z2C@a8i;d1uV$2A`jTwuD;)b{_hcgemPNUeaDr))0U@2dIh3AJpSL7#|p7dRm!K1_7 zfr#RsY&qDyUZbU#^M%T1z;?qx!pvZ4Ce~qyO%QpOl{Lj6>Z?cu5)a7=l2s%wkeo3( zH9k5sJv$jZ_xq56y(ick5y>$#d(0+Ns@cHZZ0Kun%u3_U2eyV0_>Q_w7 PJY`-mUNAy2rvLjt8fv%C From ba808a5bf6a6ddd96e825345d332c37fbc2759bf Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Tue, 25 Jul 2023 12:55:48 +1000 Subject: [PATCH 17/24] Blackjack is done :) --- Acronymbot.py | 4 +- BlackJack.py | 61 +++++++++++++++++++------- __pycache__/BlackJack.cpython-310.pyc | Bin 8694 -> 9198 bytes ledger.db | Bin 8192 -> 8192 bytes 4 files changed, 46 insertions(+), 19 deletions(-) diff --git a/Acronymbot.py b/Acronymbot.py index d160a58..cb789b6 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -85,8 +85,7 @@ async def bj(interaction: discord.Interaction): discinput = lambda m: discordInput(interaction, m) discoutput = lambda m: discordOutput(interaction, m) await interaction.response.send_message("Let's play Black Jack!") - await blackJack.play_game(discinput, discoutput) - # await blackJack.play_game(interaction.user.id, 100, discinput, discoutput) + await blackJack.play_game(interaction.user.id, 100, discinput, discoutput) async def discordInput(interaction: discord.Interaction, message:str): response = HitOrStand() @@ -107,7 +106,6 @@ async def bal(interaction: discord.Interaction): """ #### Calculator #### """ - @tree.command(description="Do Meth") async def calculator(interaction: discord.Interaction): await interaction.response.defer() diff --git a/BlackJack.py b/BlackJack.py index c0b65c0..e6f8258 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -1,6 +1,12 @@ import random from Ledger import Ledger +#TODO Kill Benson +#TODO Starting a game with 21 fucks with hidden cards +#TODO Look into 5card jack thingo that Tim mentioned +#TODO Insurance - If dealer starts with 21, you can bet against it and win your money back +#TODO Make each game session more distinct (Embeds?) + # Game States INIT = 0 PLAYERTURN = 1 @@ -112,8 +118,11 @@ class Hand(): def sortHand(self): self.hand.sort() - def add_to_hand(self, card): - self.hand.append(card) + def add_to_hand(self, card, index = None): + if index is None: + self.hand.append(card) + else: + self.hand.insert(index, card) def remove_from_hand(self, index): return self.hand.pop(index) @@ -121,7 +130,7 @@ class Hand(): def hide_card(self, index): card = self.remove_from_hand(index) card.turn_card() - self.add_to_hand(card) + self.add_to_hand(card, index) def __len__(self): return len(self.hand) @@ -132,7 +141,7 @@ class Hand(): string += str(card) string += " " return string - + def __repr__(self) -> str: value = 0 aces = 0 @@ -146,14 +155,15 @@ class Hand(): value += card.value # Dynamically add ace value based on ideal rules - card = 11 - for _ in range(aces): - - if value <= 10: - card = 11 - if value > 10: - card = 1 - value += card + maxAceValue = aces * 11 + tempValue = value + maxAceValue + if tempValue < 21: + return str(tempValue) + while (tempValue > 21) and aces > 0: + tempValue = tempValue - 10 + aces = aces - 1 + + value = tempValue return str(value) @@ -198,12 +208,15 @@ class BlackJack: await send(string) - async def play_game(self, recv, send): + async def play_game(self, ID, bet, recv, send): gameState = INIT while gameState != OVER: if gameState == INIT: - # TODO: Load player statistics + playerStats = self.ledger.read(ID) + if playerStats is None: + self.ledger.write(ID) + playerStats = self.ledger.read(ID) self.game_setup() gameState = PLAYERTURN @@ -214,6 +227,7 @@ class BlackJack: if playerHit: self.deal_card(self.playerHand) else: + #TODO Rename hide_card function self.dealerHand.hide_card(1) gameState = DEALERTURN @@ -224,6 +238,9 @@ class BlackJack: if gameState == DEALERTURN: + if int(repr(self.dealerHand)) > int(repr(self.playerHand)): + gameState = FINISHED + continue self.deal_card(self.dealerHand) if int(repr(self.dealerHand)) >= 17: gameState = FINISHED @@ -263,31 +280,43 @@ class BlackJack: await send("You tied") elif playerBlackJack: await send("You reached BlackJack!") + win = (2*bet, 1, 0, ID) + self.ledger.update(ID, win) elif dealerBlackJack: await send("The dealer reached BlackJack!") + loss = (-bet, 0, 1, ID) + self.ledger.update(ID, loss) elif playerBust: await send("You busted!") + loss = (-bet, 0, 1, ID) + self.ledger.update(ID, loss) elif dealerBust: await send("The dealer busted!") + win = (2*bet, 1, 0, ID) + self.ledger.update(ID, win) elif playerHigher: await send("You won!") + win = (2*bet, 1, 0, ID) + self.ledger.update(ID, win) elif dealerHigher: await send("You lost!") + loss = (-bet, 0, 1, ID) + self.ledger.update(ID, loss) else: await send("Report this game to my creator!") - if len(self.deck) < 0.25 * 51: self.deck.return_all_from_discard() self.deck.shuffle() await send("Everyday I'm shuffling") gameState = OVER - def main(): game = BlackJack() trueFalseInput = lambda x: input(x) == "h" game.play_game(recv=trueFalseInput, send=print) + pass + if __name__ == "__main__": main() diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index 5a665c50ce94b68c333219fc25ede3be8c3a56b0..d5d9e8cce107bed8c6703c086c954cb87334f796 100644 GIT binary patch delta 2680 zcma)8Z)_aJ72lbiz1!Q{+xzdc4UTP+xEu|RfTAdo6=Fz;O+pf!#54zFxp#@b~vWy)R!I`I&cuvjI56&$64~kNh+nfeG^z zt6qNFJjmEK_?L*;7_3`NZCg7@l2YhG`ut}7Tu>0WlRGr-oucTgL zhhdAe#HQdC=NWb!is_fx33w|##zMH7zMnk|+g-(c_@Vn6I|Vy4ud@Jtmsw-8aMp|1 z5`69*7`zXcrw$MtBsfGcOt6_?3jR>;wMJ1KhcJ8B$UI7cQDf4maaob36c1 zp7lXF8ZN1b*fSu2M_rXGP5LgZx<&Y9KF^x) z+x+d2^HO+*>B0@w|DLvnJXIh#K_1L?58L~CdsAm-W#G@$m3$7z^t2AciJ?*WcHszd z^xC<4faGbolB=ZE6v{79|0sM~2-13S`iKsL?^W1~Ad9zpv;z|xZ7+Nieo)+Z5+f!` zMgy}d78Rpm#g??@40T(?W9tIL$WdRYNwj17X-Tt}?6~CkM62%caA#~a7;+hLs|gq? zmHoezak}+TQ>yFSsU|vmCPhuuXM#{iy_R06pBtYErt9-7K`j*p3(Hzm9uYNUN!o&N z30pV<%~E;DHf;@h)&Tsbv;|Y?O0F;E`?FD?eE-K#D&JY` zifLOc2InH>lhrogr;hLcgeLqlE6HO=ueQ>FJ`4}84wgqBq&^*}(&zgSNpvt>mxb1? z9wj(M*QR=$L~LOXf^FbIn~rHGa6gu3dP%#_6^d+TF6H}RXV2Ssga6z!&Mw2ZDiLmm zGVZ4pC-EM+xgS2LyjnR;q9h0iXc3g5;FrpowsX3^5cpvbtt|fnUg~WQ>m1Uny_2lz zl2=9NWONRlf$e=;*++1^?;nYdQ#jbamwgPE`m0R~t=E4=6a=;pv4sy~maVc#=TpSy z%$J#ZC$=JEj;ovTF7lR1ce9a*(I?*5o3svdknZbO#*LP>W-ud4P-aF6(jm)k7G4AuWgAWF3G>=ij&|O0tj(oB#~09u)}5W>7=a&2t6^hHVRNvh zvANhX*t~A{jcoVCja+BPGO@-xo5U?=apAnFF3Uv2j&sye@1dO1144a(vZM7v{R-uD zoQt!#>R+RrSwyQihrLg*=Pq(Yj7JNn=|t?BthW?<>aVeo$@TbRJX^7io3T*av^Uf; z74woIxpZRom}unD8E@sWs^qESE%?I z|6(++qa2Iz-KHKuN@j!d4GY^9yU3YCj`x3ahT;rzF2+qEvm2zZ-3?}}%x&04wA&)4 zUw+O&S8q|TRiaGSQdvtv7P=TrXA<6}(55#UHC`>k_JJ~2C*j_KZH}Vrrx*gLf$!hj z(-xD5CXcnn;pu%->M>Neg$nAjZJkwA{boty9630CV&BxU<5P#!0@1Ip9nG1re-ns<`Rp`TA3VIvUlZ5WctR*+<*v+1bUK zm|qIR>neFWMYcZGrBBdZ_znVpRxpR#%*AT%Y81@oIqosRJm#7L-@z^?-HnJGE#Tzf z*zN=l=I~EXlDePk`t>J`d+5?(4%!NqdlRk<-oTE*r-S`v9R!MxdYnK9<~)__ff?-o z99u|lB3-VjR6CC4+G+;&484ILXP*siEzk#pq7NZ_?-56xhw|`_;x0U$(8hiOcSh5y zRd{5$|BfXx2?-*CCkd7bk_4j!`bD8#tx|Ucms8o%w#OEhCd@m@>}pta+|luXxb?|=`iu1F90&pO&S0I delta 2242 zcmZ8iU2GIp6rMYOJ3Bi&-Oje%1zOu>+v*AyK@fo&C@q0PDbSYI*6O-+R%lDNP)SHkYcP?3@rMUr^g;1KqY-0bLiS0-7ZYMI8sd|9&fT`IZgak#^WAgK zy?5@p=l-_+e!D#x4x1AG&K>x~ZAyG(56UbChvaEi3qQ#RSp)1)4zT3)t4bGR&G47% zvnS!G_CB+(C-u9GwL!#~VO!z0@dVs3>R3B!dszpp31(O;TnN6(I-${=WLwa%{;@a*vb|8M%cY=?Y3a3g1akg^-f@0Q?=Q1HaM= z=81h80p6ICf*Xy$bUlNrp0FPs(5KJu7fTo363@W6?iy{Midvkwx{ zY)C9me9XP@S~SMaz?JA@wuTOi%ktru=(ZVGEhwJs%V$}K^qf<`I&hV7##a$9bd|4j zWzv0Ry;NXF9`;Z_%X+1h*3B8sNEv^nV&k<4DV2-K1+jrxT1HAM?T^?YH8YaUbNbXp z_%mJ!_o}q@FQb)Tj-WD?nKJEHW+u~_#Z<*&hO8okBdE=vV>->VQ;^W=V0U#Rp7jGK z7AhL)^r)BR>GUjIs9qN>`&dOamp$(B7s#)X{K!nFFXNQF4`DHDiRVpFTeGy~85*Vo zDxKFbY4oYf3bm2U48aJMY%}ji{V+rk#Ow4AC{H(Z#NVhrL~54cMFN@{>rqrm8qQcz%RHEw$fomI@95OW;4GPG7Udx7 zY8^$;)xy&d5#mVF#I|E>6@0VAVxPjTCBN&X8Q|v94)!@zElbVNaW4F9R8*83DEWT8 zBxjf>VKFEk8&}RVosg{JZr z^w4~1OsBh%Gf)f68Z$12V4@(_rRjxe_$-EDRce%yT;@G2F;x(!8lF!S5Rs**fQV8t zYS=4zTH`VUr3zsGHS6scI z`C*~Ij=Js>ukwqi2L!M3w^29zux}y%F6w43=v#gmt!ronb21{%JR6=__#kA^erZpB zh=1wJE-qwY>RgAf@$Zl`%D9cb&Tk*?%rdUoH~3xTLS3~?#ME7OXeDO=o(qRO))$2i^Bp&(r-oZ8F6P{Zl%oT|SB6{r=1 zQ-?Dr(&Y0sn)!1G@@Z;TMyWl?5!uETWitz#l_L`xh_Eryx>aQn9Qv>5Xxnl`F|n&r zVC2J-(XEFwBjYt@O@%wwb&hPoR1NR9Zyr&Npcs7_fYb*YSDFc>^i2Y zS%w%Jk>L4w9QG|g%@Xj#@+RjPWuSfI+e5*88iL97gZ0?c#gn6B!*v)h;1IRTiOgs& zolb@MCi12Cl8cv>lP2EAqof@n2oTWAEqY-odjT#bS2RmTg6T6dU7e NyVaOBG?S?h{sC`_<9Yx9 diff --git a/ledger.db b/ledger.db index 552732d3f13ddb17d0e787388a54e75eb9492c3b..3b89f7eb77a3c74a76db2c8d1b5c7512ee9a27dc 100644 GIT binary patch delta 42 ycmZp0XmFSy&3Is<1p@%}cM3rO delta 42 xcmZp0XmFSy&6qY(#+fl~V?u|#1pfkYb|EG<1~w)}MkdSJDK$(C3{pCJvH Date: Tue, 25 Jul 2023 13:19:08 +1000 Subject: [PATCH 18/24] Changed temp game list --- Gamepicker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gamepicker.py b/Gamepicker.py index 15ab5a8..2f07d3b 100644 --- a/Gamepicker.py +++ b/Gamepicker.py @@ -12,7 +12,7 @@ games = ["Left 4 Dead 2", "SCP", "Satisfactory", "Backrooms (Alternate Ending)", - "Magicka 2", + "Ghost Recon Wildlands" ] def add_game(game: str): From 3d51687b516cf95d4220c8a409df2fd5b2c74a08 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Mon, 14 Aug 2023 18:36:15 +1000 Subject: [PATCH 19/24] Minor changes --- Acronymbot.py | 2 +- BlackJack.py | 8 ++++---- Calculator.py | 2 +- Gamepicker.py | 1 - __pycache__/BlackJack.cpython-310.pyc | Bin 9198 -> 9280 bytes ledger.db | Bin 8192 -> 8192 bytes 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Acronymbot.py b/Acronymbot.py index cb789b6..8d85260 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -120,7 +120,7 @@ async def calculator(interaction: discord.Interaction): async def gg(interaction: discord.Interaction): game = pick_game() - await interaction.response.send_message(game) + await interaction.response.send_message("Barotrauma") """ diff --git a/BlackJack.py b/BlackJack.py index e6f8258..0e7ae30 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -1,7 +1,6 @@ import random from Ledger import Ledger -#TODO Kill Benson #TODO Starting a game with 21 fucks with hidden cards #TODO Look into 5card jack thingo that Tim mentioned #TODO Insurance - If dealer starts with 21, you can bet against it and win your money back @@ -127,10 +126,11 @@ class Hand(): def remove_from_hand(self, index): return self.hand.pop(index) + def peek_card(self, index): + return self.hand[index] + def hide_card(self, index): - card = self.remove_from_hand(index) - card.turn_card() - self.add_to_hand(card, index) + self.peek_card(index).turn_card() def __len__(self): return len(self.hand) diff --git a/Calculator.py b/Calculator.py index 37437e0..d67c57a 100644 --- a/Calculator.py +++ b/Calculator.py @@ -141,7 +141,7 @@ class Calculator(discord.ui.View): else: self.clearRequirement += 1 self.output = self.expression(self.inputTwo, self.inputOne) - if (self.inputTwo == 9) and (self.inputOne == 10): + if (self.inputTwo == 9) and (self.inputOne == 10) and (self.expression == addition): self.output = 21 await interaction.response.edit_message( content=self.display(), diff --git a/Gamepicker.py b/Gamepicker.py index 2f07d3b..fd5cfe4 100644 --- a/Gamepicker.py +++ b/Gamepicker.py @@ -22,7 +22,6 @@ def pick_game(): randomIndex = random.randrange(0, len(games)) coinFlip = random.randrange(0, 2) - print(coinFlip) if coinFlip: return f"Valorant ({games[randomIndex]})" diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index d5d9e8cce107bed8c6703c086c954cb87334f796..78ebbd4bccb24488e09dc231da19c81a80792b96 100644 GIT binary patch delta 1098 zcmZ9KO>7fK6oB{buASM9cjK(>*Z~4@4TXRRLi|XOR$!4pOrxkcK!_=}OvWSu;=ni% zKvp6o3q%j4>O*kglAsm|MI2gRdZ|>2BS?q?7mEW(T#!&Ny>KGDw}u|NtNG^r&)YZq z&!N8uof*fmHG0HPFJ$d^C#S<2oYdzaiLdnu*noq^Y1mX>HiiJU;0Ln`eRwJG7$Wsl z@IAmm42uOggm1(Sd?LE=w%CbLs|#NX3-?-Mkj6XKZ5YP&_6!`sJN7&r#YpSVZ~}jA z{Si*$wvd86J_y}~BJOeSgT$B45=`QpI}2re@7{p@SZUk0FiRblv>Zq+r^`-hNV8_< z3>lEYnwB%=D%m1M4RQf#Nt-M|*(yV{w@632vB?bw46lbGzj*C1kDk}NQ70R(1GFkU{i=3Wt3szXqNymU>Nw*h zCKJ)pg;MEUVZ5m1b+(NVuDR5a?ETL%&ZWLQEE}}^(jEy_ZIMbZ!6Gbapvf;s^yumo zc@>8=Pr_x-vTCem2>8V7qidfpb&TYTv?>XL&}>HAMjpQ9K+A(PP3VtxUxt)>}%(RrRpN}VCYAG9hi!Ji4w!?pt<;rqrl z%qJ3fw<2li^?5G_2@`T$z+yS@PJc+K@3LWL${8=wb$Y!TnH z1Nes3K@2~z0XTvC-6=SVYwmk+3Y*O=#Bt5M1;ZHh+=o$o?70i)aIaTD5+8ckVH{hn z2av`sYZEd!XXhb{+x7}{Vy?Vn@rpcKT1fy`5-P9a8rPTggvMRmSXL4`5A!n4mLcKd zZf?qq!9Cn7*D`K#Tds^l+I>mo<=iLx%)dK756GQ|2YEbQgd@ek)`MpDg6?j_s46V#IEzc(AhLiT7O^I<2fem+A|eY5%7(H4n{ZQIP&Z&x0m{f&=2TF) zGNgzQ*=Qm`HUYwDDN*vJ#4*SGN5CwS=Ag>4J4mW7iGL#-ac;E|e&U;?5+|eyW7t;x zywRD5({z%W^wON2D^8J$h7!WMnqNk#v(Q-kTZ0SOSpV+)B`GNCBAwzz*PO`Y(;`C| zbD*ztv^#!!INmR=lE?oKc0^s>oqZ)yQOnHa#bwH}!~5V*y+@2X+7e delta 22 ecmZp0XmFSy&3Is Date: Tue, 12 Sep 2023 11:09:27 +1000 Subject: [PATCH 20/24] Added dice roller --- Acronymbot.py | 15 +++++++++++++++ Gamepicker.py | 28 ++++++++++++++++------------ ledger.db | Bin 8192 -> 8192 bytes 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/Acronymbot.py b/Acronymbot.py index 8d85260..3ff69b2 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -1,3 +1,4 @@ +import random import discord import sqlite3 from discord import app_commands @@ -122,6 +123,20 @@ async def gg(interaction: discord.Interaction): game = pick_game() await interaction.response.send_message("Barotrauma") +@tree.command(description="Roll a Dice") +@app_commands.choices(dice = [ + app_commands.Choice(name = 'd4', value=4), + app_commands.Choice(name = 'd6', value=6), + app_commands.Choice(name = 'd8', value=8), + app_commands.Choice(name = 'd10', value=10), + app_commands.Choice(name = 'd12', value=12), + app_commands.Choice(name = 'd20', value=20), + app_commands.Choice(name = 'd100', value=100), +]) +async def roll(interaction: discord.Interaction, dice:app_commands.Choice[int]): + + roll = random.randint(1, dice.value) + await interaction.response.send_message(f"{dice.name}: {roll}") """ #### Fin #### diff --git a/Gamepicker.py b/Gamepicker.py index fd5cfe4..7d19e33 100644 --- a/Gamepicker.py +++ b/Gamepicker.py @@ -2,18 +2,22 @@ import discord import random # Temporary List -games = ["Left 4 Dead 2", - "Aragami", - "Astroneer", - "Factorio", - "Borderlands", - "Stardew Valley", - "Viscera Cleanup Detail", - "SCP", - "Satisfactory", - "Backrooms (Alternate Ending)", - "Ghost Recon Wildlands" - ] +# games = ["Left 4 Dead 2", +# "Aragami", +# "Astroneer", +# "Factorio", +# "Borderlands", +# "Stardew Valley", +# "Viscera Cleanup Detail", +# "SCP", +# "Satisfactory", +# "Backrooms (Alternate Ending)", +# "Ghost Recon Wildlands" +# ] + +games = ["Plate Up", + "Terraria", + "Ghost Recon"] def add_game(game: str): games.append(game) diff --git a/ledger.db b/ledger.db index 556beafda079f5a74989078717e6fc3b37b89e99..add31d7b5f2cdfe9f3973260552c916a183bc64e 100644 GIT binary patch delta 61 zcmZp0XmFSy&3JX9j5GgL2EDXbybKHsjQpYu{Gyu$1(x$|7UjPpAbv)MTZoB`fsKig Rk;$@lN(~bOgY1UjH~{J44rBlT delta 61 zcmZp0XmFSy&3JjDj5Ggb2EBM`UIqpRMt)HSe$mZ>0?YX}i}GI)5NDC*7Gh#!U}Iur RWU{QCQp3c+ASV(W3jnW=3?%>n From a7fc6da2cb19d1f835d9944384a860635fff3c5e Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Wed, 22 Nov 2023 12:06:58 +1000 Subject: [PATCH 21/24] Preperations for setting up game picker 1.0 --- .../BlackJackOld.py | 0 docker-compose.yml | 11 +++++++++++ ledger.db | Bin 8192 -> 8192 bytes plan.txt | 5 +++++ Acronymbot.py => src/py/Acronymbot.py | 0 BlackJack.py => src/py/BlackJack.py | 0 Calculator.py => src/py/Calculator.py | 0 Dockerfile => src/py/Dockerfile | 5 ++--- Gamepicker.py => src/py/Gamepicker.py | 0 Ledger.py => src/py/Ledger.py | 0 10 files changed, 18 insertions(+), 3 deletions(-) rename BlackJackOld.py => BlackJackBot/BlackJackOld.py (100%) create mode 100644 docker-compose.yml create mode 100644 plan.txt rename Acronymbot.py => src/py/Acronymbot.py (100%) rename BlackJack.py => src/py/BlackJack.py (100%) rename Calculator.py => src/py/Calculator.py (100%) rename Dockerfile => src/py/Dockerfile (55%) rename Gamepicker.py => src/py/Gamepicker.py (100%) rename Ledger.py => src/py/Ledger.py (100%) diff --git a/BlackJackOld.py b/BlackJackBot/BlackJackOld.py similarity index 100% rename from BlackJackOld.py rename to BlackJackBot/BlackJackOld.py diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6d5b113 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,11 @@ +version: "3.3" + +volumes: + +networks: + +services: + acronymbot: + build: ./src/py + volumes: + - "./src/py:/usr/app/src" diff --git a/ledger.db b/ledger.db index add31d7b5f2cdfe9f3973260552c916a183bc64e..71260aa9ee6b4fe0b689f702a3871642f92106d5 100644 GIT binary patch delta 41 wcmZp0XmFSy&3JvHj5Fi)jR~Fd;u$hLLQHH7Y)p)dOqR7%YM2-pWPO6;0s4&!H2?qr delta 41 xcmZp0XmFSy&3JX9j5FiajR~Fd;%8*Ig_zhF*q9g@nJjCk)G#qH$ZiOZ0{{dt3ikj2 diff --git a/plan.txt b/plan.txt new file mode 100644 index 0000000..b261de2 --- /dev/null +++ b/plan.txt @@ -0,0 +1,5 @@ +Microservices: + - Some sort of database for storing the data + - Image for the python code that runs the bot + - Something to interface the two, like sparkSQL for interacting with the database + \ No newline at end of file diff --git a/Acronymbot.py b/src/py/Acronymbot.py similarity index 100% rename from Acronymbot.py rename to src/py/Acronymbot.py diff --git a/BlackJack.py b/src/py/BlackJack.py similarity index 100% rename from BlackJack.py rename to src/py/BlackJack.py diff --git a/Calculator.py b/src/py/Calculator.py similarity index 100% rename from Calculator.py rename to src/py/Calculator.py diff --git a/Dockerfile b/src/py/Dockerfile similarity index 55% rename from Dockerfile rename to src/py/Dockerfile index ca5d95a..32c77d2 100644 --- a/Dockerfile +++ b/src/py/Dockerfile @@ -4,8 +4,7 @@ RUN pip install discord WORKDIR /usr/app/src -COPY Acronymbot.py ./ -COPY BlackJack.py ./ -COPY Ledger.py ./ +VOLUME /usr/app/src +# -v flag to mount to this volume. -v [from]:/usr/app/src CMD [ "python", "./Acronymbot.py" ] \ No newline at end of file diff --git a/Gamepicker.py b/src/py/Gamepicker.py similarity index 100% rename from Gamepicker.py rename to src/py/Gamepicker.py diff --git a/Ledger.py b/src/py/Ledger.py similarity index 100% rename from Ledger.py rename to src/py/Ledger.py From f9785f0e8a005c45ba91f2eddb9a12123124e1a6 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Thu, 23 Nov 2023 09:46:08 +1000 Subject: [PATCH 22/24] BlackJack Finished --- .../BlackJackTest.py | 0 ledger.db | Bin 8192 -> 8192 bytes src/py/BlackJack.py | 50 ++++++++++++------ src/py/__pycache__/BlackJack.cpython-310.pyc | Bin 0 -> 9887 bytes src/py/__pycache__/Calculator.cpython-310.pyc | Bin 0 -> 4860 bytes src/py/__pycache__/Gamepicker.cpython-310.pyc | Bin 0 -> 641 bytes src/py/__pycache__/Ledger.cpython-310.pyc | Bin 0 -> 2849 bytes 7 files changed, 34 insertions(+), 16 deletions(-) rename BlackJackTest.py => BlackJackBot/BlackJackTest.py (100%) create mode 100644 src/py/__pycache__/BlackJack.cpython-310.pyc create mode 100644 src/py/__pycache__/Calculator.cpython-310.pyc create mode 100644 src/py/__pycache__/Gamepicker.cpython-310.pyc create mode 100644 src/py/__pycache__/Ledger.cpython-310.pyc diff --git a/BlackJackTest.py b/BlackJackBot/BlackJackTest.py similarity index 100% rename from BlackJackTest.py rename to BlackJackBot/BlackJackTest.py diff --git a/ledger.db b/ledger.db index 71260aa9ee6b4fe0b689f702a3871642f92106d5..f9c165fea1798735e514be18d0de63f6e7171172 100644 GIT binary patch delta 44 ycmZp0XmFSy#l$EyQN{^KZcONqm*A1nF&AQDV_;)qWMs0eol?WZz#!`r91j4~^a!W` delta 44 ycmZp0XmFSy#l&!ZqKp%e+?dcIFCma2!z0AR#=yqJ$jD?_JEew+fkD