仅在用户交互后随机化变量

Randomizing variable only after user interaction

对于这个问题的格式,我的代码,如果之前有人问过等等,我很抱歉。我对使用 python 编码有点陌生,尤其是 pygame,所以我不我不知道我在做什么

我正在尝试制作一款从列表中随机选择一个形状的游戏,用户应该只将鼠标悬停在该形状上,如果他们将鼠标悬停在另一个形状上,那就错了 我已经弄清楚了那部分代码并且想考虑我的代码接近完成,除了当它从列表中随机化形状时它会继续随机化而不是在再次随机化形状之前等待用户交互,它会做几秒钟内数以千计的随机呼叫。 有没有更好的方法来随机化形状?

目前,我是这样的:

shapes = [ "square", "circle", "rectangle" ]
shape = random.choice(shapes)

我也试过

import pygame
pygame.init()
import random
screen = pygame.display.set_mode((500, 500))
shapes = ["square", "circle", "rectangle"]
square = pygame.Rect(100,100,75,75)
circ = pygame.Rect(20,240, 120,120)
rect = pygame.Rect(250, 100, 100, 150)
shape = random.choice(shapes)
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    screen.fill(0)
    font = pygame.font.Font('freesansbold.ttf', 12)
    shapetext = font.render('Designated shape: ' + shape, True, (255,255,255), (0,0,0))
    shapetextRect = shapetext.get_rect()
    shapetextRect.center = (100,20)
    screen.blit(shapetext,shapetextRect)
    point = pygame.mouse.get_pos()
    square_collide = square.collidepoint(point)
    circ_collide = circ.collidepoint(point)
    rect_collide = rect.collidepoint(point)
    if shape == "square":
        if square_collide:
            shape = random.choice(shapes)
        elif rect_collide or circ_collide:
            shape = random.choice(shapes)
    elif shape == "circle":
        if circ_collide:
            shape = random.choice(shapes)
        elif rect_collide or square_collide:
            shape = random.choice(shapes)
    elif shape == "rectangle":
        if rect_collide:
            shape = random.choice(shapes)
        elif square_collide or circ_collide:
            shape = random.choice(shapes)
    pygame.draw.rect(screen, (255,255,255), square)
    pygame.draw.circle(screen, (255,255,255), (80,300), 60)
    pygame.draw.rect(screen, (255,255,255), rect)
    pygame.display.flip()
pygame.quit()
exit()

为了篇幅,我删掉了碰撞会使形状改变不同颜色的部分 碰撞本身就是用户交互 你可以看到在这种情况下,形状变量会在一次用户交互后很快随机化。我希望它随机化一个形状,然后在用户将鼠标悬停在一个形状上(无论它是对还是错)后,再随机化一个但不是那么快。 在这里黑暗中拍摄,它是否必须首先认识到没有更多的碰撞?或者还有什么我应该做的吗?

我也尝试了其他组合,试图用随机选择更新变量,但是当它在那个 while True 循环下时,它会不断地随机化和更新,我真的不知道出了什么问题。

再次,对于所有这些方面的经验不足,我们深表歉意。如果这有帮助,我可以分享整个内容,但由于它有点混乱而且很长,我选择不参与这个问题。预先感谢您的帮助!

你应该看看 pygame.time.Clockpygame.tick(fps)。如果您将 fps 设置得非常低,您就可以在不改变代码工作方式的情况下接近您想要的效果。

clock = pygame.time.Clock()
fps = 1  # which would be really slow, but you'll see what happen

while run: 
   clock.tick(fps)
   ...

另一种可能性是用pygame.time.delay()设置延迟,例如每次游戏改变形状时,等待一秒钟再做任何事情。这是文档的 link。还有clock说明