用Python加ai调教写了一个经典贪吃蛇游戏

2025-03-08 224 0

上了一天的班,下课后在办公室闲来无事就调节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主循环,等待事件

 


相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

相关文章

批量调整图片Light Image Resizer软件工具
父亲今天已经出院了
FreeControl手机控制工具推荐
Tuboshu桌面应用转换工具
U盘引导盘制作Rufus
Scratch图形化编程少儿编程工具软件

发布评论

用Python加ai调教写了一个经典贪吃蛇游戏