Я пытаюсь создать симуляцию, генерируя частицы (в основном круги) в pygame. Одна из целей состоит в том, чтобы частица произвольно перемещалась по экрану, и после столкновения они должны прилипать друг к другу и оставаться в своем фиксированном положении. Я создал класс под названием Particle, который принимает следующие атрибуты: Particles(pos_x, pos_y, size, colour, screen)
. Затем я создаю список этих частиц на экране, чтобы они перемещались случайным образом. Однако мне сложно понять, как пройти l oop через каждую частицу и проверить, меньше ли расстояние между их соответствующими координатами x 2*radius
. (Пример: если радиус частицы составляет 5 пикселей, то particle_a(4, 8)
столкнется с particle_b(6, 8)
.
Как мне go проверить каждую частицу, чтобы увидеть, сталкиваются ли они друг с другом? список частиц, а затем свериться с копией этого списка, но я не уверен, что поступаю правильно. Я могу использовать всю помощь, которую могу получить. Я все еще новичок, поэтому буду признателен любая помощь.
import sys
import pygame
import random
from dla_settings import Settings
from particles import Particles
PARTICLE_SIZE = 5
PARTICLE_COLOUR = (random.choice((200, 240)), 100, 0)
def dla_simulation():
dla_settings = Settings()
pygame.init()
screen = pygame.display.set_mode((dla_settings.screen_width, dla_settings.screen_height))
pygame.display.set_caption("DLA")
screen.fill((10, 10, 10))
pygame.display.update()
main_particle = Particles(dla_settings.screen_width // 2,
dla_settings.screen_height // 2,
PARTICLE_SIZE,
PARTICLE_COLOUR,
screen)
particles = []
for particle in range(20):
x = random.randint(400, 500)
y = random.randint(400, 500)
particle = Particles(x,
y,
PARTICLE_SIZE,
PARTICLE_COLOUR,
screen)
particles.append(particle)
particles_copy = particles.copy()
print(particles_copy)
# Start the main loop for the game.
while True:
# Watch for keyboard and mouse events.
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.fill((10, 10, 10))
main_particle.draw_particle()
for particle in particles:
particle.draw_particle()
particle.random_move()
for particle_copy in particles_copy:
if particle.pos_x - particle_copy < 2:
particle.position_locked()
# Update screen
pygame.display.flip()
dla_simulation()