Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from random import shuffle
- import time
- class Card:
- suits = ["spades","hearts","diamonds","clubs"]
- values = [None, None, "2","3","4","5","6","7","8","9",
- "10","Jack","Queen","King","Ace"]
- def __init__(self, value, suit):
- # suit and value should be integers
- self.value = value
- self.suit = suit
- if self.value == 1:
- self.value = 11
- elif self.value > 10:
- self.value = 10
- def __repr__(self):
- return self.values[self.value] + " of " + self.suits[self.suit]
- class Deck:
- def __init__(self):
- self.cards = []
- for i in range(2,15):
- for j in range(4):
- self.cards.append(Card(i, j))
- shuffle(self.cards)
- def remove_card(self):
- if len(self.cards) == 0:
- return
- return self.cards.pop()
- class Game:
- def __init__(self):
- self.deck = Deck()
- n = input("What's your name? ")
- self.player = Mob(n)
- def ask_hit(self):
- while True:
- hit = input("Would you like to hit? Type yes or no. ")
- if hit == "yes":
- p1_newcard = self.deck.remove_card()
- print("Your card is {}" .format(p1_newcard))
- return p1_newcard.value
- if hit == "no":
- self.player.fold = True
- return False
- def dealer_draw(self, p1, p2, bet):
- p2_newcard = self.deck.remove_card()
- print("Dealer draw's a {}" .format(p2_newcard))
- p2 += p2_newcard.value
- if p2 < 17:
- self.check_play(p1, p2, bet)
- elif p2 > 21:
- print("Dealer bust, you win {} chips!" .format(self.bet))
- self.player.chips += self.bet
- self.bet_()
- else:
- self.check_play(p1, p2, bet)
- def check_play(self, p1, p2, bet):
- self.bet = int(bet)
- if p1 > 21:
- print("You bust! You lose {} chips" .format(self.bet))
- self.player.chips -= self.bet
- self.bet_()
- elif p1 == 21:
- self.bet = self.bet * 2
- print("Blackjack! You win {} chips!" .format(self.bet))
- self.player.chips += self.bet
- self.bet_()
- elif p2 == 21:
- print("Blackjack! You lose {} chips." .format(self.bet))
- self.player.chips -= self.bet
- self.bet_()
- elif p1 == p2:
- print("Push!")
- self.bet_()
- elif self.player.fold is False:
- hit = self.ask_hit()
- if hit:
- p1 += hit
- self.check_play(p1, p2, bet)
- elif hit is False:
- self.check_play(p1, p2, bet)
- elif p2 > p1:
- if p2 >= 17:
- print("You lose {} chips." .format(self.bet))
- self.player.chips -= self.bet
- self.bet_()
- elif p2 < 17:
- self.dealer_draw(p1, p2, bet)
- self.check_play(p1, p2, bet)
- elif p1 > p2:
- print("You win {} chips!" .format(self.bet))
- self.player.chips += self.bet
- self.bet_()
- def start(self):
- print("Welcome to Blackjack!")
- cards = self.deck.cards
- self.bet_()
- def bet_(self):
- if self.player.chips > 0:
- bet = input("You have {} chips {}! What's your bet? " .format(self.player.chips, self.player.name))
- self.player.fold = False
- if bet.isdigit():
- if self.player.chips >= int(bet):
- p1_card1 = self.deck.remove_card()
- p2_card1 = self.deck.remove_card()
- p1_card2 = self.deck.remove_card()
- p2_card2 = self.deck.remove_card()
- print("You bet {}" .format(bet))
- print("Your first card is {}" .format(p1_card1))
- time.sleep(1)
- print("Dealer's first card is {}" .format(p2_card1))
- time.sleep(1)
- print("Your second card is {}" .format(p1_card2))
- time.sleep(1)
- print("Dealer's second card is {}" .format(p2_card2))
- p1_total = p1_card1.value + p1_card2.value
- p2_total = p2_card1.value + p2_card2.value
- print("You have {}" .format(p1_total))
- print("Dealer has {}" .format(p2_total))
- self.check_play(p1_total, p2_total, bet)
- else:
- print("You don't have that many chips.")
- self.bet_()
- else:
- print("Must print an integer")
- self.bet_()
- else:
- print("All out of chips!")
- class Mob:
- chips = 10
- fold = False
- def __init__(self, name):
- self.name = name
- game = Game()
- game.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement