上了一天的班,下课后在办公室闲来无事就调节ai给我写一个带有界面的贪吃蛇游戏,下图还第一版:
然后不断的给提出需求,然后调节界面排版,还有测试程序后来修复程序中的BUG,根据需求迭代升级了十几次后,得到了以下最终版。请看演示图:
大家需要下载游玩的话,成品在文章底部即可下载(把杀毒软件关闭,会误报!)然后大家也可以拿到源码根据自己的需求来进行改进!
成品源码:
import tkinter as tk import random from tkinter import messagebox class SnakeGame: def __init__(self, root): self.root = root self.root.title("贪吃蛇游戏") self.root.resizable(False, False) # 游戏画布 self.canvas = tk.Canvas(root, width=400, height=400, bg="black") self.canvas.pack() # 分数和生命值 self.score = 0 self.lives = 3 self.snake = [(200, 200), (190, 200), (180, 200)] self.snake_direction = "Right" self.food = None # 初始化不创建食物 self.game_over = False self.game_paused = False self.speed = 100 self.game_active = False # 游戏状态标记 # 创建分数和生命值框 self.info_frame = tk.Frame(root, bg="white", bd=2, relief="groove") self.info_frame.pack(pady=10) self.score_label = tk.Label(self.info_frame, text="分数: 0", font=("Arial", 14), fg="black", bg="white") self.score_label.pack() self.lives_label = tk.Label(self.info_frame, text="生命值: 3", font=("Arial", 14), fg="black", bg="white") self.lives_label.pack() self.game_state_label = tk.Label(self.info_frame, text="按开始按钮开始游戏", font=("Arial", 14), fg="black", bg="white") self.game_state_label.pack() # 快捷键说明标签 self.shortcut_label1 = tk.Label(root, text="快捷键 + 代表加速", font=("Arial", 12), fg="black", bg="white") self.shortcut_label1.pack() self.shortcut_label2 = tk.Label(root, text="快捷键 - 代表减速", font=("Arial", 12), fg="black", bg="white") self.shortcut_label2.pack() # 按钮框架 self.button_frame = tk.Frame(root) self.button_frame.pack(pady=10) self.start_button = tk.Button(self.button_frame, text="开始游戏", command=self.start_game) self.start_button.grid(row=0, column=0, padx=10) self.pause_button = tk.Button(self.button_frame, text="暂停游戏", command=self.pause_game, state=tk.DISABLED) self.pause_button.grid(row=0, column=1, padx=10) self.speed_increase_button = tk.Button(self.button_frame, text="加速", command=self.increase_speed, state=tk.DISABLED) self.speed_increase_button.grid(row=0, column=2, padx=10) self.speed_decrease_button = tk.Button(self.button_frame, text="减速", command=self.decrease_speed, state=tk.DISABLED) self.speed_decrease_button.grid(row=0, column=3, padx=10) self.save_button = tk.Button(self.button_frame, text="存档", command=self.save_game, state=tk.DISABLED) self.save_button.grid(row=0, column=4, padx=10) self.load_button = tk.Button(self.button_frame, text="加载游戏", command=self.load_game) self.load_button.grid(row=0, column=5, padx=10) self.reset_button = tk.Button(self.button_frame, text="重置游戏", command=self.reset_game) self.reset_button.grid(row=0, column=6, padx=10) self.bind_keys() # 初始化显示“贪吃蛇”三个字 self.snake_text = self.canvas.create_text(200, 200, text="经典贪吃蛇", fill="green", font=("Arial", 40, "bold")) def create_food(self): x = random.randint(0, 39) * 10 y = random.randint(0, 39) * 10 while (x, y) in self.snake: x = random.randint(0, 39) * 10 y = random.randint(0, 39) * 10 self.food = (x, y) # 仅返回位置,不绘制 self.canvas.create_rectangle(x, y, x + 10, y + 10, fill="red", tag="food") def update_game(self): if not self.game_over and not self.game_paused: new_head = self.move_snake() if self.check_collision(new_head): # 减少生命值 self.lives -= 1 self.lives_label.config(text=f"生命值: {self.lives}") if self.lives <= 0: self.game_over = True self.display_game_over() # 在画布上显示游戏结束文本 self.disable_game_buttons() # 禁用按钮 return self.reset_snake_and_food() else: self.snake.insert(0, new_head) if new_head == self.food: self.score += 1 self.score_label.config(text=f"分数: {self.score}") self.canvas.delete("food") self.create_food() # 创建新的食物 else: self.snake.pop() self.update_canvas() self.root.after(self.speed, self.update_game) def display_game_over(self): self.canvas.create_text(200, 200, text="游戏结束", fill="green", font=("Arial", 40, "bold")) def reset_snake_and_food(self): self.snake = [(200, 200), (190, 200), (180, 200)] self.snake_direction = "Right" self.create_food() # 在减去生命值时创建新的食物 def move_snake(self): head_x, head_y = self.snake[0] if self.snake_direction == "Right": return head_x + 10, head_y elif self.snake_direction == "Left": return head_x - 10, head_y elif self.snake_direction == "Up": return head_x, head_y - 10 elif self.snake_direction == "Down": return head_x, head_y + 10 def check_collision(self, new_head): x, y = new_head if x < 0 or x >= 400 or y < 0 or y >= 400: return True if new_head in self.snake[1:]: return True return False def update_canvas(self): self.canvas.delete("all") if self.food: # 只有在存在食物时才绘制 self.canvas.create_rectangle(self.food[0], self.food[1], self.food[0] + 10, self.food[1] + 10, fill="red", tag="food") for segment in self.snake: self.canvas.create_rectangle(segment[0], segment[1], segment[0] + 10, segment[1] + 10, fill="green") def bind_keys(self): self.root.bind("<Right>", lambda event: self.change_direction("Right")) self.root.bind("<Left>", lambda event: self.change_direction("Left")) self.root.bind("<Up>", lambda event: self.change_direction("Up")) self.root.bind("<Down>", lambda event: self.change_direction("Down")) # 绑定加速和减速快捷键 self.root.bind("+", lambda event: self.increase_speed() if not self.game_paused else None) self.root.bind("-", lambda event: self.decrease_speed() if not self.game_paused else None) def change_direction(self, direction): if (direction == "Right" and self.snake_direction != "Left" or direction == "Left" and self.snake_direction != "Right" or direction == "Up" and self.snake_direction != "Down" or direction == "Down" and self.snake_direction != "Up"): self.snake_direction = direction def start_game(self): if not self.game_over: self.game_state_label.config(text="游戏进行中", fg="black", bg="white") self.start_button.config(state=tk.DISABLED) self.pause_button.config(state=tk.NORMAL) self.speed_increase_button.config(state=tk.NORMAL) self.speed_decrease_button.config(state=tk.NORMAL) self.save_button.config(state=tk.NORMAL) self.game_active = True # 清除“贪吃蛇”三个字 self.canvas.delete(self.snake_text) # 将标识符改为搜索在canvas上 self.create_food() # 游戏开始时创建初始食物 self.update_game() def pause_game(self): if self.game_active: self.game_paused = not self.game_paused if self.game_paused: self.game_state_label.config(text="游戏暂停", fg="yellow", bg="white") self.pause_button.config(text="继续游戏") else: self.game_state_label.config(text="游戏进行中", fg="black", bg="white") self.pause_button.config(text="暂停游戏") self.update_game() # 恢复游戏时重新启动游戏循环 def increase_speed(self): if self.speed > 50: self.speed -= 10 self.game_state_label.config(text=f"速度增加到: {400 - self.speed}ms", fg="black", bg="white") def decrease_speed(self): if self.speed < 200: self.speed += 10 self.game_state_label.config(text=f"速度减少到: {400 - self.speed}ms", fg="black", bg="white") def save_game(self): with open("savegame.txt", "w") as file: file.write(f"{self.score}\n") file.write(f"{self.lives}\n") file.write(f"{self.snake_direction}\n") file.write(f"{self.speed}\n") file.write(str(self.snake) + "\n") # 使用str()确保列表可以正确保存 file.write(str(self.food) + "\n") # 使用str()确保元组可以正确保存 self.game_state_label.config(text="游戏已存档", fg="black", bg="white") def load_game(self): try: with open("savegame.txt", "r") as file: self.score = int(file.readline().strip()) self.lives = int(file.readline().strip()) self.snake_direction = file.readline().strip() self.speed = int(file.readline().strip()) self.snake = eval(file.readline().strip()) self.food = eval(file.readline().strip()) self.score_label.config(text=f"分数: {self.score}") self.lives_label.config(text=f"生命值: {self.lives}") self.game_state_label.config(text="游戏已加载", fg="black", bg="white") self.update_canvas() self.start_button.config(state=tk.DISABLED) self.pause_button.config(state=tk.NORMAL) self.speed_increase_button.config(state=tk.NORMAL) self.speed_decrease_button.config(state=tk.NORMAL) self.save_button.config(state=tk.NORMAL) self.game_active = True self.update_game() except FileNotFoundError: self.game_state_label.config(text="没有找到存档", fg="red", bg="white") def reset_game(self): self.snake = [(200, 200), (190, 200), (180, 200)] self.snake_direction = "Right" self.food = None # 重置食物为None self.score = 0 self.lives = 3 self.game_over = False self.game_paused = False self.speed = 100 self.game_state_label.config(text="游戏已重置", fg="black", bg="white") self.update_canvas() self.start_button.config(state=tk.NORMAL) self.pause_button.config(state=tk.DISABLED) self.speed_increase_button.config(state=tk.DISABLED) self.speed_decrease_button.config(state=tk.DISABLED) self.save_button.config(state=tk.DISABLED) # 重新显示“贪吃蛇”三个字 self.snake_text = self.canvas.create_text(200, 200, text="贪吃蛇", fill="green", font=("Arial", 40, "bold")) def disable_game_buttons(self): self.pause_button.config(state=tk.DISABLED) self.speed_increase_button.config(state=tk.DISABLED) self.speed_decrease_button.config(state=tk.DISABLED) self.save_button.config(state=tk.DISABLED) self.start_button.config(state=tk.DISABLED) if __name__ == "__main__": root = tk.Tk() game = SnakeGame(root) root.mainloop()
注释学习版:
import tkinter as tk # 导入tkinter库,用于创建GUI界面 import random # 导入random库,用于生成随机数 from tkinter import messagebox # 导入messagebox模块,用于显示消息对话框 class SnakeGame: def __init__(self, root): # 初始化游戏类,root为Tkinter的主窗口 self.root = root # 保存主窗口对象 self.root.title("贪吃蛇游戏") # 设置窗口标题为"贪吃蛇游戏" self.root.resizable(False, False) # 禁止窗口大小调整 # 游戏画布 self.canvas = tk.Canvas(root, width=400, height=400, bg="black") # 创建一个400x400像素的黑色画布 self.canvas.pack() # 将画布添加到窗口中 # 分数和生命值 self.score = 0 # 初始化分数为0 self.lives = 3 # 初始化生命值为3 self.snake = [(200, 200), (190, 200), (180, 200)] # 初始化蛇的位置 self.snake_direction = "Right" # 初始化蛇的方向为向右 self.food = None # 初始化食物为None self.game_over = False # 初始化游戏结束状态为False self.game_paused = False # 初始化游戏暂停状态为False self.speed = 100 # 初始化蛇的速度 self.game_active = False # 初始化游戏活动状态为False # 创建分数和生命值框 self.info_frame = tk.Frame(root, bg="white", bd=2, relief="groove") # 创建一个白色背景的框架,用于显示分数和生命值 self.info_frame.pack(pady=10) # 将框架添加到窗口中,并设置上下间距为10像素 self.score_label = tk.Label(self.info_frame, text="分数: 0", font=("Arial", 14), fg="black", bg="white") self.score_label.pack() # 创建分数标签,并将其添加到信息框架中 self.lives_label = tk.Label(self.info_frame, text="生命值: 3", font=("Arial", 14), fg="black", bg="white") self.lives_label.pack() # 创建生命值标签,并将其添加到信息框架中 self.game_state_label = tk.Label(self.info_frame, text="按开始按钮开始游戏", font=("Arial", 14), fg="black", bg="white") self.game_state_label.pack() # 创建游戏状态标签,并将其添加到信息框架中 # 快捷键说明标签 self.shortcut_label1 = tk.Label(root, text="快捷键 + 代表加速", font=("Arial", 12), fg="black", bg="white") self.shortcut_label1.pack() # 创建快捷键说明标签1,并将其添加到窗口中 self.shortcut_label2 = tk.Label(root, text="快捷键 - 代表减速", font=("Arial", 12), fg="black", bg="white") self.shortcut_label2.pack() # 创建快捷键说明标签2,并将其添加到窗口中 # 按钮框架 self.button_frame = tk.Frame(root) self.button_frame.pack(pady=10) # 创建按钮框架,并将其添加到窗口中 self.start_button = tk.Button(self.button_frame, text="开始游戏", command=self.start_game) self.start_button.grid(row=0, column=0, padx=10) # 创建开始游戏按钮,并将其添加到按钮框架中 self.pause_button = tk.Button(self.button_frame, text="暂停游戏", command=self.pause_game, state=tk.DISABLED) self.pause_button.grid(row=0, column=1, padx=10) # 创建暂停游戏按钮,并将其添加到按钮框架中,初始状态为不可用 self.speed_increase_button = tk.Button(self.button_frame, text="加速", command=self.increase_speed, state=tk.DISABLED) self.speed_increase_button.grid(row=0, column=2, padx=10) # 创建加速按钮,并将其添加到按钮框架中,初始状态为不可用 self.speed_decrease_button = tk.Button(self.button_frame, text="减速", command=self.decrease_speed, state=tk.DISABLED) self.speed_decrease_button.grid(row=0, column=3, padx=10) # 创建减速按钮,并将其添加到按钮框架中,初始状态为不可用 self.save_button = tk.Button(self.button_frame, text="存档", command=self.save_game, state=tk.DISABLED) self.save_button.grid(row=0, column=4, padx=10) # 创建存档按钮,并将其添加到按钮框架中,初始状态为不可用 self.load_button = tk.Button(self.button_frame, text="加载游戏", command=self.load_game) self.load_button.grid(row=0, column=5, padx=10) # 创建加载游戏按钮,并将其添加到按钮框架中 self.reset_button = tk.Button(self.button_frame, text="重置游戏", command=self.reset_game) self.reset_button.grid(row=0, column=6, padx=10) # 创建重置游戏按钮,并将其添加到按钮框架中 self.bind_keys() # 绑定键盘快捷键 # 初始化显示“经典贪吃蛇”三个字 self.snake_text = self.canvas.create_text(200, 200, text="经典贪吃蛇", fill="green", font=("Arial", 40, "bold")) # 在画布的中间位置创建一个文本“经典贪吃蛇”,颜色为绿色,字体大小为40,粗体 def create_food(self): x = random.randint(0, 39) * 10 # 随机生成食物的x坐标 y = random.randint(0, 39) * 10 # 随机生成食物的y坐标 while (x, y) in self.snake: # 确保食物不在蛇的身体上 x = random.randint(0, 39) * 10 # 重新生成食物的x坐标 y = random.randint(0, 39) * 10 # 重新生成食物的y坐标 self.food = (x, y) # 保存食物的位置 self.canvas.create_rectangle(x, y, x + 10, y + 10, fill="red", tag="food") # 在画布上绘制食物,颜色为红色 def update_game(self): if not self.game_over and not self.game_paused: # 如果游戏未结束且未暂停 new_head = self.move_snake() # 移动蛇并获取新头部的位置 if self.check_collision(new_head): # 检查新头部是否发生碰撞 # 减少生命值 self.lives -= 1 # 生命值减1 self.lives_label.config(text=f"生命值: {self.lives}") # 更新生命值标签 if self.lives <= 0: # 如果生命值为0或以下 self.game_over = True # 设置游戏结束状态为True self.display_game_over() # 在画布上显示游戏结束信息 self.disable_game_buttons() # 禁用游戏按钮 return self.reset_snake_and_food() # 蛇重新开始,食物重新摆放 else: self.snake.insert(0, new_head) # 将新头部插入蛇的身体 if new_head == self.food: # 如果新头部吃到食物 self.score += 1 # 分数加1 self.score_label.config(text=f"分数: {self.score}") # 更新分数标签 self.canvas.delete("food") # 删除画布上的食物 self.create_food() # 创建新的食物 else: self.snake.pop() # 如果没有吃到食物,移除蛇的身体最后的一个部分 self.update_canvas() # 更新画布上的显示 self.root.after(self.speed, self.update_game) # 在指定速度后再次调用update_game方法 def display_game_over(self): self.canvas.create_text(200, 200, text="游戏结束", fill="green", font=("Arial", 40, "bold")) # 在画布的中间位置创建一个文本“游戏结束”,颜色为绿色,字体大小为40,粗体 def reset_snake_and_food(self): self.snake = [(200, 200), (190, 200), (180, 200)] # 重置蛇的位置 self.snake_direction = "Right" # 重置蛇的方向为向右 self.create_food() # 创建新的食物 def move_snake(self): head_x, head_y = self.snake[0] # 获取蛇头部的位置 if self.snake_direction == "Right": return head_x + 10, head_y # 如果方向为右,返回向右移动10像素的新头部位置 elif self.snake_direction == "Left": return head_x - 10, head_y # 如果方向为左,返回向左移动10像素的新头部位置 elif self.snake_direction == "Up": return head_x, head_y - 10 # 如果方向为上,返回向上移动10像素的新头部位置 elif self.snake_direction == "Down": return head_x, head_y + 10 # 如果方向为下,返回向下移动10像素的新头部位置 def check_collision(self, new_head): x, y = new_head # 获取新头部的位置 if x < 0 or x >= 400 or y < 0 or y >= 400: return True # 如果新头部超出画布边界,返回True if new_head in self.snake[1:]: return True # 如果新头部与蛇身体的其他部分碰撞,返回True return False def update_canvas(self): self.canvas.delete("all") # 清除画布上所有内容 if self.food: # 如果存在食物 self.canvas.create_rectangle(self.food[0], self.food[1], self.food[0] + 10, self.food[1] + 10, fill="red", tag="food") # 在画布上绘制食物,颜色为红色 for segment in self.snake: self.canvas.create_rectangle(segment[0], segment[1], segment[0] + 10, segment[1] + 10, fill="green") # 绘制蛇的每一部分,颜色为绿色 def bind_keys(self): self.root.bind("<Right>", lambda event: self.change_direction("Right")) # 绑定向右箭头键 self.root.bind("<Left>", lambda event: self.change_direction("Left")) # 绑定向左箭头键 self.root.bind("<Up>", lambda event: self.change_direction("Up")) # 绑定向上箭头键 self.root.bind("<Down>", lambda event: self.change_direction("Down")) # 绑定向下箭头键 # 绑定加速和减速快捷键 self.root.bind("+", lambda event: self.increase_speed() if not self.game_paused else None) self.root.bind("-", lambda event: self.decrease_speed() if not self.game_paused else None) def change_direction(self, direction): if (direction == "Right" and self.snake_direction != "Left" or direction == "Left" and self.snake_direction != "Right" or direction == "Up" and self.snake_direction != "Down" or direction == "Down" and self.snake_direction != "Up"): self.snake_direction = direction # 根据输入的方向改变蛇的方向 def start_game(self): if not self.game_over: # 如果游戏未结束 self.game_state_label.config(text="游戏进行中", fg="black", bg="white") # 更新游戏状态标签为“游戏进行中” self.start_button.config(state=tk.DISABLED) # 禁用开始游戏按钮 self.pause_button.config(state=tk.NORMAL) # 启用暂停游戏按钮 self.speed_increase_button.config(state=tk.NORMAL) # 启用加速按钮 self.speed_decrease_button.config(state=tk.NORMAL) # 启用减速按钮 self.save_button.config(state=tk.NORMAL) # 启用存档按钮 self.game_active = True # 设置游戏活动状态为True # 清除“经典贪吃蛇”三个字 self.canvas.delete(self.snake_text) # 删除画布上的“经典贪吃蛇”文本 self.create_food() # 游戏开始时创建初始食物 self.update_game() # 开始游戏循环 def pause_game(self): if self.game_active: # 如果游戏正在活动 self.game_paused = not self.game_paused # 切换游戏暂停状态 if self.game_paused: self.game_state_label.config(text="游戏暂停", fg="yellow", bg="white") # 更新游戏状态标签为“游戏暂停”,颜色为黄色 self.pause_button.config(text="继续游戏") # 将暂停按钮文本改为“继续游戏” else: self.game_state_label.config(text="游戏进行中", fg="black", bg="white") # 更新游戏状态标签为“游戏进行中”,颜色为黑色 self.pause_button.config(text="暂停游戏") # 将暂停按钮文本改为“暂停游戏” self.update_game() # 恢复游戏时重新启动游戏循环 def increase_speed(self): if self.speed > 50: # 如果速度大于50 self.speed -= 10 # 减少速度 self.game_state_label.config(text=f"速度增加到: {400 - self.speed}ms", fg="black", bg="white") # 更新游戏状态标签显示新的速度 def decrease_speed(self): if self.speed < 200: # 如果速度小于200 self.speed += 10 # 增加速度 self.game_state_label.config(text=f"速度减少到: {400 - self.speed}ms", fg="black", bg="white") # 更新游戏状态标签显示新的速度 def save_game(self): with open("savegame.txt", "w") as file: # 打开或创建存档文件 file.write(f"{self.score}\n") # 写入分数 file.write(f"{self.lives}\n") # 写入生命值 file.write(f"{self.snake_direction}\n") # 写入蛇的方向 file.write(f"{self.speed}\n") # 写入速度 file.write(str(self.snake) + "\n") # 使用str()确保列表可以正确保存 file.write(str(self.food) + "\n") # 使用str()确保元组可以正确保存 self.game_state_label.config(text="游戏已存档", fg="black", bg="white") # 更新游戏状态标签显示“游戏已存档” def load_game(self): try: with open("savegame.txt", "r") as file: # 打开存档文件 self.score = int(file.readline().strip()) # 读取并设置分数 self.lives = int(file.readline().strip()) # 读取并设置生命值 self.snake_direction = file.readline().strip() # 读取并设置蛇的方向 self.speed = int(file.readline().strip()) # 读取并设置速度 self.snake = eval(file.readline().strip()) # 读取并设置蛇的位置 self.food = eval(file.readline().strip()) # 读取并设置食物的位置 self.score_label.config(text=f"分数: {self.score}") # 更新分数标签 self.lives_label.config(text=f"生命值: {self.lives}") # 更新生命值标签 self.game_state_label.config(text="游戏已加载", fg="black", bg="white") # 更新游戏状态标签显示“游戏已加载” self.update_canvas() # 更新画布上的显示 self.start_button.config(state=tk.DISABLED) # 禁用开始游戏按钮 self.pause_button.config(state=tk.NORMAL) # 启用暂停游戏按钮 self.speed_increase_button.config(state=tk.NORMAL) # 启用加速按钮 self.speed_decrease_button.config(state=tk.NORMAL) # 启用减速按钮 self.save_button.config(state=tk.NORMAL) # 启用存档按钮 self.game_active = True # 设置游戏活动状态为True self.update_game() # 开始游戏循环 except FileNotFoundError: self.game_state_label.config(text="没有找到存档", fg="red", bg="white") # 如果没有找到存档文件,更新游戏状态标签显示“没有找到存档” def reset_game(self): self.snake = [(200, 200), (190, 200), (180, 200)] # 重置蛇的位置 self.snake_direction = "Right" # 重置蛇的方向为向右 self.food = None # 重置食物为None self.score = 0 # 重置分数为0 self.lives = 3 # 重置生命值为3 self.game_over = False # 重置游戏结束状态为False self.game_paused = False # 重置游戏暂停状态为False self.speed = 100 # 重置速度为100 self.game_state_label.config(text="游戏已重置", fg="black", bg="white") # 更新游戏状态标签显示“游戏已重置” self.update_canvas() # 更新画布上的显示 self.start_button.config(state=tk.NORMAL) # 启用开始游戏按钮 self.pause_button.config(state=tk.DISABLED) # 禁用暂停游戏按钮 self.speed_increase_button.config(state=tk.DISABLED) # 禁用加速按钮 self.speed_decrease_button.config(state=tk.DISABLED) # 禁用减速按钮 self.save_button.config(state=tk.DISABLED) # 禁用存档按钮 self.game_active = False # 设置游戏活动状态为False # 重新显示“贪吃蛇”三个字 self.snake_text = self.canvas.create_text(200, 200, text="贪吃蛇", fill="green", font=("Arial", 40, "bold")) # 在画布的中间位置重新创建一个文本“贪吃蛇”,颜色为绿色,字体大小为40,粗体 def disable_game_buttons(self): self.pause_button.config(state=tk.DISABLED) # 禁用暂停游戏按钮 self.speed_increase_button.config(state=tk.DISABLED) # 禁用加速按钮 self.speed_decrease_button.config(state=tk.DISABLED) # 禁用减速按钮 self.save_button.config(state=tk.DISABLED) # 禁用存档按钮 self.start_button.config(state=tk.DISABLED) # 禁用开始游戏按钮 if __name__ == "__main__": root = tk.Tk() # 创建Tkinter主窗口 game = SnakeGame(root) # 创建SnakeGame对象 root.mainloop() # 进入Tkinter主循环,等待事件
转载请注明:宗宗酱-(电击小子)++>用Python加ai调教写了一个经典贪吃蛇游戏