皆さんこんにちは!
今回はPythonを使って、GUIベースの〇×ゲーム(Tic-Tac-Toe)を作成する方法を紹介します。
tkinterライブラリを使用して、シンプルで直感的なユーザーインターフェースを構築し、各プレイヤーのマークを色分けすることで視覚的に区別しやすくしました。
この記事を参考にプログラミングの学習に役立ててください!
ゲーム画面
まず、完成した画面を以下に載せます。
〇を青で×を赤で表示しています。
完成したコード
完成したコードを以下に示します。コード全体をコピーして実行することで、GUIベースの〇×ゲームがプレイできます。
import tkinter as tk
from tkinter import messagebox
# ボードの初期化
board = [[" " for _ in range(3)] for _ in range(3)]
current_player = "X"
# 色の定義
colors = {"X": "red", "O": "blue"}
# ボタンがクリックされたときの処理
def on_click(row, col):
global current_player
# すでに埋まっている場合は何もしない
if board[row][col] != " ":
return
# ボードを更新し、ボタンにプレイヤーを表示
board[row][col] = current_player
buttons[row][col].config(text=current_player, fg=colors[current_player])
# 勝利チェック
if check_win(current_player):
messagebox.showinfo("ゲーム終了", f"プレイヤー {current_player} の勝利!")
reset_board()
return
# 引き分けチェック
if all(all(cell != " " for cell in row) for row in board):
messagebox.showinfo("ゲーム終了", "引き分けです!")
reset_board()
return
# プレイヤーの交代
current_player = "O" if current_player == "X" else "X"
# 勝利条件のチェック
def check_win(player):
# 行、列、および対角線のチェック
for i in range(3):
if all(board[i][j] == player for j in range(3)) or all(board[j][i] == player for j in range(3)):
return True
if all(board[i][i] == player for i in range(3)) or all(board[i][2-i] == player for i in range(3)):
return True
return False
# ボードのリセット
def reset_board():
global board, current_player
board = [[" " for _ in range(3)] for _ in range(3)]
current_player = "X"
for row in buttons:
for button in row:
button.config(text=" ", fg="black")
# GUIのセットアップ
root = tk.Tk()
root.title("〇×ゲーム")
buttons = [[None for _ in range(3)] for _ in range(3)]
# グリッドにボタンを配置
for i in range(3):
for j in range(3):
button = tk.Button(root, text=" ", font=('normal', 40), width=5, height=2, command=lambda i=i, j=j: on_click(i, j))
button.grid(row=i, column=j)
buttons[i][j] = button
# メインループの開始
root.mainloop()
コードの解説
ライブラリのインポート
最初に、必要なライブラリをインポートします。tkinterはPythonに標準で含まれているGUIライブラリです。
import tkinter as tk
from tkinter import messagebox
ボードの初期化
ゲームボードを3×3の空のリストとして初期化し、最初のプレイヤーをX
に設定します。
board = [[" " for _ in range(3)] for _ in range(3)]
current_player = "X"
色の定義
各プレイヤーの記号に色を割り当てます。X
は赤、O
は青に設定します。
colors = {"X": "red", "O": "blue"}
ボタンがクリックされたときの処理
ボタンがクリックされたときに実行される関数を定義します。この関数では、プレイヤーのターンを処理し、ボードを更新し、勝利条件や引き分けをチェックします。
def on_click(row, col):
global current_player
if board[row][col] != " ":
return
board[row][col] = current_player
buttons[row][col].config(text=current_player, fg=colors[current_player])
if check_win(current_player):
messagebox.showinfo("ゲーム終了", f"プレイヤー {current_player} の勝利!")
reset_board()
return
if all(all(cell != " " for cell in row) for row in board):
messagebox.showinfo("ゲーム終了", "引き分けです!")
reset_board()
return
current_player = "O" if current_player == "X" else "X"
勝利条件のチェック
プレイヤーが勝利したかどうかをチェックします。行、列、および対角線のチェックを行います。
def check_win(player):
for i in range(3):
if all(board[i][j] == player for j in range(3)) or all(board[j][i] == player for j in range(3)):
return True
if all(board[i][i] == player for i in range(3)) or all(board[i][2-i] == player for i in range(3)):
return True
return False
ボードのリセット
ゲームが終了した後、ボードをリセットし、全てのボタンを初期状態に戻します。
def reset_board():
global board, current_player
board = [[" " for _ in range(3)] for _ in range(3)]
current_player = "X"
for row in buttons:
for button in row:
button.config(text=" ", fg="black")
GUIのセットアップ
tkinterを使用してGUIを作成し、ボタンを3×3のグリッドに配置します。各ボタンがクリックされたときに、on_click
関数が呼び出されます。
root = tk.Tk()
root.title("〇×ゲーム")
buttons = [[None for _ in range(3)] for _ in range(3)]
for i in range(3):
for j in range(3):
button = tk.Button(root, text=" ", font=('normal', 40), width=5, height=2, command=lambda i=i, j=j: on_click(i, j))
button.grid(row=i, column=j)
buttons[i][j] = button
root.mainloop()
最後に
このブログ記事では、Pythonのtkinterライブラリを使用してシンプルな〇×ゲームを作成しました。各プレイヤーの記号に色を付けることで、視覚的に区別しやすくしています。このコードを基に、さらに機能を追加して自分だけの〇×ゲームを作成してみてください。
また、pythonでゲームを作ってみたい方は以下の本を参考にしてください。
プログラミング未経験者にもおすすめの本です。
Pythonではじめるゲーム制作 超入門 知識ゼロからのプログラミング&アルゴリズムと数学 新品価格 |