1. from unicodedata import name
  2. name=input("名前を入力してください:")
  3. print(name,"さんですね")
  4. print("ルール説明です。")
  5. print("ブラックジャックとは配られたカードの合計が「21」に近い人が勝ちというゲームです。")
  6. print("ゲーム開始後カードが2枚配られます。ディーラーのカードは一枚伏せられた状態です。")
  7. print("プレイヤーの皆様は合計数が21になるまでカードを引くことができます。しかし、21を超えた時点で負けとなってしまいます。また合計数が同じ場合は引き分けとなります。")
  8. print("ディーラーはカードの合計数が17を越えるまで引き続けます。")
  9. print("ディーラーよりプレイヤーの方が合計数が高い、もしくは、ディーラーが21をオーバーしたら、プレイヤーの皆様の勝ちです。")
  10. print("カードの数字が、「2〜10」までは、数字のままカウントします。")
  11. print("カードの数字が、「J・Q・K」の場合、すべて「10」としてカウントします。")
  12. print("カードの数字が、「A」の場合、今回は「1」としてカウントします。")
  13. print("hitはカードを引く、stayはパスとなります。")
  14. import random
  15. #数をランダムに配布する
  16. deck = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] * 4
  17. def deal():
  18.     hand = []
  19.     for i in range(2):
  20.         random.shuffle(deck)
  21.         card = deck.pop()
  22.         if card == 11:
  23.             card = "J"
  24.         if card == 12:
  25.             card = "Q"
  26.         if card == 13:
  27.             card = "K"
  28.         if card == 1:
  29.             card = "A"
  30.         hand.append(card)
  31.     return hand
  32. def hit(hand):
  33.     random.shuffle(deck)
  34.     card = deck.pop()
  35.     if card == 11:
  36.         card = "J"
  37.     if card == 12:
  38.         card = "Q"
  39.     if card == 13:
  40.         card = "K"
  41.     if card == 1:
  42.         card = "A"
  43.     hand.append(card)
  44.     return hand
  45. def total(hand):
  46.     score = 0
  47.     for card in hand:
  48.         if card == "J" or card == "Q" or card == "K":
  49.             score = score + 10
  50.         elif card == "A":
  51.             if score >= 1:
  52.                 score = score + 1
  53.         else:
  54.             score += card
  55.     return score
  56. def play_again():
  57.     again = input("もう1度プレイしますか? (Y/N): ")
  58.     if again == "y" or again == "Y":
  59.         # game()
  60.         return
  61.     else:
  62.         print("お疲れ様でした。")
  63.         exit()
  64. def result(dealer_hand, player_hand):
  65.     if total(player_hand) > total(dealer_hand):
  66.         print(
  67.             f"\nディーラーの合計は {total(dealer_hand)} あなたの合計は {total(player_hand)} です。\033[32mYOU WIN!\033[0m")
  68.     elif total(dealer_hand) > total(player_hand):
  69.         print(
  70.             f"\nディーラーの合計は {total(dealer_hand)} あなたの合計は {total(player_hand)} です。\033[91mYOU LOSE...\033[0m")
  71. def game():
  72.     dealer_hand = deal()
  73.     player_hand = deal()
  74.     print(f"ディーラーのカードは {dealer_hand[0]} です。")
  75.     print(f"プレイヤーのカードは {player_hand} 合計が {total(player_hand)} です。")
  76.     choice = 0
  77.     while choice != quit:
  78.         choice = input("ヒットしますか? ステイしますか? (HIT/STAY): ").lower()
  79.         if choice == "hit":
  80.             hit(player_hand)
  81.             print(
  82.                 f"\nあなたに {player_hand[-1]} が配られ、カードは {player_hand} 合計は {total(player_hand)} です。")
  83.             if total(player_hand) > 21:
  84.                 print("あなたは 21 を超えてしまいました。\033[91mYOU LOSE...\033[0m")
  85.                 choice = quit
  86.         elif choice == "stay":
  87.             print(
  88.                 f"\nディーラーの2枚めのカードは {dealer_hand[1]} 合計は {total(dealer_hand)} です。")
  89.             while total(dealer_hand) < 17:
  90.                 hit(dealer_hand)
  91.                 print(
  92.                     f"ディーラーに {dealer_hand[-1]} が配られ、カードは {dealer_hand} 合計は {total(dealer_hand)} です。")
  93.                 if total(dealer_hand) > 21:
  94.                     print("ディーラーは 21 を超えてしまいました。\033[32mYOU WIN!\033[0m")
  95.                     choice = quit
  96.             if total(dealer_hand) <= 21:
  97.                 result(dealer_hand, player_hand)
  98.                 choice = quit
  99. game()