【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で作る簡単な登録フォーム入門
Tkinterは、GUI(グラフィカルユーザーインターフェース)を開発するためのPython標準ライブラリです。Tkinterを使うことで、ウィンドウをはじめとするさまざまなUI(ユーザーインターフェース)要素を持つデスクトップアプリケーションを作成できます。推奨されているPython 3.xを使用している場合、TkinterはPythonに標準搭載されているパッケージなので、追加のインストールは一切不要です。この記事では、まずTkinterの基本的なGUIアプリケーションの作り方を解説し、その後、実際の登録フォームやローン金利計算ツールといった実用的な例まで段階的に見ていきます。シンプルなG
-
PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法
はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c