<MyRusakov.ru />

Написание лайфхаков на Python

Написание лайфхаков на Python

Данный курс научит Вас автоматизировать самые разные задачи на языке Python, благодаря чему Вы сэкономите на рутине тысячи и тысячи часов своей жизни. Курс состоит из 20 примеров в различных областях: файлы и директории, медиа-файлы, Интернет, Web-мастеринг, Unreal Engine. Каждый пример упрощает ту или иную задачу в своей области, при этом каждый из них создаётся прямо на Ваших глазах и тщательно комментируется.

Помимо самих уроков Вы так же получаете и множество упражнений. По сути, Вы создадите свои собственные 20 небольших проектов, благодаря чему у Вас появится и практика, и портфолио.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Зачем Вы изучаете программирование/создание сайтов?

Создание космической аркады с Python и Pygame. Добавляем класс астероида

Создание космической аркады с Python и Pygame. Добавляем класс астероида

В предыдущей статье по Python и Pygame мы завершили создание логики для космического корабля. Но корабль все еще один в пустом пространстве. Пора добавить несколько астероидов. И в сегодняшней статье мы создадим данный игровой объект.

Астероиды

На данный момент у наc один космический корабль, способный перемещяться по экрану. В конце этой статьи на экране должны появиться несколько астероидов. Более того, мы собираетесь реализовать столкновения между космическим кораблем и астероидами.

Создание класса

Подобно космическому кораблю, мы начнем с создания класса под названием Asteroid, который наследуется от GameObject. Для чего отредактируем файл space_rocks/models.py так:


class Asteroid(GameObject):
    def __init__(self, position):
        super().__init__(position, load_sprite("asteroid"), (0, 0))

# Как и раньше, вы начинаете с вызова конструктора GameObject с определенным изображением. Вы добавили изображение на одном из предыдущих шагов.

# Затем импортируйте новый класс в space_rocks/game.py:

import pygame

from models import Asteroid, Spaceship
from utils import load_sprite

# В заключение, отредактриуем конструктор класса SpaceRocks так, чтобы создать шесть астероидов:


def __init__(self):
    self._init_pygame()
    self.screen = pygame.display.set_mode((800, 600))
    self.background = load_sprite("space", False)
    self.clock = pygame.time.Clock()

    self.asteroids = [Asteroid(0, 0) for _ in range(6)]
    self.spaceship = Spaceship((400, 300))

Теперь, когда в игре стало больше игровых объектов, было бы неплохо создать вспомогательный метод в классе SpaceRocks, который будет возвращать их все. Затем этот метод будет использоваться логикой рисования и перемещения. Таким образом, мы сможем позже ввести новые типы игровых объектов и изменить только этот единственный метод, или мы сможем исключить некоторые объекты из этой группы, если это необходимо.

Реализуем метод _get_game_objects():


# game.py

def _get_game_objects(self):
    return [*self.asteroids, self.spaceship]

Теперь используем его для перемещения всех игровых объектов в одном цикле, отредактировав _process_game_logic():


def _process_game_logic(self):
    for game_object in self._get_game_objects():
        game_object.move(self.screen)


# То же самое касается _draw():

def _draw(self):
    self.screen.blit(self.background, (0, 0))

    for game_object in self._get_game_objects():
        game_object.draw(self.screen)

    pygame.display.flip()
    self.clock.tick(60)

Запустим игру:

>>>python __main__.py


Изображение

К сожалению, все астероиды скопились в одном углу.

Ну, это было отчасти ожидаемо, так как все астероиды создаются с положением (0, 0), которое представляет собой верхний левый угол. Вы можете изменить это, установив произвольную позицию на экране.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.