Comment stocker le résultat d'une méthode

0

La question

Je suis en train de dessiner des carrés dans des positions aléatoires et aléatoire des valeurs rvb et je veux 1000 d'entre eux à être créé. Le problème que je me pose, c'est que chaque fois que la boucle pour le dessin se produit, il rend aléatoire tout nouveau, est-il possible de faire cela se produise pas

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

La meilleure réponse

1

Créer un point de collecte, puis il suffit de tirer la dot de la collection. Maintenant, vous pouvez mettre à jour les points séparément, et qu'ils se redessine dans les nouveaux postes. Ici, je vais avoir chaque point de déplacer un montant aléatoire dans chaque boucle.

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()

La peine de la modification est de stocker l'ensemble du rectangle dans l'objet:

...
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 question est à propos de pygame. Donc il faut les utiliser pygame.Rect. Vous pouvez également utiliser pygame.Color.
Rabbid76

Merci pour cette réponse rapide, cela a fonctionné à merveille! J'ai été à essayer de comprendre comment stocker l'ensemble de leurs positions séparément, donc c'était très agréable
WaffleKyle

Réponse aléatoire.la graine est plus simple et élégant. Il suffit d'utiliser valeur de départ aléatoire au lieu de codé en dur, ce qui donne exactement le comportement souhaité.
Zada Zorg

Je pense, je comprends que la question était d'environ. Mettre aléatoire.de la graine à l'intérieur de la dot de la fonction permettra de résoudre la question. En même temps, je suis d'accord, que ce n'est pas optimal en général.
Zada Zorg
0

Vous appelez une fonction dot() dans laquelle vous avez attribué la randomisation. Vous devez introduire un morceau de code qui permet de rendre aléatoire les valeurs en dehors de la dot() la fonction, et de les stocker dans un tableau séparé, puis appeler la fonction.

2021-11-22 19:33:27

Une réponse adéquate serait montrer de code montrant comment faire.
Tim Roberts

Je pense que ça n'a pas de sens pour de telles choses simples. Mais si c'est les règles de la communauté, je vais prendre cela en compte
Anna D.

Rappelez-vous que l'idée ici est de créer un catalogue de réponses pour la postérité. Nous ne sommes pas juste de répondre à une personne à la question, nous offrons un service à long terme. Ainsi, les réponses doivent vraiment être aussi complète que possible. Des choses comme votre contribution doit être un commentaire.
Tim Roberts
0

Votre description des sons que vous ne l'êtes pas forcément chercher à stocker le résultat autant que vous le souhaitez, le processus sera le même à chaque fois, mais toujours le hasard? Vous pouvez simplement utiliser un codée en dur de la graine?

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

Voir ce lien pour plus de détails: valeur Aléatoire

2021-11-22 19:39:52

Non, vous avez mal compris le problème. Il ne veut pas de la même séquence aléatoire à chaque fois. Il veut que les positions randomisés une FOIS.
Tim Roberts

C'est la meilleure approche pour résoudre les problème d'origine. Il ne nécessite qu'une seule ligne de code et aussi de présenter certains résultats déterministes. Qui est l'approche standard dans tous les jeux qui utilise la procédure a généré des mondes.
Zada Zorg

@ZadaZorg Ce n'est PAS la meilleure approche. Vous avez mal compris le problème. Il ne veut pas de la même des points à chaque fois que le jeu fonctionne. Il veut une autre série de positions, MAIS il ne veut pas qu'elles changent à chaque boucle. C'est le problème de base. L'initialisation nécessaires pour être hors de la boucle. Vous répondez à une question qui ne se posait pas.
Tim Roberts

Dans d'autres langues

Cette page est dans d'autres langues

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