Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】Tkinterで作るカラーゲーム – 30秒で文字の色を当てるGUIゲーム開発

GUIアプリケーションの開発において、Pythonの標準ライブラリ「Tkinter」は非常に人気が高く、初心者でも扱いやすいツールです。追加のインストール作業なしに使えるため、Tkinterを活用すればシンプルなGUIゲームでも手軽に開発できます。

この記事では、Tkinterを使った「カラーゲーム」の作り方を紹介します。このゲームでは、画面に表示される単語の文字色をプレイヤーが入力し、正解するたびにスコアが1点ずつ加算されます。制限時間は30秒で、使用される色は赤(Red)、青(Blue)、緑(Green)、ピンク(Pink)、黒(Black)、黄(Yellow)、オレンジ(Orange)、白(White)、紫(Purple)、茶色(Brown)の10種類です。

ゲームのルール

画面には「異なる色で描画された色の名前」が次々と表示されます。たとえば、Blueという文字が赤色で表示されるようなケースです。プレイヤーは文字の意味ではなく、その文字が実際に表示されている色を見分け、正しい色名を入力しなければなりません。これは人間の認知の乱れ(ストループ効果)を利用したもので、集中力と反射神経が試されるゲームになっています。

  • 制限時間:30秒
  • 正解するごとにスコア+1点
  • Enterキーでゲーム開始

サンプルコード

import tkinter
import random

# 使用する色のリスト
my_colours = ['Red','Blue','Green','Pink','Black','Yellow','Orange','White','Purple','Brown']
my_score = 0          # 現在のスコア
my_timeleft = 30      # 残り時間(秒)

def my_startGame(event):
    if my_timeleft == 30:
        # カウントダウンタイマーを開始
        my_countdown()
    my_nextColour()

def my_nextColour():
    global my_score
    global my_timeleft
    # ゲーム進行中の場合のみ処理
    if my_timeleft > 0:
        e.focus_set()
        # 入力された色名が表示中の文字色と一致していれば加点
        if e.get().lower() == my_colours[1].lower():
            my_score += 1
        # 入力ボックスをクリア
        e.delete(0, tkinter.END)
        # 色のリストをシャッフルして次の問題を生成
        random.shuffle(my_colours)
        label.config(fg=str(my_colours[1]), text=str(my_colours[0]))
        # スコア表示を更新
        my_scoreLabel.config(text="スコア: " + str(my_score))

# カウントダウンタイマー関数
def my_countdown():
    global my_timeleft
    if my_timeleft > 0:
        # 1秒ずつ減らしていく
        my_timeleft -= 1
        # 残り時間の表示を更新
        my_timeLabel.config(text="残り時間: " + str(my_timeleft))
        # 1000ミリ秒(1秒)後に再びこの関数を呼び出す
        my_timeLabel.after(1000, my_countdown)

# メイン処理
root = tkinter.Tk()
root.title("カラーゲーム")
root.geometry("375x200")

# 操作説明のラベル
my_instructions = tkinter.Label(root,
    text="文字そのものではなく、文字の「色」を入力してください!",
    font=('Helvetica', 12))
my_instructions.pack()

# スコア表示ラベル
my_scoreLabel = tkinter.Label(root, text="Enterキーを押してスタート",
    font=('Helvetica', 12))
my_scoreLabel.pack()

# 残り時間表示ラベル
my_timeLabel = tkinter.Label(root, text="残り時間: " + str(my_timeleft),
    font=('Helvetica', 12))
my_timeLabel.pack()

# 問題となる色名を大きく表示するラベル
label = tkinter.Label(root, font=('Helvetica', 60))
label.pack()

# 回答入力用のテキストボックス
e = tkinter.Entry(root)
root.bind('<Return>', my_startGame)
e.pack()
e.focus_set()

# GUIを開始
root.mainloop()

コードの解説

my_startGame関数:Enterキーの入力をトリガーに呼び出され、残り時間が30秒(初期状態)のときだけカウントダウンを開始します。これにより、タイマーが重複して起動するのを防いでいます。

my_nextColour関数:ゲームの中核となる部分です。入力ボックスの内容を小文字に変換して比較することで、大文字・小文字の違いを気にせず判定できるようにしています。その後、random.shuffle()で色リストをシャッフルし、label.config(fg=..., text=...)によって「表示する文字」と「実際の文字色」を別々の色に設定しています。

my_countdown関数:after(1000, ...)を使って1秒ごとに自分自身を再帰的に呼び出し、残り時間を減らしながらラベルを更新します。残り時間が0になると自動的に停止します。

実行方法

上記のコードを color_game.py などの名前で保存し、以下のコマンドで実行します。TkinterはPythonの標準ライブラリなので、公式のPythonがインストールされていれば追加設定は不要です。

python color_game.py

実行結果

起動すると、操作説明・スコア・残り時間が表示され、Enterキーを押すとゲームがスタートします。表示された文字の「色」を素早く入力して、30秒でどこまでスコアを伸ばせるかに挑戦してみましょう。

【Python】Tkinterで作るカラーゲーム – 30秒で文字の色を当てるGUIゲーム開発
【Python】Tkinterで作るカラーゲーム – 30秒で文字の色を当てるGUIゲーム開発
  1. Python Tkinterで作る簡単な登録フォーム入門

    Tkinterは、GUI(グラフィカルユーザーインターフェース)を開発するためのPython標準ライブラリです。Tkinterを使うことで、ウィンドウをはじめとするさまざまなUI(ユーザーインターフェース)要素を持つデスクトップアプリケーションを作成できます。推奨されているPython 3.xを使用している場合、TkinterはPythonに標準搭載されているパッケージなので、追加のインストールは一切不要です。この記事では、まずTkinterの基本的なGUIアプリケーションの作り方を解説し、その後、実際の登録フォームやローン金利計算ツールといった実用的な例まで段階的に見ていきます。シンプルなG

  2. PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法

    はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c