ПРОЕКТ ЗЕРКАЛО-44

Манифест  


 Манифест
 Дизайн -
  документ
 CVS
 Горизонты
 Форум
 Файлы
 Ссылки
 Команда
 История
 Архив



Объектно-ориентированная стратегия

Предисловие: эта идея родилась у меня давно, году эдак в 97. Идея идеей,
но реализовать у меня её в одиночку не получится, да и не игровой писатель я
(скорее игратель ;). Рассылал этот текст в разные конторы, пишушие игры,
на конференции, все говорят "Круто!..." и молчок. А жаль.
Может Вас этот текст на что-нибудь подвигнет?...

Написано 4 июля 1999 года...

     Все наверно устали сражаться с тупыми врагами. Которые берут не уменьем, но числом. Валят на твою базу и только успеваешь отстраиваться, потом вычисляешь направление (сэйвом или, если не сильно порепали, то на живую), ставишь несколько башен и забываешь про врагов. До той поры когда есть уже силы для атаки. Тогда придется выдерживать первый ответный удар всех вражеских солдат/техники при подходе к их базе, а потом зачищать территорию от зданий, если их нельзя захватить. Или придется продираться через узкие тропинки с несколькими вражескими далеко бьющими ракетницами/пушками по ту сторону. Главное как можно ближе подойти и уничтожить их, а на подвижные установки навалиться потом. А чего стоит тактика выманивания врага, которая есть, по-моему, во всех игрушках!
     В итоге практически все игры превращаются в одну с вариациями насчет фабулы игрового мира, сюжета, типов вооружений и способами добычи ресурсов. Или взять другую сторону медали. Вспомните сколько раз вы ругались на свои юниты, которые после марша на другой конец карты становятся как встанется и ждут как дураки пока их поодиночке уничтожат. Приходится вести их самому, постоянно возвращаясь к базе, дабы подтягивать вновь рожденных и следя за перемещением вражеских самолетов. Интересно, но однообразно. Да и в конце концов среди своих типов установок всегда можно выделить пару-другую любимых (мощных и подвижных) и ходить на войну с ними. А разведка территории? Или нудно водить разведчика вручную по карте и жалеть время или наплодить их штук десять и разослать их во все концы умирать, а потом пытаться угадать «А что там, за этими черными полосами на карте? Есть ли спайс?»
     Все эти мысли долго зрели в моей голове и вызрели вот в такую идею, на которую немалый отпечаток наложила моя профессия . Однажды едучи в автобусе и глядя на встречный автотранспорт я подумал : «А почему бы не написать игру, в которой можно было бы запрограммировать поведение техники? Применяя любимый объектно-ориентированный подход?»
     И вот что придумалось.
     Любой юнит это объект. Есть некий набор событий, случающийся с ним (прямое попадание в корпус, появление врага в поле видимости, приказы от командования). У юнита есть набор действий, которыми он может отзываться на эти внешние раздражители (выстрелить во врага, маневрировать) и набор данных о местности (проходимые участки, наличие соседей). Теперь нужна программа действий юнита. Пусть ее пишет игрок. Пусть тренирует свои юниты (отлаживает код) перед боем на полигоне. Пусть связывает юниты посредством сообщений (эквивалент человеческому «Коля, держи этих двоих, пока я третьего достану!»), пусть вырабатывает ему удобную тактику поведения юнитов (на марше, в обороне, в атаке). Пусть НАУЧИТ своих солдат как надо воевать.
     Идем по объектно-ориентированной спирали дальше. В принципе группа юнитов - это тоже объект. Похожие внешние раздражители (танки справа!), есть набор откликов на них (за нами Москва!) и информация о поле боя (по оврагу, гады, ползут!). Возникает понятие - боевое соединение-юнит, что находит аналогию в реальной жизни (взвод, рота, полк), причем соединение из разнородных боевых единиц, поддерживающих друг друга. Пусть можно запрограммировать и его поведение. На марше идти сплоченной группой, при появлении противника доложить командованию, развернуться в боевой порядок (как достали эти неожиданно выползающие сбоку танки!) и держаться до подхода подкрепления или отступить на выгодную позицию. В атаке пусть мелкие юниты отвлекают противника, а крупные вместе выносят самых докучливых врагов. В обороне не удаляться далеко от собственной базы и не пускать противника на территорию оной. Сказка?
     Поднимемся еще на виток вверх. База со всеми ее постройками и техникой - тоже объект. Есть набор событий - враги на подступах, заканчиваются ресурсы, сильные потери на северо-востоке. Есть набор откликов - послать подкрепление, выслать сначала разведчика, а затем добывалку с охраной. Есть информация о карте. И эту армию тоже можно научить (запрограммировать) вести себя правильно или хотя бы с неплохой тактикой. Например, не лезть напролом, а вычислить тонкое место в обороне противника и прорвать это его место к черту напополам. Не оставлять юниты одинокими в поле. Врагу устраивать ловушки и наваливаться с флангов. Производить юниты в соответствии с тактической обстановкой. Искусственный интеллект своими руками.
     Теперь замкнем спираль. Такая обученная армия и есть желанный УМНЫЙ враг. Тот, которого нельзя выманить одним солдатом к неприметной группе танков. Тот, который не будет закрашивать дорогу к своей базе горелыми пятнами остовов своей техники. Тот, который стартует карту со сравнимыми с вашими ресурсами. Который даже может учится на своих ошибках (есть такая теория автоматов и теория нейронных сетей) Которого можно победить с уважением к его способностям. И, конечно же, такая армия и есть ВАША армия, которую вы долго тренировали на полигонах и учениях, что бы достойно порвать противника как грелку.
     Замечание от 19.02.03: текст, выделенный таким цветом уже значительно переработан - смотрите диз-док
     Теперь вкратце о придуманной фабуле игрового мира. Карты генерятся псевдослучайным генератором из одного числа, то есть каждая карта имеет свой уникальный номер. Строения базы вырождаются до одного типа, условно - seed (яйцо, зародыш), которое может добывать ресурс (он один для упрощения, пусть радиоактивные минералы) и производить боевые единицы и себе подобные комплексы для развития мощностей. Не вооружен, но защищен. Броня не полевая, а железная, накапливающая повреждения, так что его нужно беречь. Может перемещаться, но медленно (большой он очень). Хранит основную программу поведения армии, с уничтожением последнего seed армия превращается в праздно шатающуюся толпу автоматов. Ресурсы точечные (битва за кормушку) или распределенные (битва за урожай) Боевые юниты - естественно роботы (а кто же еще может управляться программами?) И самое интересное: видов автоматов нет вообще! Есть как бы конструктор: шасси, реактор, оружие, защита и радар (помните проектирование кораблей в МастерОфОрион-2 ? вот что-то наподобие). Так что можно спроектировать юнит в зависимости от боевой обстановки и имеющихся ресурсов.
     Шасси (или корпус) - это гравицапа, несущая все остальное. Есть минимальная масса шасси (иначе компы просто не потянут), максимальной нет (строить так строить! И назовем его Миротворец :))) и изменятся может линейно. Корпусов несколько типо-размеров (плоский, высокий, удлиненный, etc.), каждый имеет свою мощность двигателя, пропорциональную массе корпуса. Скорость автомата, соответственно, зависит (линейно или с насыщением) от массы робота.
     Реактор - основной поставщик энергии. Работает на быстрых нейтронах или на медленных кварках (как придумается) автономен и составляет основную массу робота. От мощности реактора, пропорциональную его массе, зависит мощность вооружения, брони и радара (шасси забирает заранее заданную долю).
     Оружие - два типа: пушка (лазерная или просто пушка) и ракетница; отбирают среднюю долю мощности реактора и имеют среднюю массу. Мощная пушка тяжелее и потребляет больше энергии, стрельбу можно вести с движения. Ракетниц можно установить до трех, ракеты самонаводящиеся в зоне действия радара робота, далее по прямой, стрелять могут только с коротких остановок. Общее правило для обоих видов оружия на этапе проектирования: дальность выстрела + сила взрыва = забираемая мощность оружия.
     Защита полевая, самовостанавливается со временем, генератор защитного поля тяжел и берет среднее количество энергии. С пробоем защитного поля кончается и похождения юнита.
     Радар весит не много, но потребляет много энергии, радиус действия пропорционален мощности. Юнит может вести прицельную стрельбу только в зоне действия радара, если нет целеуказания от других юнитов, ну и соответственно так же видит местность (можно опять пропорционально: видит на 100%, прицельно бьет на 80%).

     Из этих деталей можно делать все что угодно. Хотите защитную башню? Пожалуйста, берем шасси, на него навороченную пушку/ракетницу, радар и толстую броню. Медленно двигается, зато хорошо стреляет. Хотите разведчика? Шасси, радар и небольшая защита. Быстро, недолговечно, но свое дело знает. Хотите танк? Шасси, броня и пушка. Гвардия прорыва. И не забывайте что это все умное, и не полезет в одиночку на вражескую базу искать упоения в буре огня. Можно еще придумывать детали (остатки роботов являются ресурсами, скорострельность вооружения, управляемость роботов при наличии перекрытия зон действий радаров, летающие юниты, скорость в зависимости от типа местности), но я думаю основная идея ясна.
     А теперь можно немного помечтать. Вы выходите на сервер в Интернете, откуда скачиваете себе врага, то есть наученную другим геймером армию в виде алгоритма развития и программ функционирования юнитов и армий. Выбираете карту и вперед, победа будет за нами! Если не получается с n-ного раза (а вдруг? ;), ищите на том же сервере другую армию, немного затачиваете ее под себя, тренируете на полигоне и таки разбиваете противника в пух и прах. О чем с удовольствием сообщаете программеру армии. Если вам понравилось какая у вас получилась армия - выкладывайте на тот же сервер с просьбой «пользователям» сообщать об ошибках и пожеланиях. Читая журналы об играх, постоянно наталкиваешься на сетования разработчиков на сложность разработки ИИ. Так отдайте свои идеи в рост на Интернет, через год, я думаю появится из чего выбирать! Так же можно скачать себе несколько армий и запустить биться самих с собой, наблюдая за развитием и удивляясь неожиданным ходам играющих (во дураки-то!). Или создадим некий мир с планетами и секторами на них, пусть желающие размещают там свои армии и пусть эти предварительно обученные армии (быть может с самообучающимся ИИ в качестве начинки) воюют за виртуальное пространство (помните, у Станислава Лема есть такой роман - Мир на земле?). Но это уже отдаленные грезы ...

     Дальше идет самокритика с попытками оправдаться.

  •      Быстродействие. Да, на первых порах наши старые компы с пламенным Pentium’ом вместо сердца будут захлебываться, пытаясь просчитать поведение тысячи юнитов в реальном режиме времени, одновременно прорисовывая взрывы и пожары. Но ведь не обязательно делать очень реалистичной графику (пока) и позволять командармам писать программы действий по 10 000 строк. Опять же можно прекомпилировать эти программы в байт-код. Да и через год выйдет какой-нибудь Pentium XXX, а Pentium II будет стоить 50$
  •      Необходимость знания программирования простому геймеру. А вот здесь вы не правы. Программы действий пусть пишут немногие, наподобие меня и разработчиков. А остальные могут их просто доделывать с помощью удобного интерфейса а-ля стрелочки и кружочки. Можно выбрать язык программирования из наиболее распространенных. Этим же можно привлечь продавцов/разработчиков этих языков и дать возможность желающим выучить профессиональный язык в игровой форме. Наверняка это будет сильный ход. Но эта тема отдельного разговора, разговора о стратегии продвижения игры.

     Такая вот идея. Родилась она достаточно давно, вначале в качестве мечты, а потом я подумал - а почему бы? Может какой-нить русский производитель игр возьмется. Одно пожелание - укажите меня в качестве автора идеи (то есть я претендую ТОЛЬКО на авторство, не на "процент с продаж"). А можно и на пол-ставки. Или какая-нить группа волонтеров-гэйммэйкеров ищет свежие идеи и партнера. Напишите письмо, пообщаемся.



изменено 15.02.06

Hosted by uCoz