
一つ前のLessonでは例外処理の基礎について学習しました。
今回はLesson2で学習した知識を応用してハイアンドローゲームを作成していきます。
Lesson1:基礎文法編
Lesson2:制御構造編
・Lesson2-1:比較演算子と論理演算子を理解しよう
・Lesson2-2:条件分岐(if-else文)を理解しよう
・Lesson2-3:条件分岐(if-elif-else文)を理解しよう
・Lesson2-4:条件分岐(match文)を理解しよう
・Lesson2-5:繰り返し処理(for文)を理解しよう
・Lesson2-6:繰り返し処理(while文)を理解しよう
・Lesson2-7:繰り返しの制御を理解しよう
・Lesson2-8:エラーメッセージを読めるようになろう
・Lesson2-9:例外処理の基礎を理解しよう
・練習問題2-1:ハイアンドロー ゲームを作ろう ◁今回はココ
・練習問題2-2:数字当てゲームを作ろう
・練習問題2-3:簡単なじゃんけんゲームを作ろう
Lesson3:関数とスコープ編
Lesson4:データ構造編
Lesson5:オブジェクト指向編
次のステップ:Pythonを用いたアプリ開発
Pythonのゲームコード一覧はこちら
Pythonでハイアンドローゲームを作ろう|条件分岐と乱数の基礎を実践
プレイヤーとコンピュータがランダムに引いたトランプのカードを比較し、どちらが大きいかを予想するハイアンドローゲームを作成しましょう。
プレイヤーは自分のカードの数字がコンピュータのカードより大きいか小さいかを予想し、結果を確認します。
条件分岐と入力処理を活用して、ゲームのロジックを作りましょう。
問題の詳細条件
以下の要件に従ってコードを完成させてください。
- モジュールのインポート:
random
モジュールをインポートすること。 - カードの配布:
player_card
およびcomputer_card
という2つの変数を使用し、それぞれに1から13のランダムな数字を代入すること。 - プレイヤーの予想: プレイヤーがコンピュータのカードが自分のカードより「大きい」か「小さい」かを入力できるようにすること。
- 結果の表示: プレイヤーとコンピュータのカードを表示し、条件分岐を使って、プレイヤーの予想が当たったかどうかを表示すること。
- 引き分けの処理: 同じ数字だった場合は「引き分け」と表示すること。
ただし、以下のような実行結果となるコードを書くこと。
=== ハイアンドローゲームへようこそ! === 【プレイヤー】7 VS ??【コンピュータ】 あなたのカードはコンピュータのカードより大きい?小さい? 1: 大きい、2: 小さい ⇒ 2 【プレイヤー】7 VS 5【コンピュータ】 正解!あなたの勝ち!
【ヒント】難しいと感じる人だけ見よう
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:Randomモジュールのインポート
2:「ハイアンドローゲームへようこそ!」と出力
3:変数player_cardにRandomモジュールで作成した数値を代入
4:変数computer_cardにRandomモジュールで作成した数値を代入
5:f文字列を使ってプレイヤーのカードと「VS ??」を出力
6:「あなたのカードはコンピュータのカードより大きい?小さい?」と出力
7:「1: 大きい、2: 小さい」と出力
8:inputを使ってプレイヤーの選択を取得し、変数choiceに代入
9:f文字列を使ってプレイヤーとコンピュータのカードを出力
10:if文にてプレイヤーとコンピュータのカードが同じかを判定
□「引き分け!」と出力
11:elif文にてプレイヤーの選択が正しいか判定
□「正解!あなたの勝ち!」と出力
12:else文
□「残念!あなたの負け!」と出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
import random # ハイアンドローゲーム開始メッセージ print("=== ハイアンドローゲームへようこそ! ===") # プレイヤーとコンピュータにランダムなカード(1〜13の数字)を配る """ 【穴埋め問題1】 ここにプレイヤーとコンピュータにそれぞれランダムなカードを配るコードを書いてください。 """ # プレイヤーに配られたカードを表示し、コンピュータのカードはまだ表示しない print(f"【プレイヤー】{player_card} VS ??【コンピュータ】") # プレイヤーにコンピュータのカードが大きいか小さいかを予想させる print("あなたのカードはコンピュータのカードより大きい?小さい?") print("1: 大きい、2: 小さい") """ 【穴埋め問題2】 ここにプレイヤーが予想を入力し、その入力を数値に変換するコードを書いてください。 """ # コンピュータのカードを表示 print(f"【プレイヤー】{player_card} VS {computer_card}【コンピュータ】") # 勝負の結果を判定 """ 【穴埋め問題3】 ここにif文を使って、引き分けや勝敗を判定し、それぞれの結果を表示するコードを書いてください。 """
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
問題の答え合わせと解説
この問題の一つの正解例とそのコードの解説を以下に示します。
一つの正解例
例えば以下のようなプログラムが考えられます。
- 正解コード
-
import random # ハイアンドローゲーム開始メッセージ print("=== ハイアンドローゲームへようこそ! ===") # プレイヤーとコンピュータにランダムなカード(1〜13の数字)を配る player_card = random.randint(1, 13) computer_card = random.randint(1, 13) # プレイヤーに配られたカードを表示し、コンピュータのカードはまだ表示しない print(f"【プレイヤー】{player_card} VS ??【コンピュータ】") # プレイヤーにコンピュータのカードが大きいか小さいかを予想させる print("あなたのカードはコンピュータのカードより大きい?小さい?") print("1: 大きい、2: 小さい") choice = int(input("⇒ ")) # コンピュータのカードを表示 print(f"【プレイヤー】{player_card} VS {computer_card}【コンピュータ】") # 勝負の結果を判定 if player_card == computer_card: print("引き分け!") elif (player_card < computer_card and choice == 1) or (player_card > computer_card and choice == 2): print("正解!あなたの勝ち!") else: print("残念!あなたの負け!")
正解例の詳細解説
ブロック毎に分けてコードを解説します。
- 詳細解説
-
ランダムモジュールのインポート
import random
最初に
random
モジュールをインポートしています。これを使って1から13までのランダムな数字を生成します。ゲーム開始メッセージの表示
print("=== ハイアンドローゲームへようこそ! ===")
この行では、ゲーム開始時に「ハイアンドローゲームへようこそ!」というメッセージを画面に表示します。
プレイヤーとコンピュータにランダムなカードを配布
player_card = random.randint(1, 13) computer_card = random.randint(1, 13)
random.randint(1, 13)
は1から13までのランダムな整数を生成します。プレイヤーとコンピュータそれぞれに1枚ずつランダムなカードを配布しています。
プレイヤーのカードを表示し、コンピュータのカードは隠す
print(f"【プレイヤー】{player_card} VS ??【コンピュータ】")
この行ではプレイヤーのカードを表示し、コンピュータのカードはまだ表示せず「??」として隠しています。
プレイヤーに予想を入力させる
print("あなたのカードはコンピュータのカードより大きい?小さい?") print("1: 大きい、2: 小さい") choice = int(input("⇒ "))
ここではプレイヤーにコンピュータのカードが「大きい」か「小さい」かを予想させます。
プレイヤーの入力は
input()
で受け取り、int()
を使って整数に変換しています。コンピュータのカードを表示
print(f"【プレイヤー】{player_card} VS {computer_card}【コンピュータ】")
この行でプレイヤーとコンピュータのカードを両方表示します。ゲーム結果を次の処理で判定します。
勝敗を判定
if player_card == computer_card: print("引き分け!") elif (player_card < computer_card and choice == 1) or (player_card > computer_card and choice == 2): print("正解!あなたの勝ち!") else: print("残念!あなたの負け!")
ここでは条件分岐を使用して勝敗を判定しています。
もしプレイヤーとコンピュータのカードが同じなら「引き分け」と表示し、それ以外の場合はプレイヤーの選択に基づいて勝敗を表示します。
まとめ
このプログラムではランダムなカードを配布し、プレイヤーがカードの大小を予想するハイアンドローゲームを作成しています。
if
文を使った条件分岐や、random
モジュールを使った乱数生成が学べます。
Pythonのゲームコード一覧はこちら
質問用コンタクトフォーム
この記事はAIを用いて書いた記事です。
人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。