Pull to refresh

Как WarCraft 3 помог мне в программировании

Reading time4 min
Views25K
Доброго времени суток, уважаемые читатели. В этой статье я хотел бы поделиться историей о том, как известная всем компьютерная игра WarCraft 3 помогла мне в изучении программирования. Сразу хочу сказать, что я ни в коем случае не призываю никого повторять мой путь и начинать изучение программирования с этой игры. Просто так сложилось, что после того, как я пристрастился к созданию пользовательских сценариев для этой игры, дальнейшее обучение программированию (в школе и университете) давалось мне с невероятной легкостью.

Всем, кто заинтересовался, добро пожаловать под кат.

Перед тем, как начать


Компьютеры мне были интересны с детства. К сожалению, свой у меня появился довольно поздно, а все, что у меня было до этого — старенький компьютер с Бейсиком в местном радиокружке, куда я был записан, а также походы с друзьями в компьютерные кафе, где мы играли в уже упомянутый WarCraft 3. Наконец мечта сбылась — в восьмом классе у меня появился компьютер. Конечно, первое, что я сделал — тут же побежал к другу за диском с третьим WarCraft-ом. За установкой последовали несколько дней прохождений кампаний, сражений за орков, альянс, ночных эльфов и нежить. Также я опробовал множество карт, которые записал на тот же диск тот же друг. Уже тогда я удивился, как много всего можно сотворить на движке этой замечательной игры. Вскоре сражения мне надоели, и я, как любопытный восьмиклассник, пошел рыться в папках на жестком диске.

Когда я открыл папку с WarCraft 3, мое внимание привлекла иконка файла с названием «World Editor.exe». С замиранием сердца я сделал двойной щелчок по ней. Запуск этой программы изменил мое будущее.

Знакомство с интерфейсом


image

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

image

Триггеры с GUI


Скрипт карты состоит из т. н. триггеров, каждый из которых имеет три части — события, условия и действия. В каждую из частей можно добавлять пункты, щелкая соответвтующую кнопку. Нетрудно догадаться, что при указанном событии в игре и выполнении указанных условий, будут выполнены указанные действия. С помощью довольно удобного GUI можно настраивать эти самые события, условия и действия так, как нужно создателю карты. Так как игра была мне очень интересна, я опять начал играться со всем этим, незаметно для себя усвоив понятия циклов, ветвлений и т. п. Затем мне понадобилось как-то сохранять юнитов между триггерами, чтобы при определенных событиях действия происходили с нужными мне юнитами. Я нашел редактор переменных.

image

Здесь я обнаружил, что сохранять можно не только юнитов, а практически все что угодно — числа, строки, способности, события, спецэффекты, игроков, баффы, точки на карте и много чего еще. Можно хранить нужные объекты в массивах — я сразу подумал, что очень удобно хранить героя для каждого игрока в массиве, ведь номер игрока будет соответствовать индексу его героя в массиве. Ну вот, опять-таки незаметно для себя, я узнал, что представляет из себя переменная и ее тип, что такое массив, как и когда его можно использовать.

Открыв редактор объектов, я обнаружил инструмент для изменения и создания новых воинов, способностей, баффов, декораций и предметов. Конечно, назначение большинства харктеристик объектов для меня было непонятным, тем более что перевод некоторых из них с английского оставляет желать лучшего.

Что было дальше


Набравшись энтузиазма, я тут же захотел сделать что-нибудь свое. За несколько дней я сделал карту а-ля «три коридора». Почти все герои там были стандартными, так как меня больше интересовала скриптовая часть — я сделал популярную в то время «систему выбора героя светлячком», неуязвимость башен, пока не будет разрушена башня более нижнего уровня (кто играл в популярную карту Dota Allstars, тот поймет), усиление крипов с течением игры, а также случайное появление бонусов в виде рун или предметов в случайных местах. Так как интернета не было, развлекать себя приходилось понаставив героев противника на всех линиях и периодически заставляя их кастовать заклинания. Это, конечно, не ИИ, но добавляло хоть какого-то интереса)

Как мне это помогло


В следующем году в школе мы начали изучать программирование. Языком для изучения был Паскаль. Уроки с изучением переменных, условий, циклов и массивов казались мне скучными — я все это уже знал, оставалось лишь запомнить синтаксис и названия встроенных функций. А программировать юнитов, предметы и заклинания было гораздо интереснее, чем глядеть на скучную черно-белую консоль. Все задания делались с легкостью, за пару минут, я делал их половине класса. Учитель, заметив это, предложил задания посложнее, с которыми я тоже с легкостью справился. В результате я отправился защищать честь школы на городской олимпиаде, где занял первое место. Затем отправился на республиканскую, где занял, если мне не изменяет память, 15-е место из 200. Неплохой результат, особенно если учесть, что я отправился туда вообще без подготовки.

Это еще не все


Вскоре у меня появился интернет. Я получил доступ к огромному числу ресурсов, посвященных созданию карт для WarCraft 3. Я пробовал сделать простенькие 3D-модельки и вставлять их в карту, рисовать иконки для заклинаний и предметов, открывал другие незащищенные карты и смотрел, как там все реализовано.

Делать сценарии, щелкая на кнопки стало скучно, хотелось сделать что-то более «программистское», и я узнал, что эти GUI-шные формы — всего лишь оболочка для скриптового языка JASS, который открывает более широкие возможности перед разработчиком карт. Создание различных систем, заклинаний, спецэффектов — все это превратилось в сказку, а я еще больше заинтересовался программированием. Но о JASS я хотел бы рассказать в отдельной статье.

Про создание пользовательских карт для WarCraft 3 можно говорить очень много. Оно включает в себя много аспектов от создания красивого ландшафта, рисования иконок и создания моделек до написания систем и защиты готовой карты от открытия, что позволяет людям, заинтересовавшимся в этом, получить опыт в различных областях: 3D-моделировании и анимировании, ландшафтном дизайне (смешно звучит), программировании, рисовании, тестировании (да, карты ведь тоже нужно тестировать).

Сейчас я учусь на четвертом курсе в университете и увлекаюсь программированием. В университете потрогал Delphi и Visual Basic, затем Java, теперь трогаю Си. Все ЯП которые я изучал, давались мне с легкостью. Спасибо, WarCraft 3.
Tags:
Hubs:
Total votes 122: ↑88 and ↓34+54
Comments67

Articles