Translations/Project X

Материал из SpeccyWiki
Версия от 14:38, 17 ноября 2014; Alone (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Konstantin Dronov on AI in Project X, excerpt from Inferno #2 [1]

Some words about AI

Artificial intelligence is an important part of a game, be it a typical action game or nerdy strategy, and its design haven't changed highly since 80's. The cause is that it's very hard to do. For example, make a monster turn a corner, that seems simple. But what's a corner? How to describe it? How to describe an enemy for a monster? Regular way that is called "artificial intelligence" will take too much time to do. You should write an enormous subroutine in which you understand all the actions. I can't even imagine everything needed for this, because humans evolutioned for tens thousands, maybe hundreds thousands years. How you can repeat this in a few days? However, the nature itself suggests the way - from simple to complex. An alternative to artificial intelligence is developed now actively - artificial life (AL). What life, you will ask? Here it is, its approach:

1. Instead of writing a cumbersome routine, we write several little routines, each of them to accomplish just one task. Enumerate them, for example:

  • 0 - NOP, no command
  • 1 - MOVE, move forward
  • 2 - STEP LEFT, one step to the left
  • 3 - STEP RIGHT, one step to the right
  • 4 - TURN LEFT, turn left 90 degrees
  • 5 - TURN RIGHT, turn right 90 degrees

etc.

2. Write a routine, an interpreter, that will interpret codes under a pointer and move the pointer in memory. Interpreting a code is calling a subroutine for that specific code. The routine must contain variables to exchange data between subroutines. This is a programming language, in fact.

3. That's all !!!

Не правда  ли просто? Но все гениальное

просто! Что бы задать поведение монстров в PROJECT X мне потребовалось всего 15 таких команд и всего один регистр (один байт памяти  !). Конечно поведение мон- стров там очень простое, но даже на этих 15 командах возможно моделирование пове- дения достаточно сложного .

Вот эти команды :

00 RANGE  -  находиться ли игрок в зоне

видимости. Выдает: 0-да / 1-нет (в игре применялось для проверки монстр в преде- лах экрана или нет)

01 MOVE - двинуться вперед на шаг
02 TURN  LEFT  -  повернуть  налево  на

определенный угол

03 TURN RIGHT - повернуть направо
04 SEARCH  -  проверить есть ли впереди

преграда. Выдает : 0-да / 1-нет

05 SEARCH LEFT - то же слева
06 SEARCH RIGHT - то же справа
07 FIRE - стрелять (в игре не использо-

валось)

08 HALT - указывает интерпритатору, что

он должен закончить свою работу на этот раз и передать управление основной прог- рамме

09 VERIFY  L  - проверить находиться ли

игрок слева или справа от монстра . Вы- дает : 0-да / 1-нет

10 VERIFY  F  -  то  же, но спереди или

сзади

11 TYPE   -  проверяет,  если  игрок  и

монстр на одной линии по ходу движения, где находиться игрок. Выдает : 0-спереди / 1-сзади

12 JUMPIF 0 adress - проверяет содержи-

мое регистра. Если он 0, то перейти на адрес adress

13 JUMPIF 1 adress - то же, но для 1
14 JUMP adress - безусловный переход

Все !!!

Для примера программа в этих кодах :

   тот самый adress
┌──────────────────
│
01 SEARCH
02 JUMPIF 1 4
03 TURN LEFT
04 VERIFY L
05 JUMPIF 0 9
06 VERIFY F
07 JUMPIF 0 15
08 JUMP 19
09 TYPE
10 JUMPIF 0 13
11 TURN RIGHT
12 JUMP 19
13 TURN LEFT
14 JUMP 1
15 TYPE
16 JUMPIF 0 19
17 TURN LEFT
18 TURN LEFT
19 MOVE
20 HALT
21 JUMP 1
Это только   тестовая  программа  и  на

практике она не применима из-за того, что выход из нее совершиться один раз по HALT в строке 20. Для нормальной работы перед каждым JUMP или JUMPIF нужно пос- тавить HALT .

Вобщем, подумайте   какие  команды  вам

понадобятся и дополните список. Можно даже написать самообучающихся монстров для этого надо лишь добавить возможность записи новых команд самой программой монстра.