python 代码设计贪吃蛇
代码: # -*- codeing = utf-8 -*- import tkinter as tk import random from tkinter import messagebox class Snake: def __init__(self, master): self.master = master self.master.title("Snake") # 创建画布 self.canvas = tk.Canvas(self.master, width=400, height=400, bg="white") self.canvas.pack() # 初始化游戏数据 self.snake = [(0, 0), (0, 1), (0, 2)] self.food = (5, 5) self.direction = "Right" self.score = 0 # 绑定键盘事件 self.master.bind("<Key>", self.on_key_press) # 开始游戏 self.start_game() def start_game(self): # 绘制贪吃蛇和食物 self.draw_snake() self.draw_food() # 更新游戏状态 self.update_game() def draw_snake(self): # 清空画布 self.canvas.delete("all") # 绘制贪吃蛇 for x, y in self.snake: x1 = x * 20 y1 = y * 20 x2 = x1 + 20 y2 = y1 + 20 self.canvas.create_rectangle(x1, y1, x2, y2, fill="green") def draw_food(self): # 绘制食物 x1 = self.food[0] * 20 y1 = self.food[1] * 20 x2 = x1 + 20 y2 = y1 + 20 self.canvas.create_oval(x1, y1, x2, y2, fill="red") def update_game(self): # 更新贪吃蛇位置 head_x, head_y = self.snake[-1] if self.direction == "Left": new_head = (head_x - 1, head_y) elif self.direction == "Right": new_head = (head_x + 1, head_y) elif self.direction == "Up": new_head = (head_x, head_y - 1) else: new_head = (head_x, head_y + 1) self.snake.append(new_head) del self.snake[0] # 检查游戏是否结束 if new_head[0] < 0 or new_head[0] >= 20 or new_head[1] < 0 or new_head[1] >= 20 or new_head in self.snake[:-1]: tk.messagebox.showinfo("Game Over", f"Score: {self.score}") return # 检查贪吃蛇是否吃掉食物 if new_head == self.food: while True: food_x = random.randint(0, 19) food_y = random.randint(0, 19) if (food_x, food_y) not in self.snake: break self.food = (food_x, food_y) tail_x, tail_y = self.snake[0] if self.direction == "Left": new_tail = (tail_x + 1, tail_y) elif self.direction == "Right": new_tail = (tail_x - 1, tail_y) elif self.direction == "Up": new_tail = (tail_x, tail_y + 1) else: new_tail = (tail_x, tail_y - 1) self.snake.insert(0, new_tail) self.score += 1 # 绘制贪吃蛇和食物 self.draw_snake() self.draw_food() # 定时更新游戏状态 self.master.after(200, self.update_game) def on_key_press(self, event): if event.keysym in ["Left", "Right", "Up", "Down"]: self.direction = event.keysym if __name__ == "__main__": root = tk.Tk() snake = Snake(root) root.mainloop()
结果图:
原文地址:https://blog.csdn.net/2302_77382298/article/details/140361693
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!