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

77 lines
2.0 KiB
Python

import turtle
from tkinter import messagebox
# 设置屏幕和画笔
screen = turtle.Screen()
screen.title("简易井字棋")
pen = turtle.Turtle()
pen.hideturtle()
pen.speed(0)
pen.pensize(3)
current_player = "X"
board = [["" for _ in range(3)] for _ in range(3)]
def draw_board():
for i in range(1, 3): # 竖线
pen.penup()
pen.goto(-150 + i * 100, -150)
pen.pendown()
pen.goto(-150 + i * 100, 150)
for i in range(1, 3): # 横线
pen.penup()
pen.goto(-150, -150 + i * 100)
pen.pendown()
pen.goto(150, -150 + i * 100)
def draw_symbol(row, col, symbol):
x = -100 + col * 100
y = 70 - row * 100
pen.penup()
pen.goto(x, y)
pen.write(symbol, align="center", font=("Arial", 36, "bold"))
def check_win(player):
# 检查行
for r in range(3):
if all(board[r][c] == player for c in range(3)):
return True
# 检查列
for c in range(3):
if all(board[r][c] == player for r in range(3)):
return True
# 检查对角线
if all(board[i][i] == player for i in range(3)):
return True
if all(board[i][2 - i] == player for i in range(3)):
return True
return False
def check_draw():
return all(board[r][c] != "" for r in range(3) for c in range(3))
def click(x, y):
global current_player
if not (-150 < x < 150 and -150 < y < 150):
return
col = int((x + 150) // 100)
row = int((150 - y) // 100)
if board[row][col] == "":
board[row][col] = current_player
draw_symbol(row, col, current_player)
if check_win(current_player):
messagebox.showinfo("游戏结束", f"玩家 {current_player} 获胜!")
screen.bye() # 关闭窗口
return
elif check_draw():
messagebox.showinfo("游戏结束", "平局!")
screen.bye()
return
current_player = "O" if current_player == "X" else "X"
draw_board()
screen.onclick(click)
screen.mainloop()