【コピペ可】Python基本ゲームコード集10選|導入・基礎・AIを使った作り方を解説

Arduino 機器制作






【コピペ可】Python基本ゲームコード集10選|導入・基礎・AIを使った作り方を解説










AI × Python Game Prototyping

AIとPythonで作る、
「動く・遊べる」基本ゲーム10選。

Pythonでゲームを作るのに、難しいライブラリや複雑な環境構築は必要ありません。標準ライブラリだけで、数当てゲームからturtleを使ったグラフィカルなゲームまで作れます。この記事では、AIにゲームのコードを書かせるためのプロンプトの作り方から、生成されたコードの読み方、初心者がつまずきやすいポイント、そしてそのままコピペで動く基本ゲーム10本をまとめました。

対象読者: Python初級者 必要環境: Python 3.8以上(標準ライブラリのみ) コード: 10本+解説例1本
全コードCOPY対応pip install不要10歳からわかる解説スマホ最適化
RELATED ARTICLES

ハードウェアを実際に動かすコードにも興味がある方は、Arduinoコピペコード集(センサー編)AIを使ったArduinoプログラムの作り方ガイドもあわせてご覧ください。ソフトウェアであるPythonと、実際の部品を動かすArduinoでは、AIへのプロンプトの組み立て方に共通点が多くあります。

guess_the_number.py
import random
def main():
    secret = random.randint(1, 100)
    while True:
        guess = input("数字を入力: ")
        # ここに判定ロジックが入る
        break
if __name__ == "__main__":
    main()

01

なぜPythonのゲーム作りにAIを使うのか

Pythonは文法がシンプルなので、他の言語に比べてゲームのロジック(当たり判定、勝敗の判定、状態の管理など)を素早く形にできます。それでも「どの標準ライブラリを使えばいいか分からない」「入力ミスへの対処を全部自分で書くのは面倒」といった部分は、最初のハードルになりがちです。AIはこうした定型部分の下書きを素早く用意してくれるので、「思いついたゲームのルールをすぐ動く形にする」のを助けてくれます。

公式の仕様や標準ライブラリの詳細は、最終的にPython公式ドキュメント ↗で確認してください。なお「AIに定型部分を任せ、ロジックの設計は自分で行う」という進め方自体は、Arduinoのプログラム作成ガイドで解説した考え方と共通しています。

  • 入出力の定型処理:input()の値をどう検証し、どう変換するか
  • 状態管理の設計:じゃんけんや〇×ゲームのような「今どんな状態か」を管理する仕組み
  • デバッグの壁打ち:思った通りに動かない、エラーが出るといった症状からの原因整理
02

ゲーム用プロンプトの設計図

ゲームのコードをAIに依頼するときは、「使う機能」「ルール」「入力への対応」「繰り返しプレイの可否」を必ず伝えます。

要素 内容
使用環境 Pythonのバージョン、使ってよい機能 Python 3、標準ライブラリのみ
ゲームのルール 目的、勝敗条件、範囲 1〜100の数字を当てるゲーム
入力への対応 不正な入力があった場合の挙動 数字以外が入力されたら再入力を促す
非機能要件 繰り返しプレイ、コメントなど もう一度遊ぶか聞く、日本語コメント付き
PROMPTPython 3で、1〜100の数字を当てる「数当てゲーム」を作ってください。コンピュータがランダムに数字を1つ選び、プレイヤーがinput()で数字を入力するたびに「もっと大きい」「もっと小さい」とヒントを出してください。最大7回まで挑戦できるようにし、数字以外が入力された場合はエラーで止まらず再入力を促してください。正解または7回失敗したらゲームが終わり、「もう一度遊びますか?(y/n)」と聞いて続けられるようにしてください。関数に分割し、日本語コメントを付けてください。
POINT

「入力が数字以外だったらどうするか」「何回まで挑戦できるか」「もう一度遊べるようにするか」まで指定すると、そのまま動かせる完成度の高いコードになります。



03

生成されたコード全文

プロンプトから生成した「ヒント付き・回数制限あり・繰り返しプレイ可能な数当てゲーム」のコードです。後半の10選とは別に、AI生成コードを読む教材として掲載しています。

guess_the_number_full.py
import random
def play_round(secret_number, max_attempts):
    """1回分の数当てゲームを実行し、正解できたかを返す"""
    for attempt in range(1, max_attempts + 1):
        guess_input = input(f"[{attempt}/{max_attempts}回目] 1〜100の数字を入力してください: ")
        if not guess_input.isdigit():
            print("半角数字で入力してください。")
            continue
        guess = int(guess_input)
        if guess == secret_number:
            print(f"正解! {attempt}回目で当たりました。")
            return True
        elif guess < secret_number:
            print("もっと大きい数字です。")
        else:
            print("もっと小さい数字です。")
    print(f"残念、正解は {secret_number} でした。")
    return False
def main():
    max_attempts = 7
    while True:
        secret_number = random.randint(1, 100)
        play_round(secret_number, max_attempts)
        again = input("もう一度遊びますか? (y/n): ").strip().lower()
        if again != "y":
            print("プレイしてくれてありがとう!")
            break
if __name__ == "__main__":
    main()
04

コード解説:ブロック単位で読む

def play_round(secret_number, max_attempts):
「1回分のゲーム」を1つの関数にまとめています。こうしておくと、main()側の繰り返し処理と、ゲーム本体のロジックを分けて考えられます。
if not guess_input.isdigit():
input()の戻り値は必ず文字列です。数字かどうかをisdigit()で確認してからint()に変換することで、数字以外が入力されてもエラーで止まらず再入力を促せます。
for attempt in range(1, max_attempts + 1):
「何回目の挑戦か」を1から数えるためにrange(1, max_attempts + 1)としています。range(7)だと0から6になってしまうため、表示用に+1しています。
if __name__ == "__main__":
このファイルが直接実行された時だけmain()を呼び出す、Pythonの定番の書き方です。他のファイルからimportして関数だけ使いたい場合に便利です。
05

Pythonゲームコードにありがちな落とし穴

CHECK 1

input()の戻り値は常に文字列(str型)です。int(input())のように直接変換すると、数字以外が入力された瞬間にエラーで停止します。isdigit()などで確認してから変換しましょう。

CHECK 2

while True:を使う繰り返し処理には、必ずbreakやreturnで抜け出す条件が必要です。条件を書き忘れると、プログラムが終了しない無限ループになります。

CHECK 3

ファイル名をturtle.pyやrandom.pyのように標準ライブラリと同じ名前にすると、import時に自分のファイルを読み込んでしまい、意味の分からないエラーになります。ファイル名は標準ライブラリと重複しないようにしてください。

06

実行結果を確認し、対話で直す

実行した後は必ずターミナルの表示や実際の動作を確認します。「動かない」だけでなく、使用しているPythonのバージョン、実行したコード全文、エラーメッセージ全文をAIへ伝えると修正が早くなります。

FOLLOW-UP PROMPTPython 3.11、提示コードを使用しています。半角数字ではなく「123」のような全角数字を入力すると、isdigit()はTrueを返すのにint()でエラーになってしまいます。原因として考えられることと、コード側でできる対策を教えてください。
07

10本を実行する前の共通チェック

  • 各コードは1本ずつ別の.pyファイルとして保存する(ファイル名は標準ライブラリと重複させない)
  • ターミナルからpython ファイル名.pyまたはpython3 ファイル名.pyで実行する
  • input()を使うコードは、ターミナルなど対話的に入力できる環境で実行する
  • turtleを使うコードはGUI表示に対応した環境で実行する(一部のオンライン実行環境では動作しない場合がある)
  • すべて標準ライブラリのみで動作するため、pip installは不要
  • 思った通りに動かない時は、まずprint()で変数の中身を表示して確認する
LIBRARY

今回使用するのはrandom(乱数)、time(時間計測)、turtle(簡易グラフィックス)という、いずれもPythonに最初から含まれる標準ライブラリだけです。追加インストールなしで、Pythonが入った環境ならそのまま動きます。

08

コピペですぐ試せるPythonゲームコード集10選

すべてPython 3を想定した独立したコードです(標準ライブラリのみ使用)。「入力してあそぶ」「対戦する」「反応速度を測る」「見て遊ぶ」の4つのテーマでまとめました。検索欄に「じゃんけん」「クイズ」「turtle」などと入力すると対象コードだけに絞れます。

10 / 10件を表示
該当するゲームがありません。別のキーワードで検索してください。
GAME 01

数当てゲーム(シンプル版)

コンピュータが選んだ1〜50の数字を、ヒントを頼りに当てます。input・while・条件分岐の基本形です。

入門random

学べる基本

input()、while True、if/elif/else、型変換

実行方法

ターミナルで python c01.py

コードを表示・コピー
c01.py
import random
def main():
    secret_number = random.randint(1, 50)
    attempts = 0
    print("1〜50の数字を当ててください!")
    while True:
        guess = input("数字を入力: ")
        if not guess.isdigit():
            print("半角数字で入力してください。")
            continue
        guess = int(guess)
        attempts += 1
        if guess < secret_number:
            print("もっと大きい数字です。")
        elif guess > secret_number:
            print("もっと小さい数字です。")
        else:
            print(f"正解! {attempts}回で当たりました。")
            break
if __name__ == "__main__":
    main()

調整ポイント:random.randint(1, 50)の範囲を変えると難易度を調整できます。挑戦回数に上限を付けたい場合はforループに変更してください。

10選の一覧へ戻る ↑

GAME 02

じゃんけんゲーム

コンピュータとじゃんけんで対戦します。辞書(dict)を使った勝敗判定の基本形です。

入門random

学べる基本

リスト、辞書、random.choice()、関数の戻り値

実行方法

ターミナルで python c02.py

コードを表示・コピー
c02.py
import random
HANDS = ["グー", "チョキ", "パー"]
def judge(player, computer):
    if player == computer:
        return "あいこ"
    wins = {"グー": "チョキ", "チョキ": "パー", "パー": "グー"}
    return "あなたの勝ち" if wins[player] == computer else "あなたの負け"
def main():
    print("じゃんけんゲームを始めます(0:グー 1:チョキ 2:パー)")
    while True:
        choice = input("手を選んでください (0/1/2、qで終了): ")
        if choice == "q":
            print("ゲームを終了します。")
            break
        if choice not in ("0", "1", "2"):
            print("0・1・2のいずれかを入力してください。")
            continue
        player = HANDS[int(choice)]
        computer = random.choice(HANDS)
        result = judge(player, computer)
        print(f"あなた: {player} / コンピュータ: {computer} → {result}")
if __name__ == "__main__":
    main()

調整ポイント:HANDSの並び順を変えても動作は変わりません。3回勝負にしたい場合はスコアを数える変数を追加してみましょう。

10選の一覧へ戻る ↑

GAME 03

サイコロゲーム(ゾロ目を狙う)

Enterキーを押すたびにサイコロを2つ振り、ゾロ目が出るまで挑戦します。

入門random

学べる基本

タプルの戻り値、random.randint()、カウンタ変数

実行方法

ターミナルで python c03.py

コードを表示・コピー
c03.py
import random
def roll_dice():
    return random.randint(1, 6), random.randint(1, 6)
def main():
    print("Enterキーでサイコロを2つ振ります。ゾロ目が出たら勝ちです。")
    rolls = 0
    while True:
        input("Enterキーを押してサイコロを振る...")
        dice1, dice2 = roll_dice()
        rolls += 1
        print(f"結果: {dice1} と {dice2}")
        if dice1 == dice2:
            print(f"ゾロ目! {rolls}回目で成功しました。")
            break
        else:
            print("ハズレ、もう一度!")
if __name__ == "__main__":
    main()

調整ポイント:サイコロの数を増やしたい場合は、roll_dice()が返す値の数を増やし、判定条件も合わせて変更してください。

10選の一覧へ戻る ↑

GAME 04

クイズゲーム(三択・スコア表示)

三択クイズに答えていき、最後に正解数を表示します。リストと辞書を組み合わせた問題管理です。

入門+不要

学べる基本

辞書のリスト、enumerate()、for文、範囲チェック

実行方法

ターミナルで python c04.py

コードを表示・コピー
c04.py
QUESTIONS = [
    {"q": "Pythonを作った人は誰?", "choices": ["グイド・ヴァンロッサム", "スティーブ・ジョブズ", "リーナス・トーバルズ"], "answer": 0},
    {"q": "リストを表す記号はどれ?", "choices": ["{}", "()", "[]"], "answer": 2},
    {"q": "print()の役割は?", "choices": ["画面に表示する", "ファイルを削除する", "数値を計算する"], "answer": 0},
]
def ask(question):
    print(question["q"])
    for i, choice in enumerate(question["choices"]):
        print(f"  {i}: {choice}")
    while True:
        answer = input("番号で答えてください: ")
        if answer.isdigit() and int(answer) in range(len(question["choices"])):
            return int(answer) == question["answer"]
        print("選択肢の番号を入力してください。")
def main():
    score = 0
    for question in QUESTIONS:
        if ask(question):
            print("正解!")
            score += 1
        else:
            print("残念、不正解です。")
        print()
    print(f"結果: {score} / {len(QUESTIONS)} 問正解")
if __name__ == "__main__":
    main()

調整ポイント:QUESTIONSのリストに辞書を追加すれば、問題数はいくつでも増やせます。自分の好きなジャンルの問題に差し替えてみましょう。

10選の一覧へ戻る ↑

GAME 05

ハングマン(単語当てゲーム)

アルファベットを1文字ずつ当てて、隠された単語を完成させます。集合(set)の使い方も学べます。

基礎random

学べる基本

set(集合)、文字列のイテレーション、for-else文

実行方法

ターミナルで python c05.py

コードを表示・コピー
c05.py
import random
WORDS = ["python", "apple", "guitar", "sunset", "robot"]
def main():
    word = random.choice(WORDS)
    guessed = set()
    max_wrong = 6
    wrong = 0
    print("アルファベットを1文字ずつ当てて単語を完成させてください。")
    while wrong < max_wrong:
        display = " ".join(letter if letter in guessed else "_" for letter in word)
        print(f"\n単語: {display} 残りミス回数: {max_wrong - wrong}")
        if "_" not in display:
            print("クリア! 単語を当てました。")
            break
        letter = input("アルファベットを1文字: ").lower()
        if len(letter) != 1 or not letter.isalpha():
            print("アルファベット1文字を入力してください。")
            continue
        if letter in guessed:
            print("その文字はすでに入力済みです。")
            continue
        guessed.add(letter)
        if letter not in word:
            wrong += 1
            print("ハズレです。")
    else:
        print(f"\nゲームオーバー、正解は「{word}」でした。")
if __name__ == "__main__":
    main()

調整ポイント:while〜else構文を使っているため、whileがbreakで終わった場合はelse節が実行されません(クリア時にゲームオーバー表示が出ない仕組みです)。

10選の一覧へ戻る ↑

GAME 06

しりとりゲーム(コンピュータと対戦)

プレイヤーとコンピュータが交互に単語を出し合います。コンピュータの単語リストは限定的な簡易版です。

基礎random

学べる基本

リスト内包表記、文字列のインデックス指定、条件分岐の組み合わせ

実行方法

ターミナルで python c06.py

コードを表示・コピー
c06.py
import random
WORD_BANK = ["りんご", "ごりら", "らっぱ", "ぱんだ", "だちょう", "うさぎ", "ぎたー"]
def main():
    used_words = []
    print("しりとりゲームです(コンピュータの単語リストは限られています)")
    last_char = None
    while True:
        word = input("単語を入力してください(qで終了): ")
        if word == "q":
            print("ゲームを終了します。")
            break
        if word in used_words:
            print("その単語はすでに使われています。")
            continue
        if last_char and word[0] != last_char:
            print(f"「{last_char}」から始まる単語を入力してください。")
            continue
        used_words.append(word)
        print(f"あなた: {word}")
        candidates = [w for w in WORD_BANK if w[0] == word[-1] and w not in used_words]
        if not candidates:
            print("コンピュータは答えられません。あなたの勝ちです!")
            break
        computer_word = random.choice(candidates)
        used_words.append(computer_word)
        print(f"コンピュータ: {computer_word}")
        last_char = computer_word[-1]
if __name__ == "__main__":
    main()

調整ポイント:WORD_BANKに単語を増やすほど、コンピュータが長く応戦できるようになります。「ん」で終わる単語を弾く本格的なルールにも発展させられます。

10選の一覧へ戻る ↑

GAME 07

〇×ゲーム(三目並べ、2人対戦)

同じ画面で2人が交互にプレイする定番ゲームです。盤面の管理と勝敗判定の基本形です。

基礎+不要

学べる基本

リストのスライス、タプルのリスト、盤面の表示ロジック

実行方法

ターミナルで python c07.py

コードを表示・コピー
c07.py
def print_board(board):
    print()
    for row in range(3):
        print(" | ".join(board[row * 3:row * 3 + 3]))
        if row < 2:
            print("--+---+--")
    print()
def check_winner(board):
    lines = [(0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6)]
    for a, b, c in lines:
        if board[a] != " " and board[a] == board[b] == board[c]:
            return board[a]
    return None
def main():
    board = [" "] * 9
    current_player = "X"
    print_board(board)
    while True:
        position = input(f"{current_player}のターン。マス番号(1-9)を入力: ")
        if not position.isdigit() or not (1 <= int(position) <= 9):
            print("1〜9の数字を入力してください。")
            continue
        index = int(position) - 1
        if board[index] != " ":
            print("そのマスはすでに埋まっています。")
            continue
        board[index] = current_player
        print_board(board)
        winner = check_winner(board)
        if winner:
            print(f"{winner}の勝ちです!")
            break
        if " " not in board:
            print("引き分けです。")
            break
        current_player = "O" if current_player == "X" else "X"
if __name__ == "__main__":
    main()

調整ポイント:linesのタプルは3つ並ぶと勝利になる組み合わせ(縦・横・斜め)を表しています。盤面を4×4に広げる場合はこのリストを作り直す必要があります。

10選の一覧へ戻る ↑

GAME 08

リアクションタイムゲーム(反応速度を計測)

合図が出てからEnterキーを押すまでの時間をミリ秒単位で測定します。time.sleep()とtime.time()の基本形です。

入門+time / random

学べる基本

time.sleep()、time.time()、random.uniform()、経過時間の計算

実行方法

ターミナルで python c08.py

コードを表示・コピー
c08.py
import random
import time
def main():
    print("合図が出たらEnterキーをできるだけ早く押してください。")
    input("準備ができたらEnterキーを押してください...")
    wait_time = random.uniform(2, 5)
    time.sleep(wait_time)
    print("今です! Enterキーを押して!")
    start_time = time.time()
    input()
    reaction_time = time.time() - start_time
    print(f"反応速度: {reaction_time:.3f} 秒")
if __name__ == "__main__":
    main()

調整ポイント:random.uniform(2, 5)の範囲を変えると、合図が出るまでの待ち時間を調整できます。何度も挑戦できるようwhileループで囲むのもおすすめです。

10選の一覧へ戻る ↑

GAME 09

神経衰弱ゲーム(コンソール版カード当て)

番号付きのカードから同じ数字のペアを探します。リストのシャッフルと盤面表示の練習になります。

基礎+random

学べる基本

random.shuffle()、リストの掛け算、フォーマット付きprint

実行方法

ターミナルで python c09.py

コードを表示・コピー
c09.py
import random
def create_board():
    values = list(range(1, 9)) * 2
    random.shuffle(values)
    return values
def print_board(board, revealed):
    for i, value in enumerate(board):
        display = str(value) if revealed[i] else "?"
        end = "\n" if (i + 1) % 4 == 0 else "  "
        print(f"[{i+1:2}:{display}]", end=end)
    print()
def main():
    board = create_board()
    revealed = [False] * len(board)
    matched_pairs = 0
    print("神経衰弱ゲームです。同じ数字のペアを見つけてください。")
    while matched_pairs < len(board) // 2:
        print_board(board, revealed)
        first = int(input("1枚目のカード番号: ")) - 1
        second = int(input("2枚目のカード番号: ")) - 1
        if board[first] == board[second] and first != second:
            revealed[first] = revealed[second] = True
            matched_pairs += 1
            print("そろいました!")
        else:
            print(f"ハズレ: {board[first]} と {board[second]} でした。")
    print_board(board, revealed)
    print("全部そろいました! クリアです。")
if __name__ == "__main__":
    main()

調整ポイント:このコードは数字入力の検証を省いたシンプル版です。範囲外の番号を入力するとエラーになるため、慣れてきたらc01やc07のような入力チェックを追加してみましょう。

10選の一覧へ戻る ↑

GAME 10

turtleで的当てゲーム(グラフィカル)

画面上に現れる的をクリックするとスコアが増え、的が別の場所に移動します。唯一のグラフィカルなゲームです。

基礎+turtle / random

学べる基本

turtleの基本操作、onclick()によるイベント処理、グローバル変数

実行方法

ターミナルで python c10.py(GUI表示に対応した環境が必要)

コードを表示・コピー
c10.py
import turtle
import random
WIDTH, HEIGHT = 500, 500
screen = turtle.Screen()
screen.setup(WIDTH, HEIGHT)
screen.title("的当てゲーム")
screen.bgcolor("white")
target = turtle.Turtle()
target.shape("circle")
target.color("red")
target.penup()
score = 0
score_display = turtle.Turtle()
score_display.hideturtle()
score_display.penup()
score_display.goto(0, HEIGHT / 2 - 40)
def move_target():
    x = random.randint(-WIDTH // 2 + 30, WIDTH // 2 - 30)
    y = random.randint(-HEIGHT // 2 + 30, HEIGHT // 2 - 30)
    target.goto(x, y)
def update_score():
    score_display.clear()
    score_display.write(f"スコア: {score}", align="center", font=("Arial", 16, "normal"))
def on_target_click(x, y):
    global score
    score += 1
    update_score()
    move_target()
target.onclick(on_target_click)
move_target()
update_score()
screen.mainloop()

調整ポイント:制限時間を追加したい場合はtimeモジュールと組み合わせ、一定時間が過ぎたらscreen.bye()で画面を閉じるように発展させられます。

10選の一覧へ戻る ↑

09

よくある質問とまとめ

Python初心者でもこの記事のゲームは作れますか?

はい。すべて標準ライブラリ(random、time、turtleなど)だけで動くので、pip installなどの追加インストールなしで、Pythonをインストールした直後の環境でそのまま実行できます。

AIに書かせたコードをそのまま使っても大丈夫ですか?

動作確認は必要ですが、学習目的や個人利用であれば問題ありません。特にinput()での想定外の入力(数字以外の文字など)に対するエラー処理は、AIが省略しがちなので自分で確認・追加すると安心です。

turtleモジュールは追加インストールが必要ですか?

turtleはPython標準ライブラリの一部なので追加インストールは不要です。ただし一部のLinux環境ではtkinterが別パッケージになっている場合があり、その際はOS側でtkinterを追加する必要があります。

オンライン実行環境でも動きますか?

input()を使うコードの多くはブラウザ上のオンライン実行環境でも動作しますが、turtleを使うグラフィカルなコードはGUI表示に対応した環境が必要です。ローカルのPython環境での実行を推奨します。

まずは部品が少なく仕組みも分かりやすい「数当てゲーム」「じゃんけんゲーム」のどちらか1本を動かし、動作の仕組みを目で確認するところから始めると理解しやすくなります。動いたコードに対して、AIへ「挑戦回数を変えられるようにして」「スコアをファイルに保存できるようにして」「turtleで見た目を作って」と追加依頼すれば、同じロジックから次の作品へどんどん発展させられます。

画面の中だけでなく実際に部品を動かしてみたくなったら、Arduinoコピペコード集(センサー編)も参考にしてみてください。

AI × PYTHON GAME GUIDE — 書いて、動かして、遊びながらコードを育てていきましょう。



関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE