如何在Pygame中放置随机数

时间:2019-04-27 19:11:29

标签: python pygame

import sys, pygame
import random
pygame.init()

x=0.5
speed = [x, x]
size = width, height = 800, 600
black = 0, 0, 0

screen = pygame.display.set_mode(size)

ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

Sair = True

while Sair:

    for event in pygame.event.get():
        if event.type == pygame.QUIT: Sair=False
    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
        x=random.uniform(0, 1)
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]
        x=random.uniform(0, 1)

    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()

sys.exit()

我希望球会移动并且每次击中转角速度都会发生变化。

3 个答案:

答案 0 :(得分:2)

要使球移动,您必须添加一个位置变量,该位置变量在每一帧中均以速度递增。最后,必须根据以下位置更新球形矩形:

pos = [0, 0]
while Sair:

    for event in pygame.event.get():
        if event.type == pygame.QUIT: Sair=False

    if ballrect.left < 0 or ballrect.right > width:
        x = random.uniform(0.1, 1)
        speed[0] = x if speed[0] < 0.0 else -x 

    if ballrect.top < 0 or ballrect.bottom > height:
        x = random.uniform(0.1, 1)
        speed[1] = x if speed[1] < 0.0 else -x  

    pos[0] += speed[0]
    pos[1] += speed[1]
    ballrect.topleft = (int(pos[0]), int(pos[1]))

    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()

请注意,pygame.Rect的坐标是整数值。如果将小于1的正浮点值加到整数值,则该值根本不会改变,因为结果会再次被截断为整数部分。

int a = 1
a + 0.5 == 1

确保随机速度始终大于0.0。生成随机速度并根据新方向更改speed

例如

x = random.uniform(0.1, 1)
speed[0] = x if speed[0] < 0.0 else -x 

答案 1 :(得分:1)

尝试使用speed[0] = random.uniform(0, 1)而不是x = random.uniform(0, 1)。更改x时,不会更改列表speed中的值。这是因为整数是不可变的,这意味着它们不能更改。当您执行x = random.uniform(0, 1)时,您只是在创建一个新整数并将x绑定到该整数。

答案 2 :(得分:0)

如果只有0.1,为什么不使用random.random-它做同样的事情。 Random.uniform用于获取0和1以外的参数。

您需要使速度=生成的随机数。 x永远不会设置为速度