Добавлен , опубликован
Карта, демонстрирующая реализацию кастомного управления для варкрафта (aka "как в TcX", лол). Для запуска вполне хватит обычного JNGP с включённымы JassHelper'ом и cJass (без оптимизации скрипта карты).
Запускаем, жмём ESC, тыкаем мышкой, тестируем. Геймплея в карте нет, только демонстрация управления.
Если у кого-нибудь есть возможность протестировать по сети - будет круто, напишите в ЛС/тему, и я закину тест-кейсов.
Да-да, код выглядит ужасно и всё такое. Потом почищу, наверное.
Для того, чтобы всё было красиво, нужно ещё интерфейс заменить.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
24
а гора комментов потому что наработка в аду с точки зрения навигации
Ну я вот почитал, посмотрел, файла не увидел, кода не увидел, подумал "о, да я же делал такое в своей недоделаной карте, только дамы легкого поведения иначе одеты были" и прошел мимо т.к. мне это уже давно не интересно, максимум любопытно было глянуть насколько отличается от моей давней реализации. А сколько нибудь интересного срача диалога здесь не предвидится т.к. школоте это не нужно в виду сложности сабжа, а все остальные и сами в состоянии свою альтернативу сварганить, если бы им это было нужно.
30
Вот это версия, которую я заливал. Она хорошо инкапсулирована и, хотя и рассчитана на строго определённую архитектуру карты (глобальный таймер, запускающий поток обработки игры N раз в секунду), показала себя достойно.
Сейчас сильно перепилил, всё красиво делаю, без костылей и с максимально адекватной логикой внутри самой системы. В свободное время учусь прогать таким изощрённым образом =)
Загруженные файлы
24
В свободное время учусь прогать таким изощрённым образом =)
Сверлильщик зубов дракона через задний проход, третьего разряда.
30
prog, так нет же. Если глянуть на мой код, то там из нативных типов используются только int, float, bool, string, timer, trigger, причём таймер единожды для всей карты, а триггеры только для чтения инпата юзеров. Всё взаимодействие с UI, где невозможно обойтись без хендлов, инкапсулировано в максимально компактные библиотеки, которые работают через абсолютно адекватное API.

В итоге в основной массе логика портируема в тот же юнити с не особо значительными правками, проверял пару раз.

Ну а так да, конкретно этот кусок - велосипед.
24
Clamp, полноценного ООП в джасе не запилить, только ООП-подобные костыли. Опыт по поведению конкретных движков и компиляторов, порой весьма своенравных, тоже не получить.
30
prog, а кто сказал, что во главе угла должно стоять ООП?
Кроме того, независимо от внутренней логики работы vJass написанные на нём объектные модели работают адекватно, хотя и имеют некоторые ограничения в реализации. Почему бы и не считать это нормальным ООП? Темплейтов нету?
24
Почему бы и не считать это нормальным ООП? Темплейтов нету?
Полиморфизм, явный и неявный тайпкастинг, интерфейсы, абстрактные классы?
30
Полиморфизм
раскрыть
type agent  extends handle
type widget extends agent
type unit   extends widget
type item   extends widget
© common.j

// For example
native GetWidgetLife takes widget whichWidget returns real
void foo(unit U, widget W) {
    GetWidgetLife(W);   // Valid usage
    GetWidgetLife(U);   // Valid usage as well 
}
Чем не полиморфизм?
В структурах при использовании наследования можно передавать дочерний тип вместо родительского.

явный и неявный тайпкастинг
Под явный легко ложатся все нативные функции A2B(), кроме того, никто не запрещает писать кастомный функционал приведения типов (I2B(), например). При использовании структур всякие очевидные .toString().
К неявному можно отнести взаимозаменяемость int и float в некоторых ситуациях. При использовании структур vJass они очевидным образом кастятся в int.

интерфейсы

абстрактные классы
Вот с этим довольно туго, надо признать, только интерфейсы
24
Clamp, ок, значит полиморфизм и интерфейсы есть, были с ними проблемы в тех версиях v-jass которые мне на глаза попадались, а потом я забил.
А есть тайпкастинг между структурами, не требующий реализации дополнительных методов? От одного структурного типа к другому, если типы совместимые. С жесткой проверкой совместимости типов, а не через универсальный инт, офк.
Что касается абстрактных классов - не критично, особенно при наличии интерфейсов и возможности по работать напильником.
Да, признаю, какое-никакое подобие ООП в наличии, раньше хуже было.

Но есть же еще вторая часть в моем сообщении, которая о получении специфичного опыта взаимодействия со средой (не в смысле IDE, а в более общем). В невозможном идеале среда обучения на 100% совпадает с будущей средой реального применения - это позволяет использовать весь спектр полученных навыков. На втором месте - разнообразие различных актуальных сред на этапе обучения, что повышает шансы попасть в ситуацию из предыдущего пункта, а также добавляет кучу материала для анализа и сравнения, на чем можно здорово выехать в ряде ситуаций. Ну и только после этого идут специфичные среды вроде вара3, ценность которых именно в специфичности и расширении кругозора.
30
От одного структурного типа к другому, если типы совместимые.
При использовании наследования и при работе с общими интерфейсами так и есть.

о получении специфичного опыта взаимодействия со средой
В целом - да, это справедливое замечание. Тем не менее, мой опыт показал, что алгоритм - вещь платформонезависимая, следовательно, нет никакой разницы, в какой среде алгоритм реализовывать, главное правильно определить уровень абстракции.
Ну и я всё-таки не только в вц что-то делаю, не надо совсем уж так обобщать =(
24
При использовании наследования и при работе с общими интерфейсами так и есть.
В обе стороны?

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