- 新增 jiyi.py 文件,实现字母翻牌记忆游戏功能 - 添加 youxijiemian.py 文件,创建游戏开始界面 - 使用 turtle 和 tkinter 模块分别实现游戏和界面 - 支持选择不同难度的游戏模式
69 lines
2.6 KiB
Python
69 lines
2.6 KiB
Python
import tkinter as tk
|
||
from tkinter import messagebox
|
||
|
||
class SneakyTicTacToe:
|
||
def __init__(self, root):
|
||
self.root = root
|
||
|
||
self.size = 7 # 实际棋盘大小
|
||
self.board = [["" for _ in range(self.size)] for _ in range(self.size)]
|
||
self.current_player = "X"
|
||
|
||
self.buttons = [[None for _ in range(self.size)] for _ in range(self.size)]
|
||
|
||
for i in range(self.size):
|
||
for j in range(self.size):
|
||
btn = tk.Button(root, text="", font=("Arial", 24), width=3, height=1,
|
||
command=lambda r=i, c=j: self.on_click(r, c))
|
||
btn.grid(row=i+1, column=j)
|
||
self.buttons[i][j] = btn
|
||
|
||
# 默认只设置窗口足够显示中心3x3
|
||
root.geometry(f"{3*65}x{3*63}") # 宽x高像素,+40 留状态栏
|
||
|
||
def on_click(self, r, c):
|
||
if self.board[r][c] != "":
|
||
return
|
||
self.board[r][c] = self.current_player
|
||
self.buttons[r][c].config(text=self.current_player)
|
||
|
||
if self.check_winner(self.current_player):
|
||
messagebox.showinfo("🎉 游戏结束", f"玩家 {self.current_player} 获胜!")
|
||
self.reset()
|
||
elif self.is_draw():
|
||
messagebox.showinfo("😐 游戏结束", "平局")
|
||
self.reset()
|
||
else:
|
||
self.current_player = "O" if self.current_player == "X" else "X"
|
||
self.status.config(text=f"当前轮到: {self.current_player}")
|
||
|
||
def check_winner(self, player):
|
||
for i in range(self.size):
|
||
for j in range(self.size):
|
||
if j + 2 < self.size and all(self.board[i][j+k] == player for k in range(3)):
|
||
return True
|
||
if i + 2 < self.size and all(self.board[i+k][j] == player for k in range(3)):
|
||
return True
|
||
if i + 2 < self.size and j + 2 < self.size and all(self.board[i+k][j+k] == player for k in range(3)):
|
||
return True
|
||
if i + 2 < self.size and j - 2 >= 0 and all(self.board[i+k][j-k] == player for k in range(3)):
|
||
return True
|
||
return False
|
||
|
||
def is_draw(self):
|
||
return all(self.board[i][j] != "" for i in range(self.size) for j in range(self.size))
|
||
|
||
def reset(self):
|
||
for i in range(self.size):
|
||
for j in range(self.size):
|
||
self.board[i][j] = ""
|
||
self.buttons[i][j].config(text="")
|
||
self.current_player = "X"
|
||
self.status.config(text="当前轮到: X")
|
||
|
||
# 启动游戏
|
||
if __name__ == "__main__":
|
||
root = tk.Tk()
|
||
game = SneakyTicTacToe(root)
|
||
root.mainloop()
|