понедельник, 11 апреля 2011 г.

Pygame. Анимация звездного неба.

В этом примере я покажу как использовать массивы для анимации и слежения за несколькими объектами, в нашем случае -- звездами. Ну звездами их конечно можно назвать с натяжкой, но для vertical scroll shooter`а самое оно. Это отличный фон для какой-нибудь космической стрелялки.

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()

1 комментарий:

  1. А если так:
    # Добавляем 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])

    ОтветитьУдалить