В этом примере я покажу как использовать массивы для анимации и слежения за несколькими объектами, в нашем случае -- звездами. Ну звездами их конечно можно назвать с натяжкой, но для vertical scroll shooter`а самое оно. Это отличный фон для какой-нибудь космической стрелялки.
animation_star.py:
animation_star.py:
import pygame
import random
# Инициализируем pygame
pygame.init()
black = [0, 0, 0]
white = [255, 255, 255]
# Задаем размеры окна
size = [400, 400]
screen = pygame.display.set_mode(size)
# Устанавливаем заголовок
pygame.display.set_caption("Star Animation")
# Создаем пустой массив
star_list = []
# Добавляем 50 звезд со случайными координатами
for i in range(50):
x = random.randrange(0, 400)
y = random.randrange(0, 400)
speed = random.randint(1,3)
star_list.append([x,y, speed])
clock = pygame.time.Clock()
# Повторяем цикл, пока пользователь не закроет окно
done = False
while done == False:
for event in pygame.event.get(): # Проходим по всем событиям
if event.type == pygame.QUIT: # Если пользователь закрыд окно
done = True # Помечаем что пора заканчивать
# Очищаем окно
screen.fill(black)
# Обрабатываем каждую звезду в списке
for star in star_list:
# Рисуем звезду
pygame.draw.circle(screen, white, star[0:2], 2)
# Смещаем звезду вниз
star[1] += star[2]
# Если звезда упала за низ окна
if star[1] > 400:
# Устанавливаем для нее новые случайные координаты (конечноже выше экрана)
star[0] = random.randrange(0,400)
star[1] = random.randrange(-50, -10)
# Выводим на экран все что нарисовали
pygame.display.flip()
clock.tick(20)
pygame.quit()
import random
# Инициализируем pygame
pygame.init()
black = [0, 0, 0]
white = [255, 255, 255]
# Задаем размеры окна
size = [400, 400]
screen = pygame.display.set_mode(size)
# Устанавливаем заголовок
pygame.display.set_caption("Star Animation")
# Создаем пустой массив
star_list = []
# Добавляем 50 звезд со случайными координатами
for i in range(50):
x = random.randrange(0, 400)
y = random.randrange(0, 400)
speed = random.randint(1,3)
star_list.append([x,y, speed])
clock = pygame.time.Clock()
# Повторяем цикл, пока пользователь не закроет окно
done = False
while done == False:
for event in pygame.event.get(): # Проходим по всем событиям
if event.type == pygame.QUIT: # Если пользователь закрыд окно
done = True # Помечаем что пора заканчивать
# Очищаем окно
screen.fill(black)
# Обрабатываем каждую звезду в списке
for star in star_list:
# Рисуем звезду
pygame.draw.circle(screen, white, star[0:2], 2)
# Смещаем звезду вниз
star[1] += star[2]
# Если звезда упала за низ окна
if star[1] > 400:
# Устанавливаем для нее новые случайные координаты (конечноже выше экрана)
star[0] = random.randrange(0,400)
star[1] = random.randrange(-50, -10)
# Выводим на экран все что нарисовали
pygame.display.flip()
clock.tick(20)
pygame.quit()
А если так:
ОтветитьУдалить# Добавляем 50 звезд со случайными координатами
for i in range(50):
x = random.randrange(0, 400)
y = random.randrange(0, 400)
speed = random.random()
size=int(speed*3)
p=random.randint(0,3)
c=[255,255,255]
if p==0:
# red
d_green=random.randint(0,50)
c[1]-=d_green
c[2]-=min(d_green,random.randint(0,50))
elif p==1:
# yellow
c[2]-=random.randint(0,100)
else:
# blue
d_red=random.randint(0,50)
c[0]-=d_red
c[1]-=max(d_red, random.randint(0,50))
star_list.append([x,y, speed, size, c])
##################
pygame.draw.circle(screen, star[4], [int(x) for x in star[0:2]], star[3])