es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo almacenar el resultado de un método

Estoy tratando de dibujar cuadrados en posiciones aleatorias y valores rgb aleatorios y quiero crear 1000 de ellos. El problema al que me enfrento es que cada vez que ocurre el bucle de dibujo, todo se vuelve a aleatorizar, ¿hay alguna manera de evitar que esto suceda?

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

def safeZone():
    #Dibuja un rectángulo superior
    pygame.draw.rect(win, (50,205,50), (0, 0, 800, 100))

def dot():
    width = 10
    height = 10
    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)
    pygame.draw.rect(win, (r, g, b), (spawnX, spawnY, width, height))

def population(size):
    for x in range(size):
        dot()

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    win.fill((255, 255, 255))
    safeZone() # Siempre dibujar los puntos después de la zona segura
    population(1000)
    pygame.display.update()

pygame.quit()
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para mantener las posiciones y valores RGB iguales para los 1000 cuadrados, se pueden generar los valores aleatorios fuera del bucle de dibujo y almacenarlos en una lista. Luego, dentro del bucle, se puede iterar a través de esa lista para dibujar los cuadrados con las posiciones y colores predeterminados. Aquí está un ejemplo de código:

    import pygame
    import sys
    import random
    
    pygame.init()
    win = pygame.display.set_mode((800,600))
    pygame.display.set_caption("Simulación")
    
    def zonaSegura():
        #Dibuja un rectángulo superior
        pygame.draw.rect(win, (50,205,50), (0, 0, 800, 100))
    
    def punto(color, x, y):
        width = 10
        height = 10
        pygame.draw.rect(win, color, (x, y, width, height))
    
    colors = [(random.randrange(1, 256), random.randrange(1, 256), random.randrange(1, 256)) for i in range(1000)]
    positions = [(random.randrange(1, 801), random.randrange(1, 601)) for i in range(1000)]
    
    def poblacion(size):
        for i in range(size):
            punto(colors[i], positions[i][0], positions[i][1])
    
    run = True
    while run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
        win.fill((255, 255, 255))
        zonaSegura() # Siempre dibuja los puntos después de la zona segura
        poblacion(1000)
        pygame.display.update()
    
    pygame.quit()
    

    En este código modificado, primero genero dos listas colors y positions, cada una con 1000 valores aleatorios generados. Luego dentro de la función población, uso el índice i para acceder al color y posición correspondiente para cada cuadrado a dibujar. De esta manera, las posiciones y colores permanecerán constantes durante la ejecución del programa.

Comments are closed.