Cómo almacenar el resultado de un método

0

Pregunta

Estoy tratando de dibujar cuadrados en posiciones aleatorias aleatorias y los valores rgb y quiero 1000 de ellos para ser creado. El problema que estoy enfrentando es que cada vez que el bucle de dibujo se produce, se aleatoriza todo de nuevo, ¿hay alguna manera de hacer que esto no suceda

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

def safeZone():
        #Draws a top rectangle
    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() # Always draw dots after safe zone
    population(1000)
    pygame.display.update()

pygame.quit()


pygame python
2021-11-22 19:27:48
3

Mejor respuesta

1

Crear un punto de recogida, a continuación, hacer que el punto de recogida. Ahora se puede actualizar el punto de las posiciones por separado, y se vuelve a dibujar en las nuevas posiciones. Aquí, estoy teniendo cada punto de mover una cantidad aleatoria en cada bucle.

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

class Dot:
    def __init__(self):
        self.spawnX = random.randrange(0, 800)
        self.spawnY = random.randrange(0, 600)
        self.r = random.randrange(0, 256)
        self.g = random.randrange(0, 256)
        self.b = random.randrange(0, 256)

def safeZone():
        #Draws a top rectangle
    pygame.draw.rect(win, (50,205,50), (0, 0, 800, 100))
    
def drawdot(dot):
    width = 10
    height = 10
    pygame.draw.rect(win, (dot.r, dot.g, dot.b), (dot.spawnX, dot.spawnY, width, height))

def population(dots):
    for dot in dots:
        dot.spawnX += random.randrange(-3,4)
        dot.spawnY += random.randrange(-3,4)
        drawdot(dot)

alldots = [Dot() for _ in range(1000)]

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    win.fill((255, 255, 255))
    safeZone() # Always draw dots after safe zone
    population(alldots)
    pygame.display.update()

Una pena que la modificación es para almacenar todo el rectángulo en el objeto:

...
class Dot:
    def __init__(self):
        self.location = [
            random.randrange(0, 800),
            random.randrange(0, 600),
            10, 10
        ]
        self.color = (
            random.randrange(0, 256),
            random.randrange(0, 256),
            random.randrange(0, 256)
        )
    def move(self, dx, dy ):
        self.location[0] += dx
        self.location[1] += dy

def drawdot(dot):
    pygame.draw.rect(win, dot.color, dot.location)

def population(dots):
    for dot in dots:
        dot.move( random.randrange(-3,4), random.randrange(-3,4) )
        drawdot(dot)
...
2021-11-22 19:39:00

La pregunta es acerca de pygame. Así que por favor utilice pygame.Rect. También puede utilizar pygame.Color.
Rabbid76

Gracias por una respuesta tan rápida, esto funcionó de maravilla! Yo estaba tratando de averiguar cómo almacenar todas sus posiciones por separado, así que esto fue muy agradable
WaffleKyle

Respuesta aleatoria.la semilla es más elegante y sencilla. Se puede usar valor de raíz aleatoria en lugar de codificado, que da exactamente comportamiento deseado.
Zada Zorg

Creo que, entiendo, ¿cuál es la pregunta era acerca de. Poner al azar.la semilla en el interior de punto función de resolver el problema. En el mismo tiempo, estoy de acuerdo, que esta no es la óptima en general.
Zada Zorg
0

Puede llamar a una función dot() en la que se ha asignado la aleatorización. Usted debe introducir un trozo de código que aleatoriamente los valores de fuera de la dot() la función, y almacenarlos en una matriz independiente y, a continuación, llamar a la función.

2021-11-22 19:33:27

Una respuesta apropiada sería mostrar código muestra cómo hacer esto.
Tim Roberts

Creo que no tiene sentido para cosas tan simples. Pero si se trata de normas de la comunidad -- voy a tomar esto en cuenta
Anna D.

Recuerde que la idea aquí es crear un catálogo de respuestas para la posteridad. No estamos contestando a una persona que pregunta, estamos ofreciendo un servicio a largo plazo. Por lo tanto, las respuestas realmente necesita ser tan completa como sea posible. Cosas como su contribución debe ser un comentario.
Tim Roberts
0

Su descripción parece que no son necesariamente tratando de almacenar el resultado tanto como usted desea que el proceso sea el mismo cada vez, pero todavía especie de azar? Usted podría utilizar una rígida semilla?

import random
random.seed(10)
print(random.random())

Vea este enlace para más detalles: la Semilla Aleatoria

2021-11-22 19:39:52

No, No has entendido mal el problema. Él no quiere que la misma secuencia aleatoria cada vez. Él quiere que las posiciones aleatorizado una VEZ.
Tim Roberts

Este es el mejor enfoque para resolver el problema original. Se requiere sólo una línea de código y también introducir algunos resultados deterministas. Que es el enfoque estándar en todos los juegos que utiliza el procedimiento genera mundos.
Zada Zorg

@ZadaZorg NO es el mejor enfoque. Usted ha entendido mal el problema. Él no quiere los mismos puntos cada vez que el juego se ejecuta. Él quiere un conjunto diferente de posiciones, PERO él no quiere cambiar en cada bucle. ESE es el problema básico. La inicialización necesaria para estar fuera del bucle. Usted está respondiendo a una pregunta que no se hizo.
Tim Roberts

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................