Несколько шариков, движущихся в коробке (2D) - PullRequest
0 голосов
/ 13 апреля 2020

Я работал над кодом для имитации нескольких шаров, движущихся внутри коробки, используя Pygame. Я написал код для одного шара, который сталкивается со стенками контейнера. Я хочу увеличить количество шаров, как я хочу. Я искал помощь здесь и получил учебник здесь: https://github.com/petercollingridge/code-for-blog/blob/master/pygame%20physics%20simulation/particle_tutorial_3.py Здесь он использует класс. Но сейчас я не хочу использовать класс для симуляции этого. Есть ли другой путь? Пожалуйста, помогите мне. Я новичок в python. Это мой код:

import pygame
import time
import random
pygame.init()

display_width = 860
display_height = 540
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)

display_surface = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption("Simulation")
clock = pygame.time.Clock()



def draw_ball(ball_color, ballx, bally, ballr):

        pygame.draw.ellipse(display_surface, ball_color, [int(ballx), int(bally), int(2 *ballr),int(2 * ballr)])



ball_radius = 7
ball_x_vel = 5
ball_y_vel = 5
ball_x_position=0.0
ball_y_position=0.0
number_of_balls=5

ball_x_position =ball_x_position+ random.randrange(0,display_width-2*ball_radius)
ball_y_position = ball_y_position+random.randrange(0,display_height-2*ball_radius)
display_exit = False
while not display_exit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    if ball_x_position > display_width - 2 * ball_radius or ball_x_position < 0:
        ball_x_vel *= -1

    if ball_y_position > display_height - 2 * ball_radius or ball_y_position < 0:
        ball_y_vel *= -1

    ball_x_position += ball_x_vel
    ball_y_position += ball_y_vel

    display_surface.fill(white)

    draw_ball(red, ball_x_position, ball_y_position, ball_radius)


    pygame.display.update()
    clock.tick(100)

pygame.quit()
quit()

Я думаю, что я должен использовать какой-то тип для l oop, чтобы создать несколько шаров для случайных начальных положений и затем следовать тем же граничным условиям.

Редактировать: После предложений: импорт pygame импорт случайный

pygame.init()

display_width = 860
display_height = 540
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)

display_surface = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption("Simulation")
clock = pygame.time.Clock()


def draw_ball(ball_color, ball_specs):
    pygame.draw.ellipse(display_surface, ball_color, ball_specs)


ball_x_position = 0
ball_y_position = 0
ball_diameter = 10
number_of_balls = 10


def ball_show(number_of_balls):
    for n in range(number_of_balls):
        ball_x_position = random.randrange(0, display_width)
        ball_y_position = random.randrange(0, display_height)
        ball = [ball_x_position, ball_y_position, ball_diameter, ball_diameter]
        draw_ball(red, ball)


display_exit = False
while not display_exit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    display_surface.fill(white)
    ball_show(number_of_balls)
    pygame.display.update()
    clock.tick(100)

pygame.quit()
quit()
...