Asteroid destructor

Я написал небольшую компьютерную игру Asteroid destructor. Совпали две давно задуманные цели: познакомится с языком программирования Python и написать простенькую компьютерную игрушку. Эти задумки отлично дополнили друг друга.

Asteroid destructor

О чем игра?

Это аркада про космос. Фактически это воспроизведение старой игры «Asteroid» эпохи аркадных автоматов. В игре вы управляете космическим кораблем, который бороздит пространство космоса и уничтожает встретившиеся ему на пути астероиды. С каждым новым уровнем астероидов все больше и больше. Количество уровней не ограничено, или точнее сказать, ограничено только вашей способностью выживать в груде вновь возникающих космических булыжников.

Игра проста и интересна.

Asteroid destructor

Коддинг

Языком программирования был Python 3.8, в среде IDLE под операционкой Linux. Использовались библиотеки Pygame и Superwires. Питон я изучал по книге Майкла Доусона «Программируем на Python». Написание этой игры было последней главой книги, как апофеоз реализации полученных знаний. Поскольку программа была учебной, по факту, весь код был взят из книги. Лишь отдельные вещи, такие как: вращение астероидов, управление кораблем, титры, загрузка медиа-данных были мною изменены. Но главное, я познакомился с технологией спрайтов и анимации. Это, конечно, наверное, архаика в разработке игр, но с чего то нужно начинать.

Спрайт — это объект картинка, как правило, с прозрачным фоном, обладающая такими параметрами как: координаты x, y; скорости dx, dy; отслеживанием пересечений с другими спрайтами. На основе класса Спрайт (Sprite) мы создаем классы Астероид (Asteroid), Корабль (Ship) и Ракета (Misile). На основе классов создаем объекты и размещаем в игровой области экрана. Объект движутся по заданному им правилу (Астероиды и ракеты), либо управляются игроком (Корабль). Отслеживание и обновления всех объектов на экране выполняется игровым циклом mainloop. При столкновении объектов запускается анимация взрыва.

Графика

Половину времени создания игры, а может даже больше, ушло на графику. Хотя все было скачано из свободных источников, картинки нужно было доделывать: удалять фон, чистить, настраивать яркость и контраст. Некоторые вещи пришлось все таки рисовать самому: анимация взрыва и светящийся кругляшок ракеты. Астероиды трех величин. При попадании в крупный, он разваливается в два средних. При попадании в астероид среднего размера, он разваливается на два меленьких.

Asteroid destructor

Музыка

В инете полно сайтов с бесплатными звуками и музыкой для разработки инди-игр. Все было взято с просторов интернета. А вот фоновой музыкой бесплатно поделился профессиональный саунд-дизайнер Dima Koltsov. Дима, Спасибо тебе! На его треки я наткнулся на DTF, и один из них мне очень приглянулся. Теперь он играет фоном в Asteroid destructor.

Все вроде бы просто, но по незнанию я провозился два дня. Скрипт Питона и вся медиа (картинки, звуки, музыка) запихиваются в один исполняемый файл при помощи утилиты pyinstaller. Утилита на основе скрипта создает спецификацию, в которой в параметр спика data необходимо дописать всю медиа, которую хотим запихнуть. Пример спецификации ниже:

Asteroid destructor

Как компилировать, хорошо написано здесь:

Послесловие

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

Если интересно поиграть, игру вы можете бесплатно скачать с моего облака по ссылке:

55
11 комментариев

Не добавляй "--onefile", когда собираешь под линукс. В разных дистрибутивах разные версии библиотек, и что работает в одном, может не работать в другом. Когда библиотеки не встраиваются в исполняемый файл, легче разбираться с зависимостями. Твоя игра не запускается в Arch Linux, пока не подгрузишь родную библиотеку libstdc++.so.6 вместо вшитой в игру:

export LD_PRELOAD=/usr/lib/libstdc++.so.6

А ещё лучше - публикуй исходники тоже.

1

Воу! Спасибо за подсказку.
Я думал о том, что могут траблы на разных дистрибутивах. У меня под рукой был только Минт и Виндовс7. У тебя Arch Linux?

Какие нехорошие люди ставят дизлайки?? Пусть попробуют сами хоть что то создать...

А они создают, каждый день создают ... Только им это тоже не нравится и поэтому они плоды своих трудов смывают )

1