OOP Blackjack Improvements
This commit is contained in:
parent
b0882de943
commit
51499a9f79
@ -22,23 +22,29 @@ class Player:
|
|||||||
# This is so each player can take cards until they are "done"
|
# This is so each player can take cards until they are "done"
|
||||||
# Then the dealer can take his cards
|
# Then the dealer can take his cards
|
||||||
self.done = False
|
self.done = False
|
||||||
|
self.win = False
|
||||||
|
self.bust = False
|
||||||
|
|
||||||
def show_cards(self):
|
def show_cards(self):
|
||||||
print(f"{self.name}'s cards:")
|
print(f"{self.name}'s cards:")
|
||||||
for card in self.cards:
|
for card in self.cards:
|
||||||
print(f"> {card.value} of {card.suit}")
|
print(f"> {card.value} of {card.suit}")
|
||||||
print(f"Total: {self.total()}")
|
print(f"Total:", end=" ")
|
||||||
print()
|
for value in self.total():
|
||||||
|
print(f"{value}", end=" ")
|
||||||
|
print("\n")
|
||||||
|
|
||||||
def total(self):
|
def total(self):
|
||||||
values = {"Ace": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7":7, "8": 8, "9": 9, "10": 10, "Jack": 10, "Queen": 10, "King": 10}
|
values = {"Ace": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7":7, "8": 8, "9": 9, "10": 10, "Jack": 10, "Queen": 10, "King": 10}
|
||||||
aces_in_cards = 0
|
aces_in_cards = 0
|
||||||
total = 0
|
total = [0 for _ in range(len(self.cards)+1)]
|
||||||
for card in self.cards:
|
for card in self.cards:
|
||||||
total += values[card.value]
|
total[0] += values[card.value]
|
||||||
if card.value == "Ace":
|
if card.value == "Ace":
|
||||||
aces_in_cards += 1
|
aces_in_cards += 1
|
||||||
return total if aces_in_cards == 0 else (total, total+(10*aces_in_cards))
|
for i in range(aces_in_cards):
|
||||||
|
total[i+1] = total[i] + 10
|
||||||
|
return [value for value in total if value != 0]
|
||||||
|
|
||||||
|
|
||||||
class Dealer(Player):
|
class Dealer(Player):
|
||||||
@ -57,21 +63,35 @@ class Dealer(Player):
|
|||||||
return
|
return
|
||||||
for card in self.cards:
|
for card in self.cards:
|
||||||
print(f"> {card.value} of {card.suit}")
|
print(f"> {card.value} of {card.suit}")
|
||||||
print(f"Total: {super().total(self)}")
|
print(f"Total:", end=" ")
|
||||||
|
for value in super().total():
|
||||||
|
print(f"{value}", end=" ")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
|
||||||
class Game:
|
class Game:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.players = [Dealer()]
|
self.players = [Dealer()]
|
||||||
for player_num in range(1):
|
for player_num in range(100):
|
||||||
self.players.append(Player(player_num+1))
|
self.players.append(Player(player_num+1))
|
||||||
self.deal_cards()
|
self.deal_cards()
|
||||||
|
|
||||||
def main_loop(self):
|
def main_loop(self):
|
||||||
system("cls" if os_name == "nt" else "clear")
|
while True:
|
||||||
|
for player in self.players[1:]:
|
||||||
|
system("cls" if os_name == "nt" else "clear")
|
||||||
|
|
||||||
self.overview()
|
self.overview()
|
||||||
|
|
||||||
|
self.check_for_win()
|
||||||
|
|
||||||
|
if not player.done:
|
||||||
|
self.player_choice(player)
|
||||||
|
|
||||||
|
self.check_for_loss()
|
||||||
|
|
||||||
|
if self.players_are_done():
|
||||||
|
break
|
||||||
|
|
||||||
def deal_cards(self):
|
def deal_cards(self):
|
||||||
for player in self.players:
|
for player in self.players:
|
||||||
@ -83,6 +103,39 @@ class Game:
|
|||||||
for player in self.players[1:]:
|
for player in self.players[1:]:
|
||||||
player.show_cards()
|
player.show_cards()
|
||||||
|
|
||||||
|
def check_for_win(self):
|
||||||
|
for player in self.players[1:]:
|
||||||
|
for value in player.total():
|
||||||
|
if value == 21:
|
||||||
|
player.win = True
|
||||||
|
player.done = True
|
||||||
|
|
||||||
|
def check_for_loss(self):
|
||||||
|
for player in self.players[1:]:
|
||||||
|
bust_count = 0
|
||||||
|
for value in player.total():
|
||||||
|
bust_count = (bust_count + 1) if value > 21 else bust_count
|
||||||
|
if bust_count == len(player.total()):
|
||||||
|
player.bust = True
|
||||||
|
player.done = True
|
||||||
|
|
||||||
|
def player_choice(self, player):
|
||||||
|
match (input(f"{player.name} Hit or Stand? (h/s)")).lower():
|
||||||
|
case "hit":
|
||||||
|
player.cards.append(Card())
|
||||||
|
case "h":
|
||||||
|
player.cards.append(Card())
|
||||||
|
case "stand":
|
||||||
|
player.done = True
|
||||||
|
case "s":
|
||||||
|
player.done = True
|
||||||
|
case _:
|
||||||
|
print("Please Provide A Valid Choice")
|
||||||
|
system("cls" if os_name == "nt" else "clear")
|
||||||
|
self.overview()
|
||||||
|
self.player_choice(player)
|
||||||
|
|
||||||
|
|
||||||
def players_are_done(self):
|
def players_are_done(self):
|
||||||
for player in self.players[1:]:
|
for player in self.players[1:]:
|
||||||
if not player.done:
|
if not player.done:
|
||||||
@ -95,6 +148,7 @@ if __name__ == "__main__":
|
|||||||
game.main_loop()
|
game.main_loop()
|
||||||
|
|
||||||
# TODO:
|
# TODO:
|
||||||
# - Win checking
|
# - [X] Win checking
|
||||||
# - Player choice (hit, stand)
|
# - [X] Lose checking
|
||||||
# - Dealers turn
|
# - [ ] Player choice (hit, stand)
|
||||||
|
# - [ ] Dealers turn
|
||||||
|
Loading…
Reference in New Issue
Block a user