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

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

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

Аватара пользователя
Xecutor
Мастер
Сообщения: 738
Зарегистрирован: 25 мар 2008, 08:32

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

Сообщение Xecutor » 06 янв 2015, 06:45

Главное понимать, что паттерны ООП это скорее примеры удачных решений определённых классов задач, чем строгая рекомендация.
Если паттерн не совсем подходит к твоей задаче - меняй паттерн, а не задачу :)

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

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

Сообщение Apromix » 06 янв 2015, 19:24

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

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

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

Сообщение Tookser » 07 янв 2015, 13:55

Кстати, всё-таки мне кажется более правильным класть в кучу не модули поведения, а тушки (если мы с помощью кучи учитываем то, что каждое действие в игровом мире занимает некоторое время).

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

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

Сообщение Tookser » 07 янв 2015, 16:37

Чувствую,
что правильный дизайн кода
уходит куда-то.


Потратил ещё несколько часов на разработку, а не сделал почти ничего. Совет разнести функции АИ и тушку был верным, классы, реализующие АИ, начинают расти, и удобно добавлять какие-то сенсорные функции не в класс АИ. Написал какие-то методы, даже чуть порефакторил. Почти сделал (ещё не написал Брэхенхема) собак, идущих атаковать игрока когда он близко и видим ими.
Исправил одну достаточно критическую ошибку (связанную с тем, что координаты каждого создания хранятся, по сути, в двух местах — в самом создании и в карте). Последнее немного неприятно, это будет значить, что нужно при каждом изменении координат изменять их и во втором месте. Впрочем, это было исправлено быстро, за 15 минут.
Написал какое-то подобие боевой системы. Ещё точно не решил, что будет в конце, а сейчас — просто нанесение от attack_min до attack_max минус defence защищающегося, и смерть при hp<=0
Понял, что слишком вольно отношусь к защищенным и публичным методам. С одной стороны, почти все методы делаю защищенными, с другой стороны, метод, изменяющий hp, как-то не хочется делать незащищенным, а ему придётся быть таковым.
Обнаружил, что полный алгоритм Брэзенхема в псевдокоде находится не сразу.
Желаемых возможностей слишком много, поэтому стоит написать минимальный диздок (на неделю-две разработки), потом наконец потестить и выбрать путь дальнейшего развития.
Вложения
screen.jpg
screen.jpg (101.98 КБ) 5215 просмотров

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

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

Сообщение Jolly Roger » 07 янв 2015, 17:25

Очень подозрительно выглядят циферки 500 и 50, а также прямое обращение к массиву. [-X
:wink: :wink:
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

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

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

Сообщение Tookser » 07 янв 2015, 17:31

Jolly Roger писал(а):Очень подозрительно выглядят циферки 500 и 50, а также прямое обращение к массиву. [-X
:wink: :wink:
Да, магические числа не есть хорошо, но их исправлю потом. Массив является аргументом той функции, там всё хорошо, но в паре других мест есть прямое обращение к параметру другого объекта.

phomm
Сообщения: 40
Зарегистрирован: 13 сен 2012, 07:14
Контактная информация:

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

Сообщение phomm » 07 янв 2015, 19:48

Tookser писал(а):Да, магические числа не есть хорошо, но их исправлю потом.
"Нет ничего более постоянного, чем временное" ©
Константы спасут ОРД. Их использование требует только придумать имя из накладных расходов. А профитов, типа доступного рефакторинга или даже просто реплейса они дают сразу много, не говоря уж о "шашка +5 читабельности"

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

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

Сообщение Apromix » 07 янв 2015, 23:23

phomm писал(а):Константы спасут ОРД. Их использование требует только придумать имя из накладных расходов. А профитов, типа доступного рефакторинга или даже просто реплейса они дают сразу много, не говоря уж о "шашка +5 читабельности"
Как сказать. Если не заморачиваться на это и просто кодить, то и так сойдет. Лишние телодвижения забирают уйму времени.

Аватара пользователя
Jesus05
Сообщения: 1839
Зарегистрирован: 02 дек 2009, 07:50
Откуда: Норильск, сейчас Санкт-петербург.
Контактная информация:

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

Сообщение Jesus05 » 07 янв 2015, 23:39

Apromix писал(а):
phomm писал(а):Константы спасут ОРД. Их использование требует только придумать имя из накладных расходов. А профитов, типа доступного рефакторинга или даже просто реплейса они дают сразу много, не говоря уж о "шашка +5 читабельности"
Как сказать. Если не заморачиваться на это и просто кодить, то и так сойдет. Лишние телодвижения забирают уйму времени.
проблема возникает не когда кодишь... а когда вспоминаешь "а зачем я это писал? что-же тут должно было происходить, и почему именно здесь портятся какие-то данные... глюк точно здесь, но что-же я хотел сказать этими 500 и 50 :("

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

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

Сообщение Oreyn » 08 янв 2015, 06:52

С одной стороны, почти все методы делаю защищенными, с другой стороны, метод, изменяющий hp, как-то не хочется делать незащищенным, а ему придётся быть таковым.
Уже как-то обсуждали этот вопрос. Вместо прямого доступа к изменению ХП правильней сделать метод типа ReceiveDamage. И он уже посчитает игромеханику и решит понизится ли ХП в результате урона. И он же проверит упало ли ХП ниже нуля и не пора ли сдохнуть мобу. И вызовет все необходимые проверки и последствия в плане игромеханики от получения урона или смерти.
Как сказать. Если не заморачиваться на это и просто кодить, то и так сойдет. Лишние телодвижения забирают уйму времени.
В краткосрочной перспективе сочинение "говорящих имен констант" заберет время. В остальных перспективах - наоборот даст экономию.
Человек который будет потом возвращаться и вспоминать нюансы реализации этого куска алгоритма, чтобы что-то поправить или усовершенствовать, это ты же и будешь.

Я практикую еще в нетривиальных алгоритмах делать блоки комментов с заголовком "Tricky part: " и далее полное и художественное описание хитростей. Так как без этого возврат к этой части кода в последующем выглядит вот так:
- почему я не учел вот это? Вот же где ошибка (правит код)
- стало работать еще хуже.
- снимаем чехлы, заново бороздя пузом все подводные камни
- (прозрение) ааа! Так специально нужно было, чтобы учесть такой-то нюанс! (правит все как было обратно)
- вот теперь уже начинаю искать действительно где ошибка
Желаемых возможностей слишком много, поэтому стоит написать минимальный диздок (на неделю-две разработки), потом наконец потестить и выбрать путь дальнейшего развития.
Очень здравая мысль!

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

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

Сообщение Jolly Roger » 08 янв 2015, 08:53

Oreyn писал(а):
Желаемых возможностей слишком много, поэтому стоит написать минимальный диздок (на неделю-две разработки), потом наконец потестить и выбрать путь дальнейшего развития.
Очень здравая мысль!
Это
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.
Как и использование констант в рогдеве, чаще всего, это приходит с неприятным опытом. :wink:
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

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

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

Сообщение Tookser » 09 янв 2015, 19:24

Начал писать диздок на пару недель. Боюсь, что его написание продлится столько же. Из нового: прочитал пару статей по рогаликостроительству— научился думать о последствиях каждой фичи (вроде отношения трудозатрат к используемости в игре, рутинности, возможных имбалансах, хоть с этим пока и плохо по причинам отсутствия баланса) придумал вроде основы для системы боёвки, причём систему нанесения урона менять пока неинтересно и вроде бы ненужно. Ещё задумался о том, что вовсе необязательно делать условием выигрыша такие банальные вещи как "пройти до конца", "убить всех"…

Думаю, обязательно стоит:
Реализовать в базовом виде переходы между уровнями, причём ИИ работать с ними адекватно начнёт не сразу, но это уже дело будущего.
Допилить ИИ хоть немного.
Сделать интерфейс для отладки и тестирования. Пока без всяких вытребенек, чистый ASCI. Бегающая собака :)
Разобраться со своими другими делами, отвлекающими от рогаликодельства.
Реализовать одну из тех_самых фич, которые несложны, в базовом и расширяемом варианте.

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

Реализовать более трудоёмкую фичу, хотя она то и не так сложна.
Запилить боевой движок полностью (насколько я его сейчас вижу), с возможностью расширения.


А сейчас, когда не программирую, хочется размышлять над концепцией игры. Хотя бы над тем, стоит ли делать игру одинаково сложной для всех доступных персонажей. И какими будут уровни, большими или маленькими, и насколько свободно они будут генерироваться, и как будет сделана шкала опыта (не хотелось бы манчкинства, а это будет значить, что нужно делать какие-то ограничения на респаун/получаемый опыт/максимальный уровень игрока). Не будет ли игра скучной из-за тех классных фич, которые могут надоесть при повторном использовании.
Такое ощущение, что, может быть, стоит сделать рогалик со многими паралелльными ветками игры: одна ветка - манчкинство, другая — территории и исследование их (с привкусом MUDа), третья — одна из тех фич, которые уже кажутся не главными для рогалика. Но как тогда делать прокачку и прочее, если части будут независимыми? Либо игра распадётся на несколько миров, для каждого из которых нужен свой персонаж (и это не худший вариант), либо будет тяжело балансировать уровни, если персонаж на эти ветки игры будет один.

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

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

Сообщение Tookser » 16 янв 2015, 21:33

Чуть-чуть порефакторил, немного разбил исходный файл на файлы поменьше, убрал "магические константы". Написал маленький конкретный план, описывающий ближайшую разработку. Почти реализовал ботов, движущихся в направлении игрока и бьющих его (нужно лишь добавить реализацию алгоритма Брезенхема).
На очереди - порталы, более сложное поведение ботов, нормальная генерация карты (в основном все-таки расстановка ботов - имеющиеся функции могут это делать, но требуют много аргументов, т.е. лучше сделать обёртку над ними).
Функции общего характера (вроде алгоритма Брезенхема и ему подобных), думаю, стоит вынести в отдельный модуль, и не делать их ничьими методами, т.к. как методы они не смотрятся.
P.S. Появилась небольшая идейка: на небоевых локациях сделать возможность упрощённого управления (нажмите "1" чтобы идти в магазин, нажмите "2" чтобы выйти из города…), обрабатываемое по-настоящему (на время игрок заменяется ботом, который идёт в магазин/…). Это может частично решить проблему "больших неинтересных локаций". В том или ином виде это есть много где (автоматическое исследование подземелья, возможность направить персонажа к известной ему лестнице и т.д.). В более общем случае это можно сделать как режим глобальной карты в Fallout (но опять же, с честным обсчитыванием всего, хотя на глобальной карте можно и использовать что-то статистическое).

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

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

Сообщение Oreyn » 17 янв 2015, 14:06

С автопилотом хороша идея на уровне когда у тебя вся остальная рутина вроде магазинов и прочих ништяков небоевых локаций уже готова.
И это если во время автопилотирования с тобой случится что может, что потребует включение прямого управления от игрока. Иначе рутина та же наблюдать как собачка пилит в магазин, проще сразу сделать вход в интерфейс магазина по кнопке.

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

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

Сообщение Tookser » 21 янв 2015, 01:52

Чуть-чуть рефакторю, нашёл и вставил Брезенхема, делаю порталы.
Я тут подумал, ведь с текущей системой времени (тушки вызываются по очереди, спрашивают у их ИИ свой ход и делают его мгновенно, ждут кулдаун) может случиться так, что NPC не заметит игрока, прошедшего мимо него в его радиусе видимости. Вряд ли это создаст много проблем (до появления долгих действий).
UPD: сделал простой, но уже адекватный ИИ полностью (идёт к игроку и бьёт его). Сделал порталы (лестницы и собственно порталы). Думаю, стоит сделать простенький интерфейс (вывод карты и ввод команды), чтобы было что-то играбельное. И, наконец, придумать где позапускать, а то отлаживать на устаревшем питоне не хочется.

Python 2.7 или Python 3?
В пользу 2.7:
  • Популярней.
    Знаком с ним.
    Код уже пишется под 2.7
В пользу 3:
  • Проще поддерживает юникод.
Не вижу пока причин выбирать 3.

UPD2: С удивлением понял, что одна важная часть игры ещё не сделана, и доделал её. По идее, если всё работает, то, может быть, демка игры уже есть. Стоит разнести класс Game и интерфейс пользователя, а может и не стоит. Сейчас напишу простейшую визуализацию карты.

Ответить

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

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