Pythonツール ゲーム

Pythonで反射神経能力測定ゲームの作り方

概要

PythonでGUIを使用して、反射神経を測定するゲームを作成します。このゲームでは、画面に表示される赤い丸と緑の丸をクリックして得点を競います。30秒間でどれだけ多くの丸をクリックできるかが勝負です。残り10秒になると小さな緑の丸が追加され、クリックすると高得点を獲得できます。

使用例

このゲームは、プログラミングの学習や反射神経のトレーニングに最適です。プログラミング初心者でも簡単にGUIアプリケーションを作成する方法を学ぶことができます。

必要なPythonライブラリとインストール方法

このゲームを作成するには、Pythonの標準ライブラリであるtkinterを使用します。tkinterはPythonに標準で含まれているため、追加のインストールは不要です。

使用手順

  1. Pythonがインストールされていることを確認します。インストールされていない場合は、Python公式サイトからダウンロードしてインストールしてください。
  2. 下記のプログラムコードをコピーし、メモ帳などのテキストエディタに貼り付けます。
  3. ファイルを保存し、ファイル名をreaction_game.pyとします。
  4. コマンドプロンプトまたはターミナルを開き、保存したファイルがあるディレクトリに移動します。
  5. python reaction_game.pyコマンドを実行してゲームを開始します。

注意点

  • ゲーム中に表示される赤い丸をクリックすると2点、緑の丸をクリックすると5点が加算されます。
  • クリックが外れた場合は-1点となります。
  • ゲームが終了すると「Return to Title」ボタンが表示され、それをクリックするとタイトル画面に戻ります。

プログラム

下記のコードをメモ帳などに丸々コピーしてpythonファイル(reaction_game.py)にしてください。

pythonコードをコピーするimport tkinter as tk
import random

class ReactionGame:
    def __init__(self, root):
        self.root = root
        self.root.title("Reaction Time Game")

        self.canvas = tk.Canvas(root, width=500, height=500, bg="white")
        self.canvas.pack()

        self.title_frame = tk.Frame(root)
        self.title_frame.pack()

        self.title_label = tk.Label(self.title_frame, text="Reaction Time Game", font=("Arial", 24))
        self.title_label.pack(pady=20)

        self.start_button = tk.Button(self.title_frame, text="Start", font=("Arial", 18), command=self.start_game)
        self.start_button.pack(pady=20)

        self.score_label = tk.Label(self.root, text="Score: 0", font=("Arial", 18))
        self.score_label.pack(pady=10)

        self.timer_label = tk.Label(self.root, text="Time left: 30", font=("Arial", 18))
        self.timer_label.pack(pady=10)

        self.return_button = tk.Button(self.root, text="Return to Title", font=("Arial", 18), command=self.return_to_title)
        self.return_button.pack(pady=20)
        self.return_button.pack_forget()

        self.canvas.bind("<Button-1>", self.check_click)

        self.score = 0
        self.time_left = 30
        self.target_coords = []
        self.game_running = False

    def start_game(self):
        self.title_frame.pack_forget()
        self.canvas.pack()
        self.score = 0
        self.time_left = 30
        self.update_score()
        self.update_timer()
        self.game_running = True
        self.next_target()
        self.update_clock()

    def update_clock(self):
        if self.game_running:
            self.time_left -= 1
            self.update_timer()
            if self.time_left > 0:
                self.root.after(1000, self.update_clock)
            else:
                self.end_game()

    def next_target(self):
        if not self.game_running:
            return
        self.canvas.delete("all")
        self.target_coords = []
        if self.time_left <= 10:
            x = random.randint(75, 425)
            y = random.randint(75, 425)
            self.target_coords.append((x, y, x + 25, y + 25, "green"))
            self.canvas.create_oval(x, y, x + 25, y + 25, fill="green")

        x = random.randint(50, 450)
        y = random.randint(50, 450)
        self.target_coords.append((x, y, x + 50, y + 50, "red"))
        self.canvas.create_oval(x, y, x + 50, y + 50, fill="red")
        
        self.root.after(1000, self.next_target)

    def check_click(self, event):
        if not self.game_running:
            return
        hit = False
        for (x1, y1, x2, y2, color) in self.target_coords:
            if x1 <= event.x <= x2 and y1 <= event.y <= y2:
                hit = True
                if color == "red":
                    self.score += 2
                elif color == "green":
                    self.score += 5
                break
        if not hit:
            self.score -= 1
        self.update_score()

    def update_score(self):
        self.score_label.config(text=f"Score: {self.score}")

    def update_timer(self):
        self.timer_label.config(text=f"Time left: {self.time_left}")

    def end_game(self):
        self.game_running = False
        self.canvas.delete("all")
        self.score_label.config(text=f"Game Over! Final Score: {self.score}")
        self.return_button.pack()

    def return_to_title(self):
        self.return_button.pack_forget()
        self.canvas.pack_forget()
        self.title_frame.pack()

if __name__ == "__main__":
    root = tk.Tk()
    game = ReactionGame(root)
    root.mainloop()

あるいは、下のテキストファイルをダウンロードし、「.txt」を「.py」に変えることでそのまま使えます。

まとめ

PythonでGUIを使用した反射神経測定ゲームの作成方法を紹介しました。このゲームは、プログラミング初心者でも簡単に作成でき、楽しみながらプログラミングを学ぶことができます。ぜひ挑戦してみてください。

-Pythonツール, ゲーム