0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事の目的は、Blackjackという手持ちのカードの数字の合計が、21を超えない範囲で21に近い方が勝ちというカードゲームをどのようにPythonを使って生成するかが主旨だ。

Screenshot 2024-06-12 at 14.23.51.png

この3行のコードをわかりやすく説明しよう。

まず、Pythonの組み込みモジュール"random”をインポート
"replit"のモジュールから"clear”関数をインポート
"art"というモジュールから"logo"という変数または関数をインポート

Deal Card関数

def deal_card():
  cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
  card = random.choice(cards)
  return card

この関数はデッキ(トランプの山)からランダムに1枚のカードを返します。cardsリストには、エース(11)、数値カード(2-10)、フェイスカード(10)が含まれています。
random.choice(cards)はcardsリストからランダムに1枚のカードを選びます。

"calculate score" 関数

def calculate_score(cards):
  if sum(cards) == 21 and len(cards) == 2:
    return 0
  if 11 in cards and sum(cards) > 21:
    cards.remove(11)
    cards.append(1)
  return sum(cards)

この関数はカードのリストを受け取り、その合計スコアを返します。
もしカードの合計が21で、かつ2枚だけなら、ブラックジャックとして0を返します。
エース(11)が含まれていて、合計が21を超えた場合、エースの値を1に変更します。
最終的にカードの合計を返します。

"compare" 関数

def compare(user_score, computer_score):
  if user_score > 21 and computer_score > 21:
    return "You went over. You lose 😤"
  if user_score == computer_score:
    return "Draw 🙃"
  elif computer_score == 0:
    return "Lose, opponent has Blackjack 😱"
  elif user_score == 0:
    return "Win with a Blackjack 😎"
  elif user_score > 21:
    return "You went over. You lose 😭"
  elif computer_score > 21:
    return "Opponent went over. You win 😁"
  elif user_score > computer_score:
    return "You win 😃"
  else:
    return "You lose 😤"

ここのコードの説明:

この関数はユーザーとコンピュータのスコアを比較し、ゲームの結果を返します。
両者が21を超えた場合、ユーザーの負け。
スコアが同じなら引き分け。
コンピュータがブラックジャック(0)の場合、ユーザーの負け。
ユーザーがブラックジャック(0)の場合、ユーザーの勝ち。
ユーザーが21を超えた場合、ユーザーの負け。
コンピュータが21を超えた場合、ユーザーの勝ち。
ユーザーのスコアが高ければユーザーの勝ち、それ以外はユーザーの負け。

"play game" 関数

def compare(user_score, computer_score):
  if user_score > 21 and computer_score > 21:
    return "You went over. You lose 😤"
  if user_score == computer_score:
    return "Draw 🙃"
  elif computer_score == 0:
    return "Lose, opponent has Blackjack 😱"
  elif user_score == 0:
    return "Win with a Blackjack 😎"
  elif user_score > 21:
    return "You went over. You lose 😭"
  elif computer_score > 21:
    return "Opponent went over. You win 😁"
  elif user_score > computer_score:
    return "You win 😃"
  else:
    return "You lose 😤"

def play_game():

  print(logo)

  user_cards = []
  computer_cards = []
  is_game_over = False

  for _ in range(2):
    user_cards.append(deal_card())
    computer_cards.append(deal_card())

  while not is_game_over:
    user_score = calculate_score(user_cards)
    computer_score = calculate_score(computer_cards)
    print(f"   Your cards: {user_cards}, current score: {user_score}")
    print(f"   Computer's first card: {computer_cards[0]}")

    if user_score == 0 or computer_score == 0 or user_score > 21:
      is_game_over = True
    else:
      user_should_deal = input("Type 'y' to get another card, type 'n' to pass: ")
      if user_should_deal == "y":
        user_cards.append(deal_card())
      else:
        is_game_over = True

  while computer_score != 0 and computer_score < 17:
    computer_cards.append(deal_card())
    computer_score = calculate_score(computer_cards)

  print(f"   Your final hand: {user_cards}, final score: {user_score}")
  print(f"   Computer's final hand: {computer_cards}, final score: {computer_score}")
  print(compare(user_score, computer_score))

ここのコードの説明

この関数はブラックジャックのゲームをプレイします。
初期設定としてユーザーとコンピュータにそれぞれ2枚のカードを配ります。
ユーザーがカードを引くかどうかを決め、引く場合はカードを追加し、そうでなければゲーム終了。
コンピュータのスコアが17未満の場合、カードを引き続けます。
最終的な手札とスコアを表示し、compare関数を使って結果を表示します。

メインループ

while input("Do you want to play a game of Blackjack? Type 'y' or 'n': ") == "y":
  clear()
  play_game()

このループはユーザーにブラックジャックをプレイするかどうかを尋ね、'y'と答えた場合、新しいゲームを開始します。

以上が、ブラックジャックゲームのコードの説明となる。わかりやすいように、実際に私がこのコードを使いブラックジャックを遊んでいるスクリーンショットを添付しておく。

Screenshot 2024-06-12 at 14.32.19.png
ここで、yと選択したら、ゲームを続行できる。
しかし、nと選択したら、ゲームプレイが出来なくなる。
もちろん、私はyと入力した。

Screenshot 2024-06-12 at 14.33.23.png

21を超えない範囲で、21に近い方が勝ちというゲームのため、私は、8を入力した。

9 + 8 = 17で、以下の写真では、パソコンが選択したカードの総和が25であったため、
ユーザー、つまり私の勝ちとなった。
Screenshot 2024-06-12 at 14.36.20.png

引用元:

皆さんもこのプログラムコードを参考にして、トランプゲームの一種であるBlackjackを遊んだらどうでしょうか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?