Skip to content

Instantly share code, notes, and snippets.

@shiracamus
Created March 25, 2019 23:49
Show Gist options
  • Save shiracamus/d2398550f8e49ec634807fe5a59a1a60 to your computer and use it in GitHub Desktop.
Save shiracamus/d2398550f8e49ec634807fe5a59a1a60 to your computer and use it in GitHub Desktop.
import random
class Card:
RANKS = "A23456789TJQK"
def __init__(self, rank):
self.rank = rank if rank != "T" else "10"
self.number = Card.RANKS.index(rank) + 1
def __str__(self):
return self.rank
def __eq__(self, value):
return value == self.rank or value == self.number
class Deck:
def __init__(self):
self.cards = [Card(rank) for rank in Card.RANKS] * 4
random.shuffle(self.cards)
def draw_card(self):
return self.cards.pop()
class Hand:
def __init__(self):
self.cards = []
def hold(self, card):
self.cards.append(card)
def amount(self):
amount = sum(min(card.number, 10) for card in self.cards)
if amount <= 11 and "A" in self.cards:
amount += 10
return amount
def is_burst(self):
return self.amount() > 21
def play_player(hand, deck):
print(f"〇プレイヤーは {hand.cards[0]} と {hand.cards[1]} を引きました")
print(f"〇プレイヤーの合計は {hand.amount()} です。")
print("--------------------------------------------------")
while input("〇カードを追加しますか? 0:追加しない 1:追加する > ") == "1":
hand.hold(deck.draw_card())
print("--------------------------------------------------")
print(f"〇プレイヤーは {hand.cards[-1]} を引きました")
print(f"〇プレイヤーの合計は {hand.amount()} です。")
print("--------------------------------------------------")
if hand.is_burst():
print("〇プレイヤーはバーストしました・・・")
break
print("--------------------------------------------------")
def play_dealer(hand, deck):
print(f"●ディーラーは {hand.cards[0]} と {hand.cards[1]} を引いていました。")
print(f"●ディーラーの合計は {hand.amount()} でした。")
print("--------------------------------------------------")
while hand.amount() < 17:
hand.hold(deck.draw_card())
print(f"●ディーラーは {hand.cards[-1]} を引きました。")
print(f"●ディーラーの合計は {hand.amount()} です。")
print("--------------------------------------------------")
if hand.is_burst():
print("●ディーラーはバーストしました。")
print("--------------------------------------------------")
def judge(player, dealer):
if player.is_burst():
print("★ディーラーの勝ちです。")
elif dealer.is_burst():
print("☆プレイヤーの勝ちです。")
elif player.amount() < dealer.amount():
print("★ディーラーの勝ちです。")
elif player.amount() > dealer.amount():
print("☆プレイヤーの勝ちです。")
else:
print("引き分けです。")
def blackjack():
deck = Deck()
dealer = Hand()
dealer.hold(deck.draw_card())
dealer.hold(deck.draw_card())
print(f"●ディーラーは {dealer.cards[0]} ともう1枚のカードを引きました")
print("--------------------------------------------------")
player = Hand()
player.hold(deck.draw_card())
player.hold(deck.draw_card())
play_player(player, deck)
play_dealer(dealer, deck)
judge(player, dealer)
if __name__ == "__main__":
blackjack()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment