Музыка: | ForeverKid Festiva We Bang Mas |
Entry tags: | dev history |
voyd roug
Внезапно, через 8 лет, духовный последователь scaventure.

рабочее название - vоid rogue (далее vrg).
В этот раз Python вместо C, и спец-библиотека для рогайликов libtcod вместо своих велосипедов.
а так выглядели прошлые достижения:

до них еще не хватает:
- LOS (изи, т.к. есть встроенный в библиотеке)
- памяти о ранее виденных клетках (серые)
- отдельных карт (в scaventure можно было путешествовать по бесконечному кол-ву подземелий через лестницы вверх-вниз)
- генератора подземелий
- и под дос уже не идет =(
А до играбельного состояния - еще в 10 раз больше пунктов..
Зайто! (и на что ушло 80% времени)
1) Это терь клиент-сервер. т.е. вот на скриншоте 2 отдельных процесса подключены к одной игре. Для этого всю разработку пришлось начать с Twisted. Первые 2 месяца были посвящены исключительно ему и попыткам подружить 2 отдельных скрипта по tcp/ip, никаких бегающих собачек и такого.
2) Архитектура стала более лучши!!1 (..вроде?)
причем не эволюционировала от экспы за кол-во загубленных проектов, а от того, что я дофига времени из этих 8 лет потратил на поиски и изучение всяких мудростей про абстрактное (неязыкопривязанное и непарадигмопривязанное) проектирование %)
Работа над scaventure загнулась, когда я решил к нему вернуться в 2008 и понял, что каждая новая строчка увеличивает сложность добавления фич. Ну, когда 1я строчка в проекте занимает 15 секунд, а 20001-я - 15 минут. Как снежный ком.. или как в болото заходить все дальше и дальше. Жесткость, Хрупкость, Монолитность - вот это все.
Долго искал что жи делать и в конце концов дошел до такого
Сейчас архитектура представляет из себя 1) набор уащпе независимых компонентов у которых все вылезающие наружу элементы строго описаны интерфейсами (zope.interfaces), а связка - с помощью dependency injection (или тем, что я под этим понимаю :P). И 2) Несколько composition root (то, что эти компоненты импортит, собирает и инжектит друг в друга), от которых и зависит, что за франкештейн сейчас соберется). Теперь, сложность добавления новых строк не возрастает с нуля, а сразу, с самой первой строчки, начинается под потолком! :D зато надеюсь остается константной
Мб через когданить напишу пост про это все, если подход окажется всетаки адекватным
Главное, эксперименты успешно подтвердили, что замена компонентов с нуля реальна и довольно легко проходит. Н-р, для тестирования компонента ввода-вывода сделал заглушечный контроллер, который симулировал связь с сервером, подставляя заранее подготовленную дату. Все, что было нужно - взять нужный интерфейс, и тупо заполнить описаные методы кодом.
Или, последнее достижение (на которое ушли последние 3 месяца) отделить все компоненты, использующие twisted, и переписать их, чтобы полностью от него избавиться. Основная сложность была в том, что долго не мог придумать, как его выгнать из самой точки сборки. Он там намертво засел в логике, т.к. с twisted все началось, а паттерн reactor (тот же что в qt), имеет тенденцию мгновенно пускать всюду корни. Даже обещал себе что пост напишу, когда сделаю)
Теперь у меня 2 основных composition root`а - один главный, где клиент и сервер общаются друг с другом по tcp/ip посредством twisted (perspective broker), и один чисто синглплеер, где клиент и сервер сцеплены вместе в одно без-twisted-ное целое.
уот так уот
..ну след. пост на эту тему через год, т.к. еще куча подкапотной работы. А еще мне надо за пару месяцев прочитать последнюю (левую) книжку.. при том что на 2 других ушло 5 лет %)
.. я клевый :D