mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-21 23:00:43 -08:00
133 lines
3.6 KiB
Python
133 lines
3.6 KiB
Python
#
|
|
# AceyDuchy
|
|
#
|
|
# From: BASIC Computer Games (1978)
|
|
# Edited by David Ahl
|
|
#
|
|
# "The original BASIC program author was Bill Palmby
|
|
# of Prairie View, Illinois."
|
|
#
|
|
# Python port by Aviyam Fischer, 2022
|
|
#
|
|
######################################################
|
|
|
|
|
|
class Card:
|
|
def __init__(self, suit, rank):
|
|
self.suit = suit
|
|
self.rank = rank
|
|
|
|
def __str__(self):
|
|
r = self.rank
|
|
if r == 11:
|
|
r = "J"
|
|
elif r == 12:
|
|
r = "Q"
|
|
elif r == 13:
|
|
r = "K"
|
|
elif r == 14:
|
|
r = "A"
|
|
return f"{r}{self.suit}"
|
|
|
|
|
|
class Deck:
|
|
def __init__(self):
|
|
self.cards = []
|
|
self.build()
|
|
|
|
def build(self):
|
|
for suit in ["\u2665", "\u2666", "\u2663", "\u2660"]:
|
|
for rank in range(2, 15):
|
|
self.cards.append(Card(suit, rank))
|
|
|
|
def shuffle(self):
|
|
import random
|
|
|
|
random.shuffle(self.cards)
|
|
|
|
def deal(self):
|
|
return self.cards.pop()
|
|
|
|
|
|
class Game:
|
|
def __init__(self):
|
|
self.deck = Deck()
|
|
self.deck.shuffle()
|
|
self.card_a = self.deck.deal()
|
|
self.card_b = self.deck.deal()
|
|
self.money = 100
|
|
self.not_done = True
|
|
|
|
def play(self):
|
|
while self.not_done:
|
|
while self.money > 0:
|
|
card_a = self.card_a
|
|
card_b = self.card_b
|
|
|
|
if card_a.rank > card_b.rank:
|
|
card_a, card_b = card_b, card_a
|
|
|
|
if card_a.rank == card_b.rank:
|
|
self.card_b = self.deck.deal()
|
|
card_b = self.card_b
|
|
|
|
print(f"You have:\t ${self.money} ")
|
|
print(f"Your cards:\t {card_a} {card_b}")
|
|
|
|
bet = int(input("What is your bet? "))
|
|
player_card = self.deck.deal()
|
|
if 0 < bet <= self.money:
|
|
|
|
print(f"Your deal:\t {player_card}")
|
|
if card_a.rank < player_card.rank < card_b.rank:
|
|
print("You Win!")
|
|
self.money += bet
|
|
else:
|
|
print("You Lose!")
|
|
self.money -= bet
|
|
self.not_done = False
|
|
else:
|
|
print("Chicken!")
|
|
print(f"Your deal should have been: {player_card}")
|
|
if card_a.rank < player_card.rank < card_b.rank:
|
|
print(f"You could have won!")
|
|
else:
|
|
print(f"You would lose, so it was wise of you to chicken out!")
|
|
|
|
self.not_done = False
|
|
break
|
|
|
|
if len(self.deck.cards) <= 3:
|
|
print("You ran out of cards. Game over.")
|
|
self.not_done = False
|
|
break
|
|
|
|
self.card_a = self.deck.deal()
|
|
self.card_b = self.deck.deal()
|
|
|
|
if self.money == 0:
|
|
self.not_done = False
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(
|
|
"""
|
|
Acey Ducey is a card game where you play against the computer.
|
|
The Dealer(computer) will deal two cards facing up.
|
|
You have an option to bet or not bet depending on whether or not you
|
|
feel the card will have a value between the first two.
|
|
If you do not want to bet input a 0
|
|
"""
|
|
)
|
|
GAME_OVER = False
|
|
|
|
while not GAME_OVER:
|
|
game = Game()
|
|
game.play()
|
|
print(f"You have ${game.money} left")
|
|
print("Would you like to play again? (y/n)")
|
|
if input() == "n":
|
|
GAME_OVER = True
|
|
|
|
print("\nThanks for playing!")
|