Когда-то давно я пытался делать игру на pygame, вышло конечно не так хорошо, много говнокода и излишеств, сейчас я бы сделал гораздо меньше ошибок архитектуры программы, но что сделано, то сделано.
Только одной частью своей игры я действительно горжусь (кроме того, что всё, кроме звуков, я делал сам, на числом pygame), это босс. Вот и он:
Особенно мне нравится то, как этот босс эффектно трансформируется из коробок в человекоподобного робота. (Не спрашивайте как мне пришло в голову сделать игру про ходячего арбуза, который сражается против ящиков-роботов). А вот и сам процесс трансформации, я могу смотреть на него вечно (простите за шакальное качество):
Задумка была в том, что босс состоит из отдельных частей, каждая из которых имеет свой интеллект, теперь разберём как он работает. Сначала рассмотрим класс BossPart, который означает одну чать робота и включает в себя интеллект для каждой части.
Сначала я создал два словаря. boss_parts_dependencies описывает отношения между частями тела робота, то есть что к чему и с какой стороны должно крепиться, здесь "к", "л", "п", "с", "н", "б", "г", "т" и "h" - это соответственно кисть, локоть, плечо, ступня, нога, бицепс, грудь, торс и голова (head). reversed_tree - почти то же самое, только обратное дерево зависимости.
Если схематично изобразить, то это будет выглядеть так:
Этот скрин старый, в дальнейшем, как вы могли видеть, я переработал стилистику робота, но суть не изменилась. Теперь рассмотрим сам класс BossPart:
Если честно, то мне самому сейчас трудно понять как работает мой код, так как это говнокод, но постараюсь объяснить без кода.
Просто когда одна часть робота ломается, часть, которая была привязана к ней встаёт на её место, часть которая была привязана к той части, которая встала на её место встаёт на её место и так далее. В общем, когда мы убираем одну часть робота, дерево его частей сдвигается.
Если часть встаёт на свой место, то она считается собранной, если все части робота собраны, то робот может двигаться и атаковать. Каждая часть стремится занять своё место и стать собранной.
У робота также есть 2 типа атак: Ракеты и удары о землю.
- Он просто выпускает ракету вверх, а через некоторое время она падает сверху на игрока, но может повредить и самого робота, если упадёт на него.
- Когда игрок близко, робот ударяет по земле и подбрасывает игрока немного вверх, чтобы не дать ему прыгать.
В разложенном виде робот выглядит просто как груда коробок, это мне и нравится. Если кому-то интересно поиграть, или посмотреть на код (не советую), то вот ссылка на гитхаб.