From ba808a5bf6a6ddd96e825345d332c37fbc2759bf Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Tue, 25 Jul 2023 12:55:48 +1000 Subject: [PATCH] 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