From ef9378bdd4716e8ecda61930c8f80633d439ff6d Mon Sep 17 00:00:00 2001 From: sairate Date: Wed, 2 Jul 2025 16:14:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=AC=AC7=E8=AE=B2=20=E5=AD=97=E6=AF=8D?= =?UTF-8?q?=E5=8D=A1=E7=89=8C):=20=E5=AE=9E=E7=8E=B0=E8=AE=B0=E5=BF=86?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=B9=B6=E6=B7=BB=E5=8A=A0=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 jiyi.py 文件,实现字母翻牌记忆游戏功能 - 添加 youxijiemian.py 文件,创建游戏开始界面 - 使用 turtle 和 tkinter 模块分别实现游戏和界面 - 支持选择不同难度的游戏模式 --- test.py | 4 ++ 第17讲中国地图我来拼(二)/课堂成果/README.md | 3 + 第2讲弹幕/课堂成果/README.md | 2 +- 第6讲太阳系/课堂成果/base.py | 35 +++++++++++ 第6讲太阳系/课堂成果/井字棋.py | 68 +++++++++++++++++++++ 第6讲太阳系/课堂成果/简单井字棋.py | 54 ++++++++++++++++ 6 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 test.py create mode 100644 第17讲中国地图我来拼(二)/课堂成果/README.md create mode 100644 第6讲太阳系/课堂成果/base.py create mode 100644 第6讲太阳系/课堂成果/井字棋.py create mode 100644 第6讲太阳系/课堂成果/简单井字棋.py diff --git a/test.py b/test.py new file mode 100644 index 0000000..59bd554 --- /dev/null +++ b/test.py @@ -0,0 +1,4 @@ +import turtle +turtle.listen() +turtle.onscreenclick(print) +turtle.done() \ No newline at end of file diff --git a/第17讲中国地图我来拼(二)/课堂成果/README.md b/第17讲中国地图我来拼(二)/课堂成果/README.md new file mode 100644 index 0000000..371d8f2 --- /dev/null +++ b/第17讲中国地图我来拼(二)/课堂成果/README.md @@ -0,0 +1,3 @@ +```bash +pip install pgzrun -i https://pypi.tuna.tsinghua.edu.cn/simple +``` \ No newline at end of file diff --git a/第2讲弹幕/课堂成果/README.md b/第2讲弹幕/课堂成果/README.md index 58054a0..a22c3df 100644 --- a/第2讲弹幕/课堂成果/README.md +++ b/第2讲弹幕/课堂成果/README.md @@ -1,3 +1,3 @@ ```bash -pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple +pip install pillow amzqr -i https://pypi.tuna.tsinghua.edu.cn/simple ``` \ No newline at end of file diff --git a/第6讲太阳系/课堂成果/base.py b/第6讲太阳系/课堂成果/base.py new file mode 100644 index 0000000..7b3c7a4 --- /dev/null +++ b/第6讲太阳系/课堂成果/base.py @@ -0,0 +1,35 @@ +import turtle + +qipan=[(-50,150),(50,150),(-150,50),(-150,-50)] + +t1=turtle.Turtle() +t1.hideturtle() +for i in qipan: + t1.penup() + t1.goto(i[0], i[1]) + t1.pendown() + if qipan.index(i)<=1: + t1.setheading(-90) + t1.forward(300) + else: + t1.setheading(0) + t1.forward(300) + +text1="O" +text2="X" +num = 0 + +def click(x,y): + global num + t1.penup() + t1.goto(x-20,y-40) + t1.pendown() + if num%2==0: + t1.write(text1, font=("Arial", 50, "normal")) + else: + t1.write(text2, font=("Arial", 50, "normal")) + num+=1 + +turtle.listen() +turtle.onscreenclick(click) +turtle.done() \ No newline at end of file diff --git a/第6讲太阳系/课堂成果/井字棋.py b/第6讲太阳系/课堂成果/井字棋.py new file mode 100644 index 0000000..b21d3c8 --- /dev/null +++ b/第6讲太阳系/课堂成果/井字棋.py @@ -0,0 +1,68 @@ +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*65}") # 宽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() diff --git a/第6讲太阳系/课堂成果/简单井字棋.py b/第6讲太阳系/课堂成果/简单井字棋.py new file mode 100644 index 0000000..a420a89 --- /dev/null +++ b/第6讲太阳系/课堂成果/简单井字棋.py @@ -0,0 +1,54 @@ +import turtle + +# 设置屏幕和画笔 +screen = turtle.Screen() +screen.title("简易井字棋") +pen = turtle.Turtle() +pen.hideturtle() +pen.speed(0) +pen.pensize(3) + +# 当前玩家(X 先手) +current_player = "X" +# 保存每格的内容(3x3) +board = [["" for _ in range(3)] for _ in range(3)] + +# 画井字棋的格子 +def draw_board(): + for i in range(0, 3): # 画2条竖线 + pen.penup() + pen.goto(-100 + i * 100, -150) + pen.pendown() + pen.goto(-100 + i * 100, 150) + for i in range(0, 3): # 画2条横线 + pen.penup() + pen.goto(-150, -100 + i * 100) + pen.pendown() + pen.goto(150, -100 + i * 100) + +# 在某个格子画 X 或 O +def draw_symbol(row, col, symbol): + x = -150 + col * 100 + 50 + y = 150 - row * 100 - 90 + pen.penup() + pen.goto(x, y) + pen.write(symbol, align="center", font=("Arial", 36, "bold")) + +# 处理点击事件 +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) + # 切换玩家 + current_player = "O" if current_player == "X" else "X" + +# 运行程序 +draw_board() +screen.onclick(click) +screen.mainloop()