Python贪吃蛇游戏:实现水果矩形固定位置且仅程序启动时更换位置的解决方案
解决贪吃蛇游戏中水果不停移动的问题
嘿,我来帮你搞定这个小问题~
问题根源
你现在的代码里,每次主循环执行时都会调用fruit().draw_fruit()——这相当于每帧都新建一个fruit类的实例,而每个新实例在初始化时都会重新随机生成x、y坐标,所以水果看起来就一直在飞快地变换位置,根本停不下来。
修改方案
只需要调整两个地方,就能让水果保持固定位置,仅在程序启动时随机生成一次:
- 在主循环外部创建
fruit的实例(遵循Python惯例,建议把类名改成大写开头的Fruit,更符合代码规范); - 主循环里只调用这个实例的
draw_fruit()方法,不再每次新建对象。
修改后的完整代码
import pygame,sys from pygame.math import Vector2 import random pygame.init() # 类名改成大写开头(Python规范) class Fruit: def __init__(self): self.x=random.randint(0,size_y-1) self.y=random.randint(0,size_y-1) self.pos=Vector2(self.x,self.y) def draw_fruit(self): fruit_draw=pygame.Rect(self.pos.x*size_x,self.pos.y*size_x,size_x,size_x) pygame.draw.rect(screen,(200,150,160),fruit_draw) size_x=30 size_y=25 screen=pygame.display.set_mode((size_y*size_x,size_y*size_x)) # 在主循环外创建Fruit实例,只生成一次随机位置 fruit_instance = Fruit() while True: for event in pygame.event.get(): if event.type==pygame.QUIT: pygame.quit() # 这里替换成pygame.quit(),关闭窗口时程序退出更干净 sys.exit() screen.fill(pygame.Color("dark green")) # 调用已创建的实例的绘制方法,不再新建对象 fruit_instance.draw_fruit() pygame.display.flip()
额外小提示
如果之后你想实现「蛇吃掉水果后重新生成新位置」的功能,只需要在蛇吃到水果的逻辑里,重新给fruit_instance的坐标赋值就行,比如:
# 假设蛇吃到水果的条件满足时执行 fruit_instance.x = random.randint(0, size_y-1) fruit_instance.y = random.randint(0, size_y-1) fruit_instance.pos = Vector2(fruit_instance.x, fruit_instance.y)
内容的提问来源于stack exchange,提问作者Error.exe
相关产品推荐
相关产品推荐

