sairate c5265add08 feat(第7讲 字母卡牌): 实现记忆游戏并添加开始界面
- 新增 jiyi.py 文件,实现字母翻牌记忆游戏功能
- 添加 youxijiemian.py 文件,创建游戏开始界面
- 使用 turtle 和 tkinter 模块分别实现游戏和界面
- 支持选择不同难度的游戏模式
2025-07-04 15:36:24 +08:00

86 lines
3.2 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)]
# 记录右键点击的两个格子
self.swap_selection = []
for i in range(self.size):
for j in range(self.size):
btn = tk.Button(root, text="", font=("Arial", 24), width=3, height=1)
btn.grid(row=i+1, column=j)
btn.config(command=lambda r=i, c=j: self.on_click(r, c))
btn.bind("<Button-3>", lambda e, r=i, c=j: self.on_right_click(r, c)) # 右键绑定
self.buttons[i][j] = btn
root.geometry(f"{3*65}x{3*63}") # 默认窗口大小
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"
def on_right_click(self, r, c):
# 只允许选择非空格子进行交换
if self.board[r][c] == "":
return
self.swap_selection.append((r, c))
if len(self.swap_selection) == 2:
(r1, c1), (r2, c2) = self.swap_selection
# 交换 board 内容
self.board[r1][c1], self.board[r2][c2] = self.board[r2][c2], self.board[r1][c1]
self.buttons[r1][c1].config(text=self.board[r1][c1])
self.buttons[r2][c2].config(text=self.board[r2][c2])
self.swap_selection.clear()
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.swap_selection.clear()
# 启动游戏
if __name__ == "__main__":
root = tk.Tk()
game = SneakyTicTacToe(root)
root.mainloop()