Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет scaven ([info]scaven)
@ 2015-08-18 23:17:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Музыка: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