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

如何存储方法执行结果 解决Pygame随机方块每次循环重绘问题

解决方法

你的代码问题出在随机参数的生成时机:所有随机坐标、颜色的生成逻辑都写在了dot()函数里,而这个函数会在主循环每帧刷新时被population(1000)反复调用,相当于每帧都重新生成1000组新的随机参数,自然所有方块每次都会变化。

你只需要提前一次性生成所有方块的固定参数,存在列表里,主循环里直接读取预存的参数绘制即可,不要在渲染流程里生成随机值。

修改后的完整代码如下:

import pygame
import sys
import random
pygame.init()
win = pygame.display.set_mode((800,600))
pygame.display.set_caption("Simulation")

def safeZone():
    # 绘制顶部绿色矩形
    pygame.draw.rect(win, (50,205,50), (0, 0, 800, 100))
    
def dot(dot_info):
    width = 10
    height = 10
    spawnX, spawnY, r, g, b = dot_info
    pygame.draw.rect(win, (r, g, b), (spawnX, spawnY, width, height))

def population(dots_list):
    for dot_info in dots_list:
        dot(dot_info)

# 提前预生成所有方块的参数,仅生成一次
dots_data = []
for _ in range(1000):
    spawnX = random.randrange(1, 801)
    spawnY = random.randrange(1, 601)
    r = random.randrange(1, 256)
    g = random.randrange(1, 256)
    b = random.randrange(1, 256)
    dots_data.append((spawnX, spawnY, r, g, b))

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    win.fill((255, 255, 255))
    safeZone() 
    # 直接用预生成的参数绘制,不会再刷新随机值
    population(dots_data)
    pygame.display.update()

pygame.quit()

如果后续需要动态新增、修改方块参数,只要调整dots_data列表的内容即可,不需要改动绘制逻辑。

内容的提问来源于stack exchange,提问作者WaffleKyle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:15:11