はじめに
Pythonの標準モジュールであるtkinterのみを使用してマルバツゲームを作成します。
仕様
・リセットボタンで初期化
・先攻は〇、後攻は×
・〇/×は交互
・同じ記号が縦・横・斜めでそろうと結果を表示
コード
import tkinter
class marubatsu_game():
def __init__(self, size=3):
self.size = size # マスのサイズ
self.app = tkinter.Tk() # Tkinterのお約束
self.app.title("o/x game") # タイトル
self.turn = "o" # マルから開始
self.v = [["" for y in range(size)] for x in range(size)] # 初期化
self.text = [[tkinter.StringVar() for y in range(size)] for x in range(size)] #初期化
def _reset_button(self): # Resetを押したときの処理
self.winner.set("")
self.turn = "o"
for c in range(self.size):
for r in range(self.size):
self.text[r][c].set("")
def closure(self, text): # マスをクリックしたときの処理
def _push_button():
if text.get() == "":
text.set(self.turn)
self.check()
self.turn = "o" if self.turn == "x" else "x"
return _push_button
def run(self):
self.reset_button = tkinter.Button(
self.app, text="Reset", command=self._reset_button)
self.reset_button.grid(row=0, column=0) # Resetボタンを作成
self.winner = tkinter.StringVar()
self.label = tkinter.Label(self.app, textvariable=self.winner)
self.label.grid(row=0, column=1) # 勝者ラベルを作成
for c in range(self.size):
for r in range(self.size):
self.text[r][c].set("")
self.v[r][c] = tkinter.Button(
self.app,
textvariable=self.text[r][c],
fg="black",
width=10,
height=5,
command=self.closure(self.text[r][c]),
)
self.v[r][c].grid(row=r+1, column=c) # マスを作成
self.app.mainloop()
def check(self): # マルバツを置いたときに勝利したかを判定
for i in range(self.size):
# yoko
if [self.text[i][x].get() for x in range(self.size)].count(self.turn) == self.size:
self.winner.set(f"{self.turn} is winner")
# tate
if [self.text[x][i].get() for x in range(self.size)].count(self.turn) == self.size:
self.winner.set(f"{self.turn} is winner")
# naname
if [self.text[x][x].get() for x in range(self.size)].count(self.turn) == self.size:
self.winner.set(f"{self.turn} is winner")
if [self.text[x][self.size - 1 - x].get() for x in range(self.size)].count(self.turn) == self.size:
self.winner.set(f"{self.turn} is winner")
if __name__ == "__main__":
a = marubatsu_game(3) # マスのサイズを指定します。
a.run()
実行結果
実行するとGUIが立ち上がります。
適当なマスをクリックすると〇が表示されます。
次に、別なマスをクリックすると×が表示されます。
これを繰り返して〇が勝つと勝利マークが出ます。
ゲームが終わったらResetを押せば最初からになります。
まとめ
マルバツゲームをPython標準モジュールで作成しました。
文字を大きくしたり他のエフェクトを追加していくとどんどんそれっぽくなると思いますよ。
コメント