Изменение цвета прыгающего мяча - PullRequest
1 голос
/ 20 февраля 2020

Я работаю над проектом по созданию анимации в Pygame. Назначение таково:

Добавьте на экран еще 2 шара (всего 3), которые будут разных цветов, разных размеров и начнутся в разных направлениях. Все они будут непрерывно подпрыгивать.

Подсказка: вам нужно будет создать все новые переменные для каждого шара
, т. Е. X2, y2, dx2, dy2
, и вам нужно будет проверить каждый шар отдельно ударившись о стену и обновив вертикальное и горизонтальное положение каждого шарика в отдельности.

Задача 4-го уровня: когда шары ударяются о стену, и цвета меняются, и каждый цвет меняется случайным образом.

Вот мой код, я использую Python 3,7 на Ма c. Код до сих пор имеет первый шар подпрыгивая и оставаясь того же цвета. Я не могу понять, как сделать еще два шара и заставить их менять цвет каждый раз, когда они ударяются о стену. Если кто-то может помочь, я буквально не могу понять это.

import pygame
import sys
pygame.init()

screensize = (800,600)
screen = pygame.display.set_mode(screensize,0)
pygame.display.set_caption("Animation Test")

WHITE = (255,255,255)
GREEN = (0,255,0)
BLUE = (0,0,255)
RED = (255,0,0)

screen.fill(WHITE)
pygame.display.update()


x = 100
y = 200
dx = 2
dy = 2
go = True
while go:
    for event in pygame.event.get():
        if event.type ==pygame.QUIT:
            go = False

    screen.fill(WHITE)

    x = x + dx
    y = y + dy
    Colour = BLUE 

    if (x>=775):
            dx = -dx
    elif (x>=775):
        dx = -dx
    Colour = RED

1 Ответ

1 голос
/ 20 февраля 2020

Создать функцию (createball), которая может создать случайный шар. Мяч - это кортеж из положений x и y, вектора движения dx, dy и цвета ((x, y, dx, dy, color)). Создайте определенное количество шариков (max_balls) со случайными позициями (random.randint(a, b)) и случайными цветами (random.choice(seq)):

radius = 25
color_list = [GREEN, BLUE, RED]

def createball():
    x = random.randint(radius, screensize[0]-radius)
    y = random.randint(radius, screensize[1]-radius)
    color = random.choice(color_list)
    return x, y, 2, 2, color

Ящик 3 шарика и сохраните их в переменных, как предложено в назначении (x2, y2, dx2, dy2):

x, y, dx, dy, color = createball()
x2, y2, dx2, dy2, color2 = createball()
x3, y3, dx3, dy3, color3 = createball()

Создайте функцию (moveball), которая может перемещать шар, меняйте направление, когда ударите границы и изменить цвет. Переместите шары в приложении l oop:

def moveball(x, y, dx, dy, color):
    x, y = x + dx, y + dy
    if not radius < x < screensize[0]-radius:
        dx = -dx
        color = random.choice(color_list)
    if not radius < y < screensize[1]-radius:
        dy = -dy
        color = random.choice(color_list)
    return x, y, dx, dy, color

while run:

    # [...]

    x, y, dx, dy, color = moveball(x, y, dx, dy, color)
    x2, y2, dx2, dy2, color2 = moveball(x2, y2, dx2, dy2, color2)
    x3, y3, dx3, dy3, color3 = moveball(x3, y3, dx3, dy3, color3)

См. Пример:

import pygame
import sys
import random

pygame.init()
screensize = (800,600)
screen = pygame.display.set_mode(screensize,0)
pygame.display.set_caption("Animation Test")
clock = pygame.time.Clock()

WHITE = (255,255,255)
GREEN = (0,255,0)
BLUE = (0,0,255)
RED = (255,0,0)

radius = 25
color_list = [GREEN, BLUE, RED]

def createball():
    x = random.randint(radius, screensize[0]-radius)
    y = random.randint(radius, screensize[1]-radius)
    color = random.choice(color_list)
    return x, y, 2, 2, color

def moveball(x, y, dx, dy, color):
    x, y = x + dx, y + dy
    if not radius < x < screensize[0]-radius:
        dx = -dx
        color = random.choice(color_list)
    if not radius < y < screensize[1]-radius:
        dy = -dy
        color = random.choice(color_list)
    return x, y, dx, dy, color

x, y, dx, dy, color = createball()
x2, y2, dx2, dy2, color2 = createball()
x3, y3, dx3, dy3, color3 = createball()

go = True
while go:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            go = False

    x, y, dx, dy, color = moveball(x, y, dx, dy, color)
    x2, y2, dx2, dy2, color2 = moveball(x2, y2, dx2, dy2, color2)
    x3, y3, dx3, dy3, color3 = moveball(x3, y3, dx3, dy3, color3)

    screen.fill(WHITE)
    pygame.draw.circle(screen, color, (x, y), radius)
    pygame.draw.circle(screen, color2, (x2, y2), radius)
    pygame.draw.circle(screen, color3, (x3, y3), radius)
    pygame.display.flip()

Более сложный подход с классом мячей можно найти на Использовать vector2 в Pygame .

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