この記事の目的は、Blackjackという手持ちのカードの数字の合計が、21を超えない範囲で21に近い方が勝ちというカードゲームをどのようにPythonを使って生成するかが主旨だ。
この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'と答えた場合、新しいゲームを開始します。
以上が、ブラックジャックゲームのコードの説明となる。わかりやすいように、実際に私がこのコードを使いブラックジャックを遊んでいるスクリーンショットを添付しておく。
ここで、yと選択したら、ゲームを続行できる。
しかし、nと選択したら、ゲームプレイが出来なくなる。
もちろん、私はyと入力した。
21を超えない範囲で、21に近い方が勝ちというゲームのため、私は、8を入力した。
9 + 8 = 17で、以下の写真では、パソコンが選択したカードの総和が25であったため、
ユーザー、つまり私の勝ちとなった。
引用元:
皆さんもこのプログラムコードを参考にして、トランプゲームの一種であるBlackjackを遊んだらどうでしょうか。