- 新增 jiyi.py 文件,实现字母翻牌记忆游戏功能 - 添加 youxijiemian.py 文件,创建游戏开始界面 - 使用 turtle 和 tkinter 模块分别实现游戏和界面 - 支持选择不同难度的游戏模式
77 lines
2.0 KiB
Python
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()
|