如何储存的成果的一个方法

0

的问题

我试图画正方形,在随机的位置和随机rgb价值观和我想1000他们被创建。 这个问题,我们面临的是,每次循环绘图发生时,它随机这一切再次,是否有任何方法来使这个不会发生

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

最好的答案

1

创建一点集合,然后只是画那点收集。 现在你可以更新点的职位分开,并且他们将重新在新的职位。 在这里,我具有各点移动的一个随机的数量在每一个循环。

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

一个值得修改是储存的整个矩形中的对象:

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

问题是关于查看. 所以请使用 pygame.Rect. 你也可以使用 pygame.Color.
Rabbid76

谢谢你如此迅速的响应,这一工作,奇妙! 我试图找出如何储存的所有他们的职位分开,所以这是非常好的
WaffleKyle

答案与随机的。种子更为优雅和简单。 它可以仅仅使用随机的种子的价值,而不是硬盘编码,这给确切所需的行为。
Zada Zorg

我认为,我明白了,什么问题。 把随机的。种点内功能将解决问题。 在同一时间,我同意,这不是最佳的。
Zada Zorg
0

你呼叫一个功能 dot() 在分配了随机化。 你应该介绍一块代码随机化的数值以外的 dot() 功能,并将它们储存在一个单独的阵列,然后调的功能。

2021-11-22 19:33:27

一个正确的答案表明的代码表明如何做到这一点。
Tim Roberts

我认为这没有意义的,对于这样简单的事情。 但是,如果这是规则的社会-我会考虑这一点
Anna D.

记住,这里的想法是创建一个目录的答案为子孙后代。 我们不仅回答一个人的问题,我们提供一个长期的服务。 因此,答案真的需要尽可能完整。 事情就像你们的贡献应该是一个评论。
Tim Roberts
0

你的描述听起来像你不一定是试图将结果存储这么多你想要的过程是相同的每一次,但仍随机的? 你可以只采用一个硬编码的种子吗?

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

参见此链接的更多细节: 随机的种子

2021-11-22 19:39:52

不,你误解的问题。 他不想同样的随机序列的每个时间。 他要的位置随机的一次。
Tim Roberts

这是最好的方法来解决原来的问题。 它是只需要一个行代码并且还介绍一些确定的结果。 这是标准做法,在所有游戏使用过程中产生的世界。
Zada Zorg

@ZadaZorg它不是最好的办法。 你有误解的问题。 他不想同样的圆点每次比赛的运行。 他想要一个不同的位置,但他不希望他们改变在每一个循环。 这是基本问题。 初始化需要的循环。 你回答一个问题,这不是问。
Tim Roberts

其他语言

此页面有其他语言版本

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