从一个包含3个元素的列表中画出2个矩形

3
我希望在用户按键后能够绘制随机的矩形。我苦于如何随机选择矩形,你有什么好方法吗?
共有4个可能的矩形。如果用户按下特定的键,我想随机在a、b和c中绘制两个矩形,如果他按下不同的键,我想在a、b和d中绘制2个矩形。
我通过pygame.draw.rect(-parameters-)绘制矩形。是否可以为每个不同的矩形分配一个变量并将它们放入列表中,然后使用random.choice()在该列表上调用它们?
def pick2():
    a = pygame.draw.rect(surface, (0,0,255), (650, 600, 450,70))
    b = pygame.draw.rect(surface, (0,0,255), (650, 750, 450,70))
    c = pygame.draw.rect(surface, (0,0,255), (100, 750, 450,70)) 
    d = pygame.draw.rect(fenster, (0,0,255), (650, 750, 450,70))
    list = [a,b,c,d]
    random.choice(list)
    random.choice(list)

    pygame.display.update()

我尝试了一下,但没有使其工作。 我还希望第二个random.choice(list)的输出与第一个不同。

是否可能将pygame函数分配给这样的变量?

我想要的基本上是仅随机执行三个矩形绘制中的两个。

有人能帮忙吗?


你调用了 random.choice() 但忽略了它的返回值。请注意,你可能会选择同一个矩形两次。你可以使用 random.choices() 来解决这个问题。 - Code-Apprentice
“像那样将pygame函数分配给变量是可能的吗?”你并没有像你所问的那样将一个函数分配给一个变量。相反,你正在将函数的返回值分配给一个函数。你需要对random.choice()的返回值做同样的操作。 - Code-Apprentice
2个回答

1
让我们分解这个问题:
a = pygame.draw.rect(surface, (0,0,255), (650, 600, 450,70))

这将调用pygame.draw.rect()函数并将其返回值赋给变量a。请注意,通过调用rect()函数,您会立即绘制矩形。对于以下所有调用,都是如此。虽然可以以这种方式将矩形分配给变量,但仍会绘制它们所有。为了实现您想要的效果,您需要先选择要绘制的两个矩形,然后仅绘制这两个选择的矩形。一种方法是将每个矩形的坐标存储在列表中:
rects = [(650, 600, 450,70), (650, 750, 450,70), (100, 750, 450,70), (650, 750, 450,70)]

现在您可以选择两个矩形:
chosen = random.sample(rects, k=2)

我使用random.sample()来确保我不会重复得到相同的矩形。同时,我将返回值赋给一个变量,以便捕获随机选择的矩形。
最后绘制这些矩形:
for rect in rects:
    pygame.draw.rect(surface, (0,0,255), rect) 

请注意,我从您提供的4个示例中选择了两个矩形。如果您想要从3个中选择2个,则只需根据需要更改rects列表。
我强烈建议您查看http://python.org上的官方Python教程。这将帮助您更详细地了解函数和返回值。

0

你需要给这个选项进行赋值。你只是调用了random.choice,你需要做的是像这样:

random_choice = random.choice(list)
random_choice_2 = random.choice(list)

然后,您可以随心所欲地使用这两个变量。


2
可能会得到相同的矩形两次。更好的方法是random.sample(list_of_rectangles, 2) - Adam Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接