Tic Tac Toe(又称井字棋、圈圈叉叉、三子棋)是一种两人轮流下棋的游戏,通常在3x3的方格中进行。目标是先在水平、垂直或对角线上连续放置三个自己的标记(通常是"X"或"O"),即可获胜。
规则很简单:
1. 游戏开始时,棋盘是一个3x3的方格,每个格子为空。
2. 两名玩家轮流下棋,一个是"X",另一个是"O"。
3. 玩家轮流选择一个空格,将自己的标记放入该位置。
4. 游戏继续进行,直到有一名玩家在水平、垂直或对角线上拥有连续的三个标记,即可宣布获胜。
5. 如果棋盘被填满且没有玩家获胜,游戏宣布为平局。
Tic Tac Toe是一种简单而经典的游戏,适合所有年龄段的人。由于规则简单,但又充满策略,因此常被用于教学和娱乐。
代码:
import tkinter as tk
from tkinter import messagebox
class TicTacToe:
def __init__(self):
self.root = tk.Tk()
self.root.title("Tic Tac Toe")
self.board = [[' ' for _ in range(3)] for _ in range(3)]
self.current_player = 'X'
self.buttons = [[None] * 3 for _ in range(3)]
for i in range(3):
for j in range(3):
self.buttons[i][j] = tk.Button(self.root, text='', font=('normal', 20), width=5, height=2,
command=lambda row=i, col=j: self.make_move(row, col))
self.buttons[i][j].grid(row=i, column=j)
def print_board(self):
for i in range(3):
for j in range(3):
self.buttons[i][j]['text'] = self.board[i][j]
def check_winner(self):
for i in range(3):
if self.board[i][0] == self.board[i][1] == self.board[i][2] != ' ':
return self.board[i][0]
if self.board[0][i] == self.board[1][i] == self.board[2][i] != ' ':
return self.board[0][i]
if self.board[0][0] == self.board[1][1] == self.board[2][2] != ' ':
return self.board[0][0]
if self.board[0][2] == self.board[1][1] == self.board[2][0] != ' ':
return self.board[0][2]
return None
def is_board_full(self):
return all(cell != ' ' for row in self.board for cell in row)
def make_move(self, row, col):
if self.board[row][col] == ' ':
self.board[row][col] = self.current_player
self.print_board()
winner = self.check_winner()
if winner:
messagebox.showinfo("Game Over", f"Player {winner} wins!")
self.reset_game()
elif self.is_board_full():
messagebox.showinfo("Game Over", "It's a tie!")
self.reset_game()
else:
self.current_player = 'O' if self.current_player == 'X' else 'X'
def reset_game(self):
for i in range(3):
for j in range(3):
self.board[i][j] = ' '
self.buttons[i][j]['text'] = ''
self.current_player = 'X'
def run(self):
self.root.mainloop()
if __name__ == "__main__":
game = TicTacToe()
game.run()
关键解释:
1. 这行代码是为Tic Tac Toe游戏初始化一个个按钮,设置按钮的点击事件,当按钮被点击时,调用 self.make_move(row, col)
方法。
self.buttons[i][j] = tk.Button(self.root, text='', font=('normal', 20), width=5, height=2,
command=lambda row=i, col=j: self.make_move(row, col))
2. print_board
方法用于更新图形界面上的按钮,显示当前棋盘的状态。
3. check_winner
方法检查是否有玩家赢得了游戏,返回赢家的标记('X'或'O'),如果没有赢家则返回 None。
4. is_board_full
方法检查棋盘是否已满(即所有格子都已被填满)。
5. make_move
方法处理每次点击按钮的事件,如果当前点击的位置为空格,则将当前玩家的标记('X'或'O')放置在该位置,并检查游戏是否结束。
6. reset_game
方法重置游戏状态,清空棋盘,准备新的游戏。
7. run
方法启动 Tkinter 的事件循环,使图形界面可交互。
运行:
Tic Tac Toe