Как поставить случайные числа в Pygame - PullRequest
2 голосов
/ 27 апреля 2019
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 ]

2 голосов
/ 27 апреля 2019

Чтобы заставить шар двигаться, вы должны добавить переменную положения, которая увеличивается в каждом кадре на скорость. Наконец, прямоугольник шара должен быть обновлен на позицию:

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 голос
/ 27 апреля 2019

Попробуйте speed[0] = random.uniform(0, 1) вместо x = random.uniform(0, 1).Когда вы изменяете x, вы не меняете значения внутри списка speed.Это потому, что целые числа неизменны, что означает, что они не могут быть изменены.Когда вы делаете x = random.uniform(0, 1), вы просто создаете новое целое число и привязываете к нему x.

0 голосов
/ 27 апреля 2019

Если у вас есть только 0,1, почему бы не использовать random.random - он делает то же самое.Random.uniform предназначен для получения параметров, отличных от 0 и 1.

Вам необходимо задать скорость = случайное число, которое вы генерируете.Х никогда не устанавливается на скорость

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...