Custom player controller for Warcraft 3

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


Просмотров: 345

» Лучшие комментарии


Clamp #1 - 3 месяца назад 3
Недавно пообщался с одним чуваком, и в разговоре выяснилось, что его зовут Гора Комментов. Больше как-то не связывались, и я хз, где он сейчас, но уверен, что на этом сайте его найти не получится при всём желании
alexprey #2 - 3 месяца назад 0
Просто не осталось здесь таких же азартный гуру jass кода, которым не лень скачать и посмотреть что там внутри.
NekoriDes #4 - 3 месяца назад 2
окей, буду текстом код закидывать
Вполне здравая мысль же, кидай под кат код. Считаю это внегласным правилом.
Алсо, у тебя файл убежал.
ZlaYa1000 #6 - 3 месяца назад 0
так назад верни, быстро)
а гора комментов потому что наработка в аду с точки зрения навигации
вот невнятные модельки сотнями комментируют
Clamp #7 - 3 месяца назад 0
ZlaYa1000, отрефакторю и закину обратно, да. Сейчас душа лежит героя допилить =)
prog #8 - 3 месяца назад 2
а гора комментов потому что наработка в аду с точки зрения навигации
Ну я вот почитал, посмотрел, файла не увидел, кода не увидел, подумал "о, да я же делал такое в своей недоделаной карте, только дамы легкого поведения иначе одеты были" и прошел мимо т.к. мне это уже давно не интересно, максимум любопытно было глянуть насколько отличается от моей давней реализации. А сколько нибудь интересного срача диалога здесь не предвидится т.к. школоте это не нужно в виду сложности сабжа, а все остальные и сами в состоянии свою альтернативу сварганить, если бы им это было нужно.
Clamp #9 - 3 месяца назад 0
Вот это версия, которую я заливал. Она хорошо инкапсулирована и, хотя и рассчитана на строго определённую архитектуру карты (глобальный таймер, запускающий поток обработки игры N раз в секунду), показала себя достойно.
Сейчас сильно перепилил, всё красиво делаю, без костылей и с максимально адекватной логикой внутри самой системы. В свободное время учусь прогать таким изощрённым образом =)
прикреплены файлы
prog #10 - 3 месяца назад 6
В свободное время учусь прогать таким изощрённым образом =)
Сверлильщик зубов дракона через задний проход, третьего разряда.
Clamp #11 - 3 месяца назад (отредактировано ) 0
prog, так нет же. Если глянуть на мой код, то там из нативных типов используются только int, float, bool, string, timer, trigger, причём таймер единожды для всей карты, а триггеры только для чтения инпата юзеров. Всё взаимодействие с UI, где невозможно обойтись без хендлов, инкапсулировано в максимально компактные библиотеки, которые работают через абсолютно адекватное API.

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

Ну а так да, конкретно этот кусок - велосипед.
prog #12 - 3 месяца назад 0
Clamp, полноценного ООП в джасе не запилить, только ООП-подобные костыли. Опыт по поведению конкретных движков и компиляторов, порой весьма своенравных, тоже не получить.
Clamp #13 - 3 месяца назад 0
prog, а кто сказал, что во главе угла должно стоять ООП?
Кроме того, независимо от внутренней логики работы vJass написанные на нём объектные модели работают адекватно, хотя и имеют некоторые ограничения в реализации. Почему бы и не считать это нормальным ООП? Темплейтов нету?
prog #14 - 3 месяца назад (отредактировано ) 0
Почему бы и не считать это нормальным ООП? Темплейтов нету?
Полиморфизм, явный и неявный тайпкастинг, интерфейсы, абстрактные классы?
Clamp #15 - 3 месяца назад (отредактировано ) 0
Полиморфизм
» раскрыть
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.

интерфейсы

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

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

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

Относительную универсальность алгоритмов, паттернов и наборов принципов вроде SOLID и GRASP никто оспаривать не собирается, я говорю исключительно об эффективности использования времени в ходе практической реализации алгоритма.
Clamp #19 - 3 месяца назад 2
prog, написание на Jass доставляет мне некое удовольствие, хотя я даже не могу описать его причину :3
Одним из его аспектов является то, что весь код я пишу в Sublime Text 3, и почти всегда при переносе в редактор всё компилится с первой попытки. Как по мне, так это дорогого стоит!
prog #20 - 3 месяца назад 0
Clamp, каждый волен делать со своим временем что ему заблагорассудится, я просто объяснял свою точку зрения - почему я считаю это занятие достойным третьего трудового разряда по сверлению зубов дракона через его же анус.