Аркадная игра на PyGame
Астероиды
Теперь самое время добавить астероиды. Для них нам так же потребуется описать собственный класс, но в отличие от игрока, они не будут реагировать на клавиши, а всегда будут двигаться вниз.
Кстати, нам снова понадобится картинка, можно взять нашу.
import pygame
import random
from pygame.transform import scale
# создаем Астероид, расширяющий класс Спрайт
class Asteroid(pygame.sprite.Sprite):
# конструктор, в который передаются стартовые координаты
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
# загружаем картинку с астероидом и масштабируем под размер 50 на 50
self.image = scale(pygame.image.load("asteroid.png"), (50, 50))
# задаем прямоугольную область 50 на 50
self.rect = pygame.Rect(x, y, 50, 50)
# задаем скорость
self.yvel = 5
# функция рисования астероида
def draw(self, screen):
screen.blit(self.image, (self.rect.x, self.rect.y))
# функция перемещения астероида
def update(self):
self.rect.y += self.yvel
# если астероид за границей карты - он умирает
if self.rect.y > 900:
self.kill()
class Spaceship(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.rect = pygame.Rect(x, y, 50, 100)
self.image = scale(pygame.image.load("ship.png"), (50, 100))
self.xvel = 0
def draw(self, screen):
screen.blit(self.image, (self.rect.x, self.rect.y))
def update(self, left, right):
if left:
self.xvel -= 3
if right:
self.xvel += 3
if not (left or right):
self.xvel = 0
self.rect.x += self.xvel
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Asteroids")
sky = scale(pygame.image.load("sky.jpg"), (800, 600))
ship = Spaceship(400, 400)
left = False
right = False
# создадим группу спрайтов, в которой будут храниться все астероиды
asteroids = pygame.sprite.Group()
while True:
# с некоторой вероятность будем добавлять астероиды сверху экрана
if random.randint(1, 1000) > 900:
# выбираем координату по оси x
asteroid_x = random.randint(-100, 700)
# выбираем точку за верхней граничей экрана
asteroid_y = -100
# создаем астероид
asteroid = Asteroid(asteroid_x, asteroid_y)
# и добавляем его в группу
asteroids.add(asteroid)
for e in pygame.event.get():
if e.type == pygame.KEYDOWN and e.key == pygame.K_LEFT:
left = True
if e.type == pygame.KEYDOWN and e.key == pygame.K_RIGHT:
right = True
if e.type == pygame.KEYUP and e.key == pygame.K_LEFT:
left = False
if e.type == pygame.KEYUP and e.key == pygame.K_RIGHT:
right = False
if e.type == pygame.QUIT:
raise SystemExit("QUIT")
# рисуем небо
screen.blit(sky, (0, 0))
# перемещаем корабль
ship.update(left, right)
# просим корабль нарисоваться
ship.draw(screen)
# перемещаем и рисуем каждый астероид в группе
for asteroid in asteroids:
asteroid.update()
asteroid.draw(screen)
pygame.display.update()