Ako uložiť výsledok metóda

0

Otázka

Snažím sa kresliť námestí v náhodné pozície a náhodné rgb hodnoty a chcem 1000 z nich vytvorili. Problém som čelia je, že zakaždým, keď slučky pre kreslenie objavuje, randomizes to všetko znova, je tam žiadny spôsob, ako to nestane

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

Najlepšiu odpoveď

1

Vytvoriť dot zbierku, a potom len kresliť, že bodka zbierky. Teraz môžete aktualizovať dot pozície samostatne, a oni sa zmenilo v nových pozíciách. Tu mám každý dot presunúť náhodné množstvo v každej slučky.

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

Oplatí úpravy je, aby sa obchod celý obdĺžnik v objekte:

...
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

Otázkou je, o pygame. Takže prosím, použite pygame.Rect. Môžete tiež použiť pygame.Color.
Rabbid76

Ďakujem za takú rýchlu odpoveď, fungovalo to skvele! Snažil som sa prísť na to, ako uložiť všetky svoje pozície samostatne tak toto bolo veľmi pekné
WaffleKyle

Odpoveď s náhodne.semeno je viac elegantné a jednoduché. To môže jednoducho použiť náhodný osiva hodnotu namiesto pevného kódované, ktorý dáva presne požadované správanie.
Zada Zorg

Ja si myslím, že chápem, čo otázka bola o. Uvedenie náhodné.semená vnútri dot funkcia bude riešiť problém. V rovnakom čase, som súhlasíte s tým, že to nie je optimálne vo všeobecnosti.
Zada Zorg
0

Budete volať funkciu dot() v ktorých ste priradili znáhodnenie. Mali by ste zaviesť kus kódu, ktorý randomizes hodnoty mimo dot() funkcia a uložiť ich v samostatnom poli, a potom volať funkciu.

2021-11-22 19:33:27

Správnu odpoveď sa môže zobraziť kód ukazuje, ako na to.
Tim Roberts

Myslím, že nemá zmysel pre takéto jednoduché veci. Ale ak je to pravidlá spoločenstva-som sa bude brať do úvahy
Anna D.

Pamätajte si, že myšlienka je tu vytvoriť katalóg odpovede na potomstvo. Nie sme len prijatie jedného človeka otázku, radi vám poskytuje dlhodobú službu. Teda, odpovede, ktoré naozaj potrebujete byť čo najúplnejšie. Veci ako váš príspevok mal byť komentár.
Tim Roberts
0

Popis znie, ako by ste nie sú nutne snaží uložiť výsledok tak veľa ako chcete proces byť rovnaké v každom čase, ale stále akési náhodné? Mohli by ste len pomocou naprogramovaného semeno?

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

Pozri tento odkaz pre viac podrobností: Náhodný Osiva

2021-11-22 19:39:52

Nie, máte nepochopený problém. Nechce rovnaké náhodný sled každý čas. Chce pozície randomizovanej RAZ.
Tim Roberts

Toto je najlepší prístup na riešenie pôvodného problému. Je to vyžaduje len jeden riadok kódu a tiež zaviesť niektoré deterministický výsledky. Čo je štandardný prístup vo všetkých hrách, ktoré používa postup generované svety.
Zada Zorg

@ZadaZorg To NIE je najlepší prístup. Máte nepochopený problém. Nechce rovnaký počet bodov zakaždým, keď sa hra spustí. Chce odlišné pozície, ALE on nechce, je zmena v každej slučky. To je základný problém. Inicializačný potrebné, aby sa z slučky. Ste na otázku, ktorý nebol požiadaný.
Tim Roberts

V iných jazykoch

Táto stránka je v iných jazykoch

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