Ещё один проект рогалика на Python:заметки, вопросы, идеи

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

Аватара пользователя
karagy
Сообщения: 1271
Зарегистрирован: 10 янв 2007, 14:13

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение karagy » 30 дек 2014, 22:00

Tookser писал(а):Читаю про алгоритмы сглаживания и ищу такой, которой позволит проводить линию (коридор), проходимый игроком только с помощью движения вверх-вниз-вправо-влево.
четырехсвязный брезенхем?

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 30 дек 2014, 22:35

Он. Правда, выдаёт всякую ерунду по этому запросу, но прав ли я, что он делается из обычного примерно одной строчкой?

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 31 дек 2014, 00:45

Написал ещё один простенький генератор карты и задумался над собственно движком (собаки бегающие), взаимодействием объектов и бэкапами своего кода. Дропбокс будет достаточно удобным решением.
Сейчас главное — организовать переходы между картами и добавить собак. В рогалике будет время, система времени — действие и кулдаун после него (самое простое, что можно сделать). Каждое действие происходит независимо от других, что плюс. Субъект, который совершит ближайшее действие, будет доставаться из структуры данных типа "куча" (разумеется, сделаю её пока наивным образом), и засовываться в неё после своего действия вновь (получая новое время своего следующего действия). Нужно решить, как распределять места между теми, кто имеет одинаковое время действия. Возможно, стоит тогда ввести какой-нибудь уникальный хэш от каждого монстра, чтобы однозначно решать, кто будет ходить и под каким номером.
Название игры уже придумано. Задумался над ещё одной фишкой, но она слишком сложна в реализации (изучение игровым миром личности данного игрока и соответствующие воздействия). Хотя можно сделать опросник перед игрой/в ходе игры, но это была бы сложная система, и её было бы сложно тестить.

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Jolly Roger » 31 дек 2014, 05:55

Ух! Здорово! Очень хорошо описаны те самые ощущения, когда начинаешь рогалик :)
По старой традиции, могу порекомендовать ознакомиться с "убийцей рогаликов" (если читать его на уже продвинутой стадии разработки) книгой Макконнелла "Совершенный код", а также "Level Up! The Guide to Great Video Game Design" Скота Роджерса, ну и полистать форум, тот же LD.
Не для того, чтобы демотивироваться, а наоборот, избежать тонны ошибок.
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 31 дек 2014, 06:09

Спасибо всем за советы. Редактор кода для ipad вроде нашёл.
"Убийца рогаликов" — это из-за возникающего желания полностью переписать весь проект? Книжку Макконела почитывал, но только не про ООП, а оно понадобится. Скота Роджерса или что-то по гейм-дизайну потребуется почитать обязательно. Сейчас просто напишу класс "существо" без подробностей и подумаю над классом уровней.

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Jolly Roger » 31 дек 2014, 06:28

Tookser писал(а):Спасибо всем за советы. Редактор кода для ipad вроде нашёл.
"Убийца рогаликов" — это из-за возникающего желания полностью переписать весь проект?

Да, именно от него, но помогает.
и от возможности случайно убить себя фейспалмом. :)
Tookser писал(а):Книжку Макконела почитывал, но только не про ООП, а оно понадобится.
Это верно, как сказал Jesus05.
Первая стадия изучения ООП это представление о классах, как совокупности данных и методов.
Это ещё не знание ООП. :)
Tookser писал(а):Скота Роджерса или что-то по гейм-дизайну потребуется почитать обязательно. Сейчас просто напишу класс "существо" без подробностей и подумаю над классом уровней.
Ещё есть "book of lenses", но по мне так, для началь лучше именно с Роджерса.
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 31 дек 2014, 20:34

Сейчас думаю, как лучше сделать классы. будет класс Существо, от которого будут наследоваться классы Игрок и Монстр. Но как сделать так, чтобы обобществить часть кода методов у Игрока и Монстра?
Очевиднее всего — написать общий код в методах Существа, а в детях в их методах в какой-то момент вызывать соответствующий родительский метод. Но что-то мне не даёт спокойно так делать (отдельно париться с каждым методом не очень хочется). Можно сделать автоматический вызов родительского метода, но ведь ему нужно будет передавать какие-то параметры…
При этом всём я буду писать одновременно методы игровой механики (в классе "существо" методы будут реализовывать атаку и движение), интерфейса (класс Игрок, впрочем, его можно аккуратно связать с пользовательским интерфейсом), АИ (которое, по идее, реализуется в методе "сделать ход" монстра или методах его наследников). Боюсь, что может получиться каша.
С Наступающим!

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Apromix » 31 дек 2014, 20:44

У меня есть класс TEntity, от которого наследуются TItem и TCreature, и уже от последнего наследуются TEnemy и TPC.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 31 дек 2014, 22:16

Apromix писал(а):У меня есть класс TEntity, от которого наследуются TItem и TCreature, и уже от последнего наследуются TEnemy и TPC.
Отличная мысль. Осталось еще доделать карту (восстановить тот код, что был на ноутбуке), решить, что она должна выводить при обращении типа mapa[x][y] (при генерации карты и расстановке существ оправдано выдавать тип местности (пол, стена), при игре же лучше давать ссылку на объект или список объектов в клетке). Видимо, map после генерации и заполнения стоит переводить в другое состояние, то есть добавить к ней булеву переменную ready.

Profile сделаю как словарь пока, не буду заморачиваться.
Я так понимаю, что интерфейсов в питоне нет, кроме пустых методов с pass?

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 31 дек 2014, 23:22

Написал классы объектов (кроме класса предметов). Теперь раздумываю, как связать их с картой, класс которой ещё не написан, и как связать сами карты, причём класс карт не имеет кода сейчас.
Про связанность карт: на картах будут особые клетки, в которых можно будет перейти на определённую клетку другую карту. Они, кстати, могут реализовываться через тот же подкласс класса Entity (который уже стоит называть классом Placeholder).
Также на картах будут различные существа, причём стоит сделать принципиальную наличие возможность наличия нескольких существ на одной клетке.
Интерфейс для этого будет таким: несколько методов, выводящих список предметов, список монстров и список порталов на указанной клетке.
Самый простой способ это реализовать — хранить в карте ещё и какое-то подобие двумерных словарей (двумерные списки на это тратить как-то не хочется), в котором соответствующие элементы будут иметь значения элементов списка. Они все тоже будут являться объектом класса, скажем, Map_mask.

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Apromix » 01 янв 2015, 04:28

Tookser писал(а):Также на картах будут различные существа
:lol:
Tookser писал(а):причём стоит сделать принципиальную наличие возможность наличия нескольких существ на одной клетке.
Кто знает как лучше. У меня в классе TEntity есть такая возможность, но если для предметов такая штука гуд, то вот для существ имхо не гуд. В первых версиях AtarRL враги забегали прямо на PC :lol: Ладно, в классе TPC отключил такую возможность. Но у врагов осталась возможность складываться в стаки и тогда не видно по полоскам здоровья, как происходит бой (только самый верхний враг в стаке отображается, а допустим за все время боя по нему ни разу не попали, кажется будто PC постоянно мажет). Для такого случая нужен необычный интерфейс, как, скажем, для нескольких предметов на одном тайле, тут хорошо стоит подумать :D Подумал. Со стороны играбельности у PC меньше возможностей для маневра. Ну стоит игрок в узкой пещере, но все 12 врагов его лупят, хотя по правильному должен только первый ближнего боя и юниты дист. боя (в зависимости от их дистанции и умений), если они есть. У PC больше шансов выжить. Вобщем заблокировал эту возможность в классе TCreature. Теперь в одном тайле только одно существо.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 01 янв 2015, 04:57

Я решил эту проблему с интерфейсом заранее, а вот по теме не совсем понятно: это в классе определялось, сколько экземпляров класса данного может быть на одной клетке? Если да, то каким образом. Примерно понимаю (в проверках_клетки_на_пустоту_для_данного_существа).
Я думаю делать эту способность разной для разных существ, к примеру маленькие гномы будут занимать 1 единицу места на клетке, человек 3, а всего места 5. Можно добавить возможность затаптывать и толкаться, но это уже опционально.
Мои классы слишком разрастутся: класс Map будет содержать все способы генерации карты, и это будет как-то нехорошо. Хотя с точки зрения сложности программы это не будет плохо, т.к. все они будут делать примерно одно и то же (создавать карту некоторого размера).

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Apromix » 01 янв 2015, 09:40

Tookser писал(а):а вот по теме не совсем понятно: это в классе определялось, сколько экземпляров класса данного может быть на одной клетке? Если да, то каким образом. Примерно понимаю (в проверках_клетки_на_пустоту_для_данного_существа).
Есть массив из существ. И класс для работы с этим массивом. В нем куча методов для разных ситуаций. Один из методов определяет, находится ли юнит в тайле. Вроде все просто.
Tookser писал(а):Я думаю делать эту способность разной для разных существ, к примеру маленькие гномы будут занимать 1 единицу места на клетке, человек 3, а всего места 5. Можно добавить возможность затаптывать и толкаться, но это уже опционально.
Интерессно было бы взглянуть :)

Аватара пользователя
Oreyn
Сообщения: 297
Зарегистрирован: 07 авг 2013, 14:59

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Oreyn » 01 янв 2015, 10:22

По системе тайминга - бинарная куча для реализации приоритетной очереди, то что нужно. После хода объект возвращает задержку на которую нужно понизить его приоритет.
Написал классы объектов (кроме класса предметов). Теперь раздумываю, как связать их с картой, класс которой ещё не написан, и как связать сами карты, причём класс карт не имеет кода сейчас.
Иерархически. Структура dungeon владеет мапами. Мапы владеют кричами и предметами на ней. Мапа может сказать есть ли моб/предмет в тайле, и сколько их там (хотя как по мне несколько юнитов в клетке идея так себе, в Инкуршене видел реализацию - не понравилось). Дропаешь мапу, и автоматом с нее стряхиваются все завязанные объекты. Хотя я не знаю как там в питоне с управлением памятью.

По структуре, я разделял моба, АИ и интерфейс игрока. То есть и собачка и мобы - это один и тот же объект моб, в моем представлении что фишки на карте настольной игры. А вот управляющие модули, которые заставляют эти фишки двигаться - АИ и интерфейс игрока уже разные объекты из одной цепочки наследования от управляющего модуля. Они же (контролирующие модули) находятся в очереди ходов, а не мобы (фишки на карте).
Удобно тем, что всякие майнд контроли, берсеркеры и прочие изменения поведения вызываются временной/постоянной заменой контролирующего модуля для моба. Плюс декомпозируется ворох методов между мобом и АИ. Моб забирает к себе примитивы типа атаки или передвижения на одну клетку. АИ берет более сложные типа поиска пути и конечного автомата для текущего режима (преследование цели, сон, побег).
Мои классы слишком разрастутся: класс Map будет содержать все способы генерации карты, и это будет как-то нехорошо.
Раздели их. Мапу и генератор. Мапа владеет объектами и может ответить кто/где и сколько. Генератор рисует мапу.

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

Re: Ещё один проект рогалика на Python:заметки, вопросы, иде

Сообщение Tookser » 01 янв 2015, 11:16

Спасибо за развёрнутый и полезный ответ.
Систему тайминга так и сделаю рано или поздно (только, возможно, в куче будут сами мобы, но это детали). То, что там будет храниться, всегда называл "временем ближайшего хода", хотя возможно сделать это понятие бессмысленным (к примеру, рогалик с разной скоростью течения времени в разных клетках… хорошая идея же).
Первое примерно так и собираюсь сделать, только нужно поаккуратней записать, как именно хранить мобов и предметы. Я бы предпочёл в двумерном словаре, но тогда теряется возможность быстрого получения списка всех плейсхолдеров (с другой стороны, она не нужна).
Вот про разделение управляющего модуля и остального почему-то хочется спорить. Чем будет хорошо это разделение? Если сделать просто функцию turn, делающую ход на основе окружения моба и его состояния, вызывающую более примитивные функции
Майндконтролы также делаются в питоне подменой соответствующей функции turn у моба, в нём можно, если не ошибаюсь, заменять функции у объекта.

Согласен с разделением карты и генератора. Генератор будет генерировать карту, ставить места для порталов, а потом его можно будет преобразовать в игровую карту (лучше генератор, на мой взгляд, делать тоже объектом), которую соединять с другими посредством "порталов".

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 28 гостей