【ゲームコード一覧】Pythonで色々なゲームを作ろう -初心者向け-

記事内に商品プロモーションを含む場合があります

Pythonを学習中の初心者に向けて、簡単なゲームのコードを数多く紹介しています。

是非このページのゲームを実際に作ってみて、楽しくPythonを習得してください。

初心者のためのPythonテキスト&練習問題集|全52ページを無料公開中!初心者向けの無料のPythonテキストと練習問題が豊富に揃ったリンク集。レベル別にテキストを選べ、丁寧な解答と専門用語の解説で、効率的にプログラミングスキルを習得できます。今すぐPython言語をマスターしましょう!...

【★★☆☆☆】ハイアンドロー

「ハイアンドロー」はプレイヤーとコンピュータがランダムに引いたトランプのカードを比較し、どちらが大きいかを予想するゲームです。

プレイヤーは自分のカードの数字がコンピュータのカードより大きいか小さいかを予想し、結果を確認します。

条件分岐と入力処理を活用して、ゲームのロジックを作りましょう。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

=== ハイアンドローゲームへようこそ! ===
【プレイヤー】7 VS ??【コンピュータ】
あなたのカードはコンピュータのカードより大きい?小さい?
1: 大きい、2: 小さい
⇒ 2
【プレイヤー】7 VS 5【コンピュータ】
正解!あなたの勝ち!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン2-☆1:ハイアンドロー ゲームを作ろう【Python】ハイアンドローゲームのコードを書く練習問題。ランダムに配られたカードを元に、プレイヤーがコンピュータのカードが大きいか小さいかを予想し、結果を判定するシンプルなゲームを作成します。Pythonの基礎的な知識を使って、条件分岐やランダム生成の扱い方を学べる内容です。...

ハイアンドロー ゲームのコードは↓↓をクリック

ハイアンドロー ゲームのコード
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("残念!あなたの負け!")

ハイアンドローのゲームコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

【★★☆☆☆】数字当てゲーム

1から100までのランダムな数値を生成し、プレイヤーがその数を予測するゲームです。

プレイヤーには10回の予測チャンスが与えられます。プレイヤーが予測するたびに、予測が正解かどうか、または正解よりも大きいか小さいかを表示します。

プレイヤーが正解の数値を当てることができたらゲームは終了しますが、10回の予測が終わった後も正解を当てられなければ、正解の数値が表示されてゲーム終了です。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

1から100までの数字を当ててください!
あなたには 10 回のチャンスがあります。
あなたの予測: 50
もっと大きい数字です。
残りのチャンスは 9 回です。
あなたの予測: 75
もっと小さい数字です。
残りのチャンスは 8 回です。
あなたの予測: 60
もっと大きい数字です。
残りのチャンスは 7 回です。
あなたの予測: 70
もっと小さい数字です。
残りのチャンスは 6 回です。
あなたの予測: 65
おめでとうございます!正解です!5 回目で当てました。

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン2-☆2:数字当てゲームを作ろう【Python】数字当てゲームのコードを書く練習問題。1から100までのランダムな数字を予想し、10回の試行内で正解を当てるゲームの作成に挑戦しよう。ランダム関数やループ処理を用いた実践的な問題で、初心者向けのコード解説付き!...

数字当てゲームのコードは↓↓をクリック

数字当てゲームのコード
import random

# 1から100までのランダムな数字を生成
correct_number = random.randint(1, 100)

# 予測できる回数を設定
max_attempts = 10

# ゲーム開始メッセージ
print("1から100までの数字を当ててください!")
print(f"あなたには {max_attempts} 回のチャンスがあります。")

# 現在の試行回数をカウント
attempts = 0

# プレイヤーの予測をループで繰り返す
while attempts < max_attempts:
    try:
        # プレイヤーの入力を数値として取得
        guess = int(input("あなたの予測: "))
        
        # 試行回数を1増やす
        attempts += 1
        
        # 予測が正解の場合
        if guess == correct_number:
            print(f"おめでとうございます!正解です!{attempts} 回目で当てました。")
            break
        # 予測が正解より小さい場合
        elif guess < correct_number:
            print("もっと大きい数字です。")
        # 予測が正解より大きい場合
        else:
            print("もっと小さい数字です。")
        
        # 残りの試行回数を表示
        remaining_attempts = max_attempts - attempts
        print(f"残りのチャンスは {remaining_attempts} 回です。")
    
    except ValueError:
        # 入力が数値でない場合のエラーメッセージ
        print("無効な入力です。数字を入力してください。")
    
# 回数制限に達した場合のメッセージ
if attempts == max_attempts:
    print(f"残念!正解は {correct_number} でした。次回はもっと頑張りましょう!")

数字当てゲームのコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

【★★☆☆☆】簡単なじゃんけんゲーム

簡単なじゃんけんゲームのコードを紹介します。

プレイヤーが「グー」「チョキ」「パー」のいずれかを選び、コンピュータがランダムに選んだ手と勝負します。勝敗を判定し、その結果を表示するプログラムです。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

じゃんけんゲームを始めます!
じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2): 0
コンピューターの手: チョキ
あなたの勝ちです!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン2-☆3:簡単なじゃんけんゲームを作ろう【Python】簡単なじゃんけんゲームのコードを書く練習問題。Pythonの基本を学びながら、ランダムな手を使ったじゃんけんゲームの作成方法を紹介します。プレイヤーの手を入力し、コンピューターと勝負して結果を判定するコードの実装にチャレンジしてみましょう。...

簡単なじゃんけんゲームのコードは↓↓をクリック

簡単なじゃんけんゲームのコード
import random

# じゃんけんの手を表示
print("じゃんけんゲームを始めます!")
print("じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2)")

# プレイヤーの手を入力
player_choice = int(input("あなたの選択: "))

# コンピュータの手をランダムに決定
computer_choice = random.randint(0, 2)

# じゃんけんの手の名前
if player_choice == 0:
    player_hand = "グー"
elif player_choice == 1:
    player_hand = "チョキ"
else:
    player_hand = "パー"

if computer_choice == 0:
    computer_hand = "グー"
elif computer_choice == 1:
    computer_hand = "チョキ"
else:
    computer_hand = "パー"

# コンピュータの手を表示
print("コンピューターの手:", computer_hand)

# 勝敗の判定
if player_choice == computer_choice:
    print("引き分けです!")
elif (player_choice == 0 and computer_choice == 1) or \
     (player_choice == 1 and computer_choice == 2) or \
     (player_choice == 2 and computer_choice == 0):
    print("あなたの勝ちです!")
else:
    print("あなたの負けです!")

簡単なじゃんけんゲームのコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

【★★★☆☆】丁半賭博ゲーム

サイコロを使った丁半賭博ゲームのコードを紹介します。

このゲームではプレイヤーが掛け金を決めてサイコロの結果が「丁(偶数)」か「半(奇数)」かを予測し、勝敗を決めます。

プレイヤーが勝てば掛け金を得て、負ければ掛け金を失います。また、所持金が無くなった時点でゲームが終了します。

所持金が残っていれば、プレイヤーが続行するかどうかを選択することができます。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

丁半賭博ゲームを始めます!
プレイヤーの所持金: 1000円
いくらかけますか? ⇒ 500
丁か半か?(丁:0,半:1) ⇒ 1
サイコロの目: 3, 4 ⇒ 半
あなたの勝ち!賞金は500円
プレイヤーの所持金: 1500円
続けますか?(はい:0,いいえ:1) ⇒ 1
最終所持金は1500円でした。
丁半賭博ゲームを終わります。

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン3-☆1:丁半賭博ゲームを作ろう【Python】丁半賭博ゲームのコードを書く練習問題。Pythonで丁半賭博ゲームを作成する問題に挑戦しよう!サイコロを使ったシンプルな賭博ゲームの仕組みを学びながら、掛け金の入力、勝敗判定、ゲーム継続確認の処理を実装します。初心者向けのPython練習問題です。...

丁半賭博ゲームのコードは↓↓をクリック

丁半賭博ゲームのコード
import random

# 掛け金を入力する関数
def get_bet(money):
    while True:
        try:
            bet = int(input("いくらかけますか? ⇒ "))
            if bet > 0 and bet <= money:
                return bet
            else:
                print("無効な入力です!所持金以内の正しい金額を入力してください。")
        except ValueError:
            print("無効な入力です!数字を入力してください。")

# 丁か半かを選択する関数
def get_choice():
    while True:
        try:
            choice = int(input("丁か半か?(丁:0,半:1) ⇒ "))
            if choice == 0 or choice == 1:
                return choice
            else:
                print("無効な入力です!0か1を入力してください。")
        except ValueError:
            print("無効な入力です!数字を入力してください。")

# サイコロを振る関数(リストも使わない)
def roll_dice():
    dice1 = random.randint(1, 6)
    dice2 = random.randint(1, 6)
    return dice1, dice2

# 続けるかどうかを確認する関数
def ask_continue():
    while True:
        try:
            continue_game = int(input("続けますか?(はい:0,いいえ:1) ⇒ "))
            if continue_game == 0 or continue_game == 1:
                return continue_game
            else:
                print("無効な入力です!0か1を入力してください。")
        except ValueError:
            print("無効な入力です!数字を入力してください。")

# メインのゲーム関数
def cho_han_game():
    print("丁半賭博ゲームを始めます!")
    
    money = 1000  # プレイヤーの初期所持金
    
    while money > 0:
        print(f"プレイヤーの所持金: {money}円")
        
        # 掛け金を取得
        bet = get_bet(money)
        
        # 丁か半かの選択
        choice = get_choice()
        
        # サイコロを振る
        dice1, dice2 = roll_dice()
        dice_sum = dice1 + dice2
        print(f"サイコロの目: {dice1}, {dice2} ⇒ {'丁' if dice_sum % 2 == 0 else '半'}")
        
        # 勝敗判定
        if (dice_sum % 2 == 0 and choice == 0) or (dice_sum % 2 != 0 and choice == 1):
            print(f"あなたの勝ち!賞金は{bet}円")
            money += bet
        else:
            print(f"あなたの負け!{bet}円没収!")
            money -= bet
        
        # 続けるかどうかを確認
        if money > 0:
            if ask_continue() == 1:
                print(f"最終所持金は{money}円でした。")
                break
        else:
            print("所持金がなくなりました。ゲームを終了します。")
            break

    print(f"最終所持金は{money}円でした。丁半賭博ゲームを終わります。")

# ゲームを実行
cho_han_game()

丁半賭博ゲームのコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

【★★★☆☆】石取りゲーム

石取りゲームは2人のプレイヤーが交互に石を取るターン制のゲームです。

このゲームでは15個の石を山に置き、プレイヤーが1ターンに取れる石の数は1個から3個までです。

プレイヤーは交互に石を取り、最後の石を取ったプレイヤーが負けとなります。Pythonでこのゲームを実装してみましょう。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

石取りゲームへようこそ!
プレイヤー1の番です。残りの石は 15 個です。
プレイヤー1, 何個の石を取りますか?(1~3個まで選べます):2
プレイヤー2の番です。残りの石は 13 個です。
プレイヤー2, 何個の石を取りますか?(1~3個まで選べます):3
...
プレイヤー1が最後の石を取りました。プレイヤー1の負けです!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン3-☆2:石取りゲームを作ろう【Python】石取りゲームのコードを書く練習問題。プレイヤーが交互に1~3個の石を取り、最後の石を取ったプレイヤーが負けるシンプルなゲームを実装しながら、条件分岐やループ処理、関数の使い方を学びます。初心者向けのPythonコード例で、ゲームのロジックやエラーハンドリングも丁寧に解説しています。...

石取りゲームのコードは↓↓をクリック

石取りゲームのコード
# 石取りゲームの開始
def is_valid_move(stones, move):
    # プレイヤーの選択した石の数が有効かどうかを判定する関数
    return 1 <= move <= 3 and move <= stones

def take_turn(player, stones):
    # 各プレイヤーのターンを処理する関数
    print(f"\n{player}の番です。残りの石は {stones} 個です。")
    
    move = int(input(f"{player}, 何個の石を取りますか?(1~3個まで選べます):"))
    
    # プレイヤーが有効な数を選択するまで繰り返し
    while not is_valid_move(stones, move):
        print("無効な選択です。もう一度選んでください。")
        move = int(input(f"{player}, 何個の石を取りますか?(1~3個まで選べます):"))
    
    # 石を減らす
    stones -= move
    return stones

def play_game():
    # 石取りゲームのメイン関数
    print("石取りゲームへようこそ!")
    stones = 15  # ゲーム開始時の石の数
    turn = 1  # 1ならプレイヤー1、2ならプレイヤー2
    
    # 石が残っている限りゲームを続ける
    while stones > 0:
        # プレイヤーの切り替え
        if turn == 1:
            current_player = "プレイヤー1"
        else:
            current_player = "プレイヤー2"
        
        # 現在のプレイヤーのターンを実行
        stones = take_turn(current_player, stones)
        
        # 石が0になったらゲーム終了
        if stones == 0:
            print(f"\n{current_player}が最後の石を取りました。{current_player}の負けです!")
            break
        
        # ターンを交代
        if turn == 1:
            turn = 2
        else:
            turn = 1

# ゲームの実行
if __name__ == "__main__":
    play_game()

石取りゲームのコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

【★★★★☆】宝探しゲーム

ランダムな位置にある宝を探し当てるゲームのコードを紹介します。

プレイヤーは1から25までの番号が振られた5×5のグリッドから、宝が隠された場所を3回以内に見つける必要があります。

プレイヤーが選んだマスに基づいてヒントを表示し、宝に近づいているかどうかを知らせます。宝を見つけるか、チャンスを使い切るとゲームが終了します。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

宝探しゲームへようこそ!1から25までの数字で宝を探し当ててください。
宝を探すチャンスは3回です。
現在のグリッド:
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

1から25のマス番号を入力してください: 13
下 に宝があります。
残りのチャンス: 2回
現在のグリッド:
01 02 03 04 05
06 07 08 09 10
11 12 * 14 15
16 17 18 19 20
21 22 23 24 25

1から25のマス番号を入力してください: 23
おめでとうございます!宝を見つけました!
現在のグリッド:
01 02 03 04 05
06 07 08 09 10
11 12 * 14 15
16 17 18 19 20
21 22 ☆ 24 25

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン4-☆1:宝探しゲームを作ろう【Python】宝探しゲームのコードを書く練習問題。25マスのグリッド上で宝を探すゲームを通じて、Pythonの基本的なプログラミングスキルを練習しましょう。楽しく挑戦しながらロジック構築を学べます。Python初心者にも最適な練習問題です。...

宝探しゲームのコードは↓↓をクリック

宝探しゲームのコード
import random

# グリッドサイズを定義
GRID_SIZE = 5

# グリッドを初期化する関数
def initialize_grid():
    grid = []
    count = 1
    for i in range(GRID_SIZE):
        row = []
        for j in range(GRID_SIZE):
            row.append(f"{count:02d}")  # 01, 02, 03...の形式で初期化
            count += 1
        grid.append(row)
    return grid

# グリッドを表示する関数
def display_grid(grid):
    print("現在のグリッド:")
    for row in grid:
        print(" ".join(row))
    print()

# ヒントを提供する関数
def give_hint(player_x, player_y, treasure_x, treasure_y):
    hint = []
    if player_x < treasure_x:
        hint.append("右")
    elif player_x > treasure_x:
        hint.append("左")

    if player_y < treasure_y:
        hint.append("下")
    elif player_y > treasure_y:
        hint.append("上")

    return " ".join(hint) + " に宝があります。"

# 宝探しゲームを実行する関数
def treasure_hunt_game():
    # グリッドと宝の位置を初期化
    grid = initialize_grid()
    treasure_x = random.randint(0, GRID_SIZE - 1)
    treasure_y = random.randint(0, GRID_SIZE - 1)

    print("宝探しゲームへようこそ!1から25までの数字で宝を探し当ててください。")
    print("宝を探すチャンスは3回です。")
    display_grid(grid)

    attempts = 0
    found_treasure = False

    while attempts < 3 and not found_treasure:
        try:
            choice = int(input("1から25のマス番号を入力してください: ")) - 1
            if choice < 0 or choice >= GRID_SIZE * GRID_SIZE:
                print("無効な番号です。1から25までの数字を入力してください。")
                continue

            player_x = choice % GRID_SIZE
            player_y = choice // GRID_SIZE

            # 既に選択した場所は選べないようにする
            if grid[player_y][player_x] == "*":
                print("そのマスは既に選択されています。別のマスを選んでください。")
                continue

            # 宝を見つけた場合
            if player_x == treasure_x and player_y == treasure_y:
                print("おめでとうございます!宝を見つけました!")
                grid[player_y][player_x] = "☆"  # 宝の位置を☆で表示
                found_treasure = True
            else:
                # 選んだ場所を*でマークし、ヒントを出す
                grid[player_y][player_x] = "*"
                print(give_hint(player_x, player_y, treasure_x, treasure_y))
                attempts += 1
                print(f"残りのチャンス: {3 - attempts}回")

            display_grid(grid)
        except ValueError:
            print("無効な入力です。1から25までの数字を入力してください。")

    if not found_treasure:
        print("残念ながら、チャンスを使い切りました。宝は見つかりませんでした。")

# ゲームを実行
treasure_hunt_game()

宝探しゲームのコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

【★★★★☆】ナインゲーム

プレイヤーとコンピュータが交互に牌を選んで得点を競う「ナインゲーム」のコードを紹介します。

プレイヤーは1から9までの数字を持ち、毎回選んだ牌の数字で勝敗が決まります。

選ばれた牌は使えなくなり、最後に得点が高い方が勝者となります。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

ナインゲームを開始します!

【第1回戦】
プレイヤーの得点 : 0点
コンピュータの得点: 0点
☆プレイヤーの持ち牌⇒【1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9】
コンピュータの持ち牌⇒【1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9】
持ち牌の中から出す牌を選択してください > 5
プレイヤーの打牌:5 > 3:コンピュータの打牌
プレイヤーは5点獲得

【第2回戦】
プレイヤーの得点 : 5点
コンピュータの得点: 0点
...

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン4-☆2:ナインゲームを作ろう【Python】宝探しゲームのコードを書く練習問題。ランダムに選択された牌を使って、プレイヤーとコンピュータが得点を競うシンプルなナインゲームを通してPythonの基本的なプログラミングスキルを学びます。初心者向けに、関数の定義やループ処理、ユーザー入力の処理方法を実践的に学べる問題です。...

ナインゲームのコードは↓↓をクリック

ナインゲームのコード
import random

def display_tiles(title, tiles):
    print(f"{title}⇒【", end="")
    print(" ,".join([str(tile) if tile != -1 else "-" for tile in tiles]), end="")
    print("】")

def display_scores(player_score, computer_score):
    print(f"プレイヤーの得点 : {player_score}点")
    print(f"コンピュータの得点: {computer_score}点")

def get_player_choice(tiles):
    while True:
        try:
            choice = int(input("持ち牌の中から出す牌を選択してください > "))
            if choice in tiles:
                return choice
            else:
                print("無効な選択です。再度選択してください。")
        except ValueError:
            print("数字を入力してください。")

def get_computer_choice(tiles):
    return random.choice(tiles)

def main():
    # プレイヤーとコンピュータの持ち牌(1〜9)
    player_tiles = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    computer_tiles = [1, 2, 3, 4, 5, 6, 7, 8, 9]

    # プレイヤーとコンピュータの得点
    player_score = 0
    computer_score = 0

    print("ナインゲームを開始します!")

    for round_num in range(1, 10):
        # 現在の回戦を表示
        print(f"\n【第{round_num}回戦】")

        # 現在の得点を表示
        display_scores(player_score, computer_score)

        # 現在の持ち牌を表示
        display_tiles("☆プレイヤーの持ち牌", player_tiles)
        display_tiles("コンピュータの持ち牌", computer_tiles)

        # プレイヤーが牌を選択
        player_choice = get_player_choice([tile for tile in player_tiles if tile != -1])

        # コンピュータが牌を選択
        computer_choice = get_computer_choice([tile for tile in computer_tiles if tile != -1])

        # 両者の牌を比較し、結果を表示
        print(f"プレイヤーの打牌:{player_choice}", end="")
        if player_choice > computer_choice:
            print(f" > {computer_choice}:コンピュータの打牌")
            player_score += player_choice
            print(f"プレイヤーは{player_choice}点獲得")
        elif player_choice < computer_choice:
            print(f" < {computer_choice}:コンピュータの打牌")
            computer_score += computer_choice
            print(f"コンピュータは{computer_choice}点獲得")
        else:
            print(f" = {computer_choice}:コンピュータの打牌")
            print("引き分けです。得点はなし")

        # 使用した牌を無効にする
        player_tiles[player_tiles.index(player_choice)] = -1
        computer_tiles[computer_tiles.index(computer_choice)] = -1

    # 最終結果を表示
    print("\nゲーム終了!")
    display_scores(player_score, computer_score)

    if player_score > computer_score:
        print("プレイヤーの勝利です!")
    elif player_score < computer_score:
        print("コンピュータの勝利です!")
    else:
        print("引き分けです!")

if __name__ == "__main__":
    main()

ナインゲームのコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

【★★★★☆】マルバツゲーム

コンピュータと対戦する簡単なマルバツゲームのコードを紹介します。

プレイヤーとコンピュータが交互に○と×を選択し、最初に縦・横・斜めのラインを揃えた方が勝ちです。

このプログラムでは、ユーザーからの入力に応じて盤面を更新し、勝利または引き分けを判定します。

ゲームが終了した後は結果を表示します。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

マルバツゲームを開始します!
1 | 2 | 3
--+---+--
4 | 5 | 6
--+---+--
7 | 8 | 9
どのマスに置きますか?(1-9で入力してください)> 1
○ | 2 | 3
--+---+--
4 | 5 | 6
--+---+--
7 | 8 | 9
コンピュータのターンです...
コンピュータが選んだマス: 5
○ | 2 | 3
--+---+--
4 | × | 6
--+---+--
7 | 8 | 9

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン4-☆3:マルバツゲームを作ろう【Python】マルバツゲームのコードを書く練習問題。プレイヤーとコンピュータが対戦するシンプルなマルバツゲームの実装を学びます。グリッド表示、勝利・引き分けの判定、コンピュータのランダムな動きを含む関数を使いながら、実践的なPythonスキルを習得しましょう。自分でコードを書き、対話型のゲームを作る過程を体験できます。...

マルバツゲームのコードは↓↓をクリック

マルバツゲームのコード
import random

# グリッドを表示する関数
def display_board(board):
    print(f"{board[ 0]} | {board[ 1]} | {board[ 2]}")
    print("--+---+--")
    print(f"{board[ 3]} | {board[ 4]} | {board[ 5]}")
    print("--+---+--")
    print(f"{board[ 6]} | {board[ 7]} | {board[ 8]}")

# 勝利を判定する関数
def check_win(board, mark):
    win_patterns = [
        [ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8],  # 横
        [ 0, 3, 6], [ 1, 4, 7], [ 2, 5, 8],  # 縦
        [ 0, 4, 8], [ 2, 4, 6]              # 斜め
    ]
    return any(all(board[i] == mark for i in pattern) for pattern in win_patterns)

# 引き分けを判定する関数
def check_draw(board):
    return all(space == "○" or space == "×" for space in board)

# コンピュータがランダムにマスを選ぶ関数
def computer_move(board):
    available_moves = [i for i, space in enumerate(board) if space != "○" and space != "×"]
    return random.choice(available_moves)

# マルバツゲームのメイン関数
def play_game():
    board = [str(i) for i in range(1, 10)]  # 1から9までの番号が入ったグリッド
    print("マルバツゲームを開始します!")

    while True:
        # 現在のグリッドを表示
        display_board(board)

        # プレイヤーのターン
        while True:
            try:
                player_move = int(input("どのマスに置きますか?(1-9で入力してください)> ")) - 1
                if board[player_move] not in ["○", "×"]:
                    board[player_move] = "○"
                    break
                else:
                    print("そのマスはすでに埋まっています。別のマスを選んでください。")
            except (ValueError, IndexError):
                print("無効な入力です。1から9の数字を入力してください。")

        # 勝利判定
        if check_win(board, "○"):
            display_board(board)
            print("プレイヤーの勝ちです!")
            break

        # 引き分け判定
        if check_draw(board):
            display_board(board)
            print("引き分けです!")
            break

        # コンピュータのターン
        print("コンピュータのターンです...")
        comp_move = computer_move(board)
        board[comp_move] = "×"
        print(f"コンピュータが選んだマス: {comp_move + 1}")

        # 勝利判定
        if check_win(board, "×"):
            display_board(board)
            print("コンピュータの勝ちです!")
            break

        # 引き分け判定
        if check_draw(board):
            display_board(board)
            print("引き分けです!")
            break

if __name__ == "__main__":
    play_game()

マルバツゲームのコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

【★★★★★】モンスター捕獲ゲーム

モンスター捕獲ゲームを作成しましょう。

プレイヤーはスライム、ゴブリン、ドラゴンの3種類のモンスターに挑みます。

それぞれのモンスターとサイコロを使って勝負し、プレイヤーのサイコロの出目がモンスターの出目より大きければ捕獲に成功します。

モンスターを一匹でも多く捕まえることを目指し、捕まえたモンスターのリストを最後に表示してください。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

スライムが現れた!
スライムがサイコロを振った。出目は 3
サイコロを振りますか? (yes/no): yes
プレイヤーがサイコロを振った。出目は 5
スライムを捕まえた!
ゴブリンが現れた!
ゴブリンがサイコロを振った。出目は 4
サイコロを振りますか? (yes/no): yes
プレイヤーがサイコロを振った。出目は 2
ゴブリンを捕まえられなかった。ゲームオーバー!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン5-☆1:モンスター捕獲ゲームを作ろう【Python】モンスター捕獲ゲームのコードを書く練習問題。モンスタークラスを使い、サイコロを振ってモンスターを捕獲するゲームの実装を通じて、Pythonのクラスや関数、ランダムモジュールの使い方を学べます。この実践的なコードで、初心者でも楽しくPythonの基本を身につけることができます。...

モンスター捕獲ゲームのコードは↓↓をクリック

モンスター捕獲ゲームのコード
import random

# モンスタークラス
class Monster:
    def __init__(self, name):
        self.name = name

    # モンスターの名前を取得
    def get_name(self):
        return self.name

    # サイコロを振る(1~6のランダムな数字を返す)
    def dice_roll(self):
        return random.randint(1, 6)

# モンスター捕獲ゲーム関数
def monster_capture_game():
    monsters = [Monster("スライム"), Monster("ゴブリン"), Monster("ドラゴン")]
    captured_monsters = []

    # 各モンスターとの対決
    for monster in monsters:
        print(f"{monster.get_name()}が現れた!")
        captured = False

        while not captured:
            monster_roll = monster.dice_roll()
            print(f"{monster.get_name()}がサイコロを振った。出目は {monster_roll}")

            # プレイヤーにサイコロを振るか選ばせる
            response = input("サイコロを振りますか? (yes/no): ").strip().lower()

            if response == "no":
                break

            player_roll = monster.dice_roll()
            print(f"プレイヤーがサイコロを振った。出目は {player_roll}")

            # プレイヤーの出目による判定
            if player_roll > monster_roll:
                print(f"{monster.get_name()}を捕まえた!")
                captured_monsters.append(monster.get_name())
                captured = True
            elif player_roll == monster_roll:
                print("引き分けでもう一度!")
            else:
                print(f"{monster.get_name()}を捕まえられなかった。ゲームオーバー!")
                return

    # 捕まえたモンスターを表示
    print("捕まえたモンスター: " + ", ".join(captured_monsters))
    print("ゲーム終了")

# ゲームを実行
if __name__ == "__main__":
    monster_capture_game()

モンスター捕獲ゲームのコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

【★★★★★】モンスターとのバトルゲーム

シンプルなターン制バトルゲームを作成しましょう。

このゲームでは「勇者」と「ドラゴン」というキャラクターが互いに攻撃や防御を行います。

勇者が攻撃を選択した場合、ドラゴンのHPが減少し、防御を選択した場合、ドラゴンの次の攻撃を防ぐことができます。

ドラゴンは一定の確率で攻撃を成功させることができ、攻撃が失敗するたびに次の攻撃の成功率が上がります。

勇者のHPが0になった場合はゲームオーバー、ドラゴンのHPが0になった場合はプレイヤーの勝利です。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

勇者のHP: 100, ドラゴンのHP: 100, ドラゴンの攻撃成功率: 60%
攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御): 1
勇者の攻撃!
ドラゴンに20のダメージ!

ドラゴンのHP: 80, ドラゴンの攻撃!
攻撃が成功!
勇者に40のダメージ!

勇者のHP: 60, ドラゴンのHP: 80, ドラゴンの攻撃成功率: 60%
攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御): 2
勇者は防御を選択した!
ドラゴンの攻撃!
攻撃がミス!防御が成功しました!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【Python】レッスン5-☆2:モンスターとのバトルゲームを作ろう この記事の練習問題で使用する知識: レッスン1~4の知識、クラスの定義と使用、__init__メソッド、メソッドの定義と使用 ...

モンスターとのバトルゲームのコードは↓↓をクリック

モンスターとのバトルのコード
import random

# プレイヤーとモンスターのクラス定義
class Character:
    def __init__(self, name, hp, attack_power):
        self.name = name
        self.hp = hp
        self.attack_power = attack_power

    def is_alive(self):
        return self.hp > 0

# ゲームの初期設定
player = Character("勇者", 100, 20)
monster = Character("ドラゴン", 100, 40)
monster_attack_chance = 60  # 初期の攻撃成功率

# ゲームのメインループ
while player.is_alive() and monster.is_alive():
    # 現在のステータスを表示
    print(f"\n勇者のHP: {player.hp}, ドラゴンのHP: {monster.hp}, ドラゴンの攻撃成功率: {monster_attack_chance}%")
    action = input("攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御): ")

    # プレイヤーのターン
    if action == "1":
        print("勇者の攻撃!")
        monster.hp -= player.attack_power
        print(f"ドラゴンに{player.attack_power}のダメージ!")
    elif action == "2":
        print("勇者は防御を選択した!")
        defend = True
    else:
        print("無効な入力です。もう一度入力してください。")
        continue

    # モンスターのターン
    if monster.is_alive():
        attack_roll = random.randint(1, 100)
        if attack_roll <= monster_attack_chance:
            if 'defend' in locals() and defend:
                print("ドラゴンの攻撃!")
                print("攻撃がミス!防御が成功しました!")
                del defend
                monster_attack_chance = 60  # 攻撃成功率をリセット
            else:
                print("ドラゴンの攻撃!")
                print("攻撃が成功!")
                player.hp -= monster.attack_power
                print(f"勇者に{monster.attack_power}のダメージ!")
                monster_attack_chance = 60  # 攻撃成功率をリセット
        else:
            print("ドラゴンの攻撃!")
            print("攻撃がミス!")
            monster_attack_chance += 20  # 攻撃成功率を上昇

# 勝敗の判定
if player.is_alive():
    print("\nドラゴンを倒した!勇者の勝利!")
else:
    print("\n勇者は倒された…ドラゴンの勝利!")

モンスターとのバトルのコードは以上です。楽しんでください^^

コードの解説はこちらを参照。

今後追加予定のゲーム一覧

以下のゲームのコードを順次追加予定です。

  • 高度なじゃんけんゲーム
  • ポーカーゲーム
  • ブラックジャック
  • 神経衰弱

Python記事トップへ戻る
トップページへ戻る