Python 从3个矩形列表中绘制2个矩形

Python 从3个矩形列表中绘制2个矩形,python,pygame,Python,Pygame,我想在用户按键后绘制随机矩形。 我正在努力寻找一种随机选取矩形的方法。最好的方法是什么 有4个可能的矩形。如果用户按某个键,我想在a、b和c中随机画两个矩形,如果他按另一个键,我想在a、b和d中画两个矩形 我正在通过pygame.draw.rect(-parameters-)绘制rect。 是否可以将每个不同的矩形绘图指定给一个变量,并将它们放入一个列表中,然后在该列表中调用它们do random.choice() def pick2(): a = pygame.draw.rect(su

我想在用户按键后绘制随机矩形。 我正在努力寻找一种随机选取矩形的方法。最好的方法是什么

有4个可能的矩形。如果用户按某个键,我想在a、b和c中随机画两个矩形,如果他按另一个键,我想在a、b和d中画两个矩形

我正在通过pygame.draw.rect(-parameters-)绘制rect。 是否可以将每个不同的矩形绘图指定给一个变量,并将它们放入一个列表中,然后在该列表中调用它们do 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(列表)的输出与第一个不同


甚至可以将pygame函数指定给这样的变量吗

我基本上只想执行随机选择的三个矩形绘制中的两个


有人能帮忙吗?

您需要指定选项。您只是在随机调用
。choice
,您应该这样做

random_choice = random.choice(list)
random_choice_2 = random.choice(list)
然后你可以用这两个变量做任何你想做的事情。

让我们来分解一下:

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)
for rect in rects:
    pygame.draw.rect(surface, (0,0,255), rect) 
我使用
random.sample()
来确保不会两次得到相同的矩形。我还将返回值赋给一个变量,以便捕获随机选择的矩形

最后绘制这些矩形:

chosen = random.sample(rects, k=2)
for rect in rects:
    pygame.draw.rect(surface, (0,0,255), rect) 
请注意,我从您的4个示例中选择了两个矩形。如果要从3个选项中选择2个,则只需根据需要更改
rects
列表


我强烈建议您访问官方的Python教程。它将帮助您更详细地理解函数和返回值。

您调用
random.choice()
但忽略其返回值。还要注意,您可能会选择相同的矩形两次。您可以通过使用
random.choices()
来解决此问题。“甚至可以将pygame函数分配给这样的变量吗?”您并没有像您所问的那样将函数分配给变量。而是将函数返回值赋给函数。您需要对来自
random.choice()
的返回值执行相同的操作。这可能会得到相同的矩形两次。更好的是