You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python贪吃蛇游戏:实现水果矩形固定位置且仅程序启动时更换位置的解决方案

解决贪吃蛇游戏中水果不停移动的问题

嘿,我来帮你搞定这个小问题~

问题根源

你现在的代码里,每次主循环执行时都会调用fruit().draw_fruit()——这相当于每帧都新建一个fruit类的实例,而每个新实例在初始化时都会重新随机生成x、y坐标,所以水果看起来就一直在飞快地变换位置,根本停不下来。

修改方案

只需要调整两个地方,就能让水果保持固定位置,仅在程序启动时随机生成一次:

  1. 在主循环外部创建fruit的实例(遵循Python惯例,建议把类名改成大写开头的Fruit,更符合代码规范);
  2. 主循环里只调用这个实例的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:12:28