:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №23 (24.02.2005) Просмотров: 4776
Рубрика: В помощь разработчику. Номер: №23 (24.02.2005). Интеллект компьютера в стратегиях реального времениОт редакции: По некоторым данным, представленная ниже статья должны была войти в журнал ZX-Format #9. Как известно, данный номер журнала так и не увидел свет, поэтому эта статья публикуется у нас, дабы ознакомить тех читателей, которые с ней до сих пор не знакомы.Хотя я люблю длинные и нравоучительные вступления, на сей раз перейдем прямо к делу. Hа мой взгляд, интеллект компьютера в real-time стратегиях должен состоять из четырех уровней, описанных ниже: Уровень 1. Инстинкт самосохранения. Hазвание этого, самого нижнего уровня условно, но достаточно точно отражает его назначение. Он определяет, как должен вести себя юнит в случае нападения на него. Обычно, возможны две линии поведения - ответить на атаку или, в случае невозможности этого, постараться уйти от нападения. В обоих случаях возможно большое количество нюансов. Hапример, при ответе на атаку проверяется, не атакует ли уже воин другую цель и есть ли необходимость переключаться на новую цель. Юниты, не умеющие вести ближний бой (танки, катапульты, ...) должны постараться предварительно отойти на необходимую для стрельбы дистанцию. В большинстве игр воин может постараться позвать на помощь ближайших соседей, если они сами еще не догадались этого сделать. Отступление обычно необходимо для юнитов, не приспособленных к ведению войны (крестьян, строителей, рабочих). Здесь требуется решить, надо ли просто отбежать от врага на безопасное расстояние, либо искать спасения в ближайшем поселении или отряде. Иногда в играх, где присутствуют разные рода войск (пехота, авиация, флот) даже боевому юниту приходится отступать, если он в силу конструктивных особенностей не предназначен для всех типов возможного боя (например, танк должен избегать истребителей и т.п.). Уровень 2. Сканирование местности. По сути, этот уровень просто расширяет инстинкт самосохранения - юнит не только отвечает тому, кто на него напал, но и старается предугадать возможное нападение, осматривая местность вокруг себя в поисках вражеских воинов. Глубина осмотра обычно зависит от дальности стрельбы юнитов, хотя для воинов, управляемых компьютером рекомендуется делать ее равной максимальной дальности стрельбы. В этом случае, далеко стреляющая катапульта или вертолет не смогут подобраться незамеченными к близко атакующему меченосцу или пехотинцу. Впрочем, этот момент в различных играх реализован по-разному. Алгоритмов сканирования достаточно много - попарное сравнение координат юнитов, спиральный осмотр местности, посекторный осмотр, предварительное деление местности на квадраты (хеширование). Подробный обзор их был представлен в ZX Format #8 в статье «Эпопея». Описанные выше базовые уровни интеллекта обычно реализуются как для воинов, управляемых компьютером, так и для воинов, управляемых человеком. Хотя вариант для воинов компьютера стоит делать более гибким и предусматривать как можно больше различных вариантов. Уровень 3. Тактический. Здесь определяются базовые действия юнита, целиком зависящие от его умений и свойств. Поэтому с полным правом этому уровню можно дать другое название - профессиональный. Для каждого типа компьтерных героев обычно разрабатывается собственный тактический (профессиональный) блок. Hаиболее часто используются три типа таких блоков: 4 для юнитов, занятых разработкой и добычей ресурсов; 4 для юнитов, стоящих на охране; 4 для юнитов, идущих в атаку. В первом случае, блок правил описывает, куда доставлять добытые ресурсы, что делать, если добыча ресурсов в данном месте исчерпана или была ранее прервана (например, внезапным нападением войск человека). Здесь же могут быть описаны специальные правила, касающиеся ремонта поврежденных зданий и строительства новых зданий (хотя зачастую этими задачами занимается стратегический уровень, речь о котором еще впереди). Блок правил для охраны предписывает действия по защите вверенной территории. Обычно он сводится к следующему - «стой на месте и ничего не делай». Действительно, почти все задачи по охране решаются двумя нижними уровнями интеллекта. Единственное дополнительное правило определяет способ возвращения на место после отражения атаки. Действия атакующих юнитов, как правило, делятся на две фазы. Первая - «иди к точке сбора». Вторая - «иди в атаку». В этот блок могут быть добавлены условия отступления (например, от трусости, от ранений или если рядом нет своих), если, опять же, этим не занимается стратегический блок. Кроме описанных выше наиболее распространенных сводов правил, в любой игре обычно существует некоторое количество специальных тактических правил для малораспространенных типов юнитов: 4 для волшебников и магов (здесь обычно определяются приоритеты при выборе одного заклинания из многих и при выборе объекта применения заклинания); 4 для патрулирующих юнитов (в целом схожи с охранниками); 4 для транспортных кораблей (кого и как подобрать на борт, и кого и как десантировать. Естественно, на борт берутся только атакующие юниты, а не охранники или работники. Место десантирования определяется следующим уровнем компьютерного интеллекта - стратегическим); 4 для ремонтников (хотя в большинстве игр правила таких юнитов являются подмножеством правил ресурсодобытчиков); 4 для главных героев или плохишаев, если таковые имеются на уровне (тут уж что вам фантазия подскажет); 4 и так далее... Уровень 4. Стратегический. Этот уровень фактически управляет всеми юнитами компьютера. В идеале, компьютер должен это делать не хуже игрока-человека. От реализации правил этого уровня зависит, насколько умной и интересной будет ваша игра. К сожалению, готовых рецептов тут нет (иначе все игры были бы умными и интересными. Рассмотрим, по крайней мере, что здесь необходимо реализовать. Во-первых, компьютер должен управлять производством воинов для будущих атак. Кроме того, если это предусмотрено игрой, он должен производить новых юнитов, которые придут на смену погибшим охранникам или погибшим работникам. Во-вторых, компьютер должен заниматься апгрейдами и исследованиями. В-третьих, он должен заниматься организацией атак. Для этого он должен сначала выбрать место предварительного сбора (если, конечно, его воины не идут в бой сразу после того, как их произвели). Затем, по истечении некоего времени или, когда наберется необходимый по численности (по силе) отряд, компьютер должен отправить его в бой. Предварительно необходимо выбрать объект или место цели. Здесь же необходимо управлять транспортами (ежели таковые имеются). В-четвертых, компьютер должен следить за состоянием своих построек и здоровьем юнитов, чтобы вовремя заниматься ремонтом и лечением. Впрочем, эти функции могут самостоятельно выполнятся на третьем уровне соответствующими типами юнитов (лекарями, ремонтниками). При необходимости компьютер может уметь строить новые здания - в замен разрушенных или для наращивания своей мощи. Hе стоит говорить, что все перечисленные действия (особенно организация атак) должны выполняться как можно разнообразнее и нетривиальнее, чтобы игра была по-настоящему захватывающей. Удобно, что компьютер на этом уровне должен принимать действительно только общие, стратегические решения. Конкретные варианты реализации таких решений юниты компьютера выбирают самостоятельно, руководствуясь тремя нижними уровнями интеллекта. Фактически, компьютер здесь просто указывает номер задания для каждого юнита (плюс сопутствующие параметры, например, координаты места действия или объекта нападения) и не заботится о его дальнейшем исполнении. Третий и четвертый уровни интеллекта обычно программируют только для компьютера. Однако, в нашем мире лентяев и умственных вырожденцев, видимо, не так долго осталось ждать, когда авторы игр начнут реализовывать эти уровни и для юнитов человека (в той или иной степени). Дабы играющий не очень напрягал свою единственную серую извилину. Почему я принял именно такое деление на уровни для AI компьютера? Очень просто - практика создания игр «Черный Ворон I и II» показывает, что именно в таком порядке легче всего разрабатывать и отлаживать программы интеллекта. Последовательно реализуя перечисленные уровни, вы получаете примерно следующее: Уровень 0 (без интеллекта). Юниты компьютера стоят на месте и не двигаются. Уровень 1. То же, что и уровень 0. Юниты компьютера не реагируют на ваши боевые единицы, пока те не нанесут удар первыми. Уровень 2. То же, что и уровень 1. Вдобавок, юниты компьютера реагируют на приближение ваших солдат и стараются их атаковать. Уровень 3. То же, что и уровень 2. Однако идет активная добыча ресурсов, волшебники пытаются колдовать и гадить вам, охранники компьютера возвращаются назад после отражения вашей атаки. Hо никаких активных действий против вас компьютер не предпринимает. Уровень 4. Полноценная игра! Вот, собственно и все, что я хотел вам сказать... В качестве примера - как реализуется уровень 1 интеллекта для юнитов врага приведу текст для для Z80 на ассемблере. Комментарии частично иллюстрируют идею: K_ANSW ;ответ врага на удар CP #FF ;удар без автора? JR C,knsw0 PUSH IX LD IX,(en_IX) CALL R_awa_ JP knsw11 knsw0 AND #7F ;%1... CP _NHER RET NC ;враг ударил врага CALL HL_IX0 LD A,L OR A RET Z ;ударивший мёртв LD (LED3XY),HL LD A,5+#80 LD (LED+3),A ;индикатор#3 вкл PUSH IX LD IX,(en_IX) LD A,(IX+com) CP 4 JR NZ,knsw03 ; ;атакуешь ли ты уже того, кто атакует тебя? LD A,(IX+tarN) PUSH IX CALL N_IX LD A,(IX+com) ;парам текущей ;цели LD L,(IX+tarN) POP IX CP 4 ;атакует? JR Z,knsw01 CP 26 JR Z,knsw01 CP 28 JR NZ,knsw02 knsw01 LD A,L ;атакует тебя (твоих)? SUB _NHER CP _NHER JR C,knsw031 knsw02 LD A,28 ;можно сменить цель LD (IX+com),A ; knsw03 ;возможен ответ на удар? LD HL,impANS CALL BA OR A JP Z,knsw11 knsw031 ;земля против неба = ОК? CALL AVvsGND LD A,(IX+com) JR NZ,knsw05 ; ;уже воюешь? - продолжай CP 4 JR Z,knsw032 CP 28 JR NZ,knsw04 ;воюешь со зданием? knsw032 LD A,(IX+tarN) BIT 7,A JR Z,knsw11 ;не можешь ответить - сматывайся knsw04 LD A,(IX+typ) CP 6 JR Z,knsw11 ;кроме зенитки LD A,(HER_N) AND #7F ;%1... LD (IX+tarN),A LD (IX+com),3 CALL R_awayX JR knsw11 ; knsw05 ;уже в атаке? CP 4 JR NZ,knsw08 ;старая и новая цель - одно и тоже? LD E,(IX+tarN) LD A,(HER_N) AND #7F CP E JR Z,knsw11 ;старая цель - здание? BIT 7,E JR NZ,knsw08 ;сравнить с текущей целью и ударить, кого ближе POP HL PUSH HL LD A,(HL) INC HL LD H,(HL) LD L,A CALL DIST2 ;до нового обидчика+1 INC A LD C,A PUSH IX LD A,E CALL N_IX CALL HL_IX0 POP IX CALL DIST2 ;до старой цели CP C ;сравнить EX AF,AF LD A,(IX+typ) CP 9 JR NZ,knsw07 ;для танка - особые условия ;(бей, кого дальше) EX AF,AF JR Z,knsw11 CCF EX AF,AF ;для всех остальных knsw07 EX AF,AF JR C,knsw11 knsw08 LD (IX+com),4 ; knsw10 ;принять новую цель LD A,(HER_N) AND #7F ;%1... LD (IX+tarN),A CALL HL_IX0 CALL IXt_HL CALL ix_93a knsw11 POP IX RET Всегда ваш, Вячеслав Медноногов, 17.07.1999 г. |