Created
March 25, 2019 23:49
-
-
Save shiracamus/d2398550f8e49ec634807fe5a59a1a60 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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