Скажу сразу, никакой прямой связи с Матрицей или Терминатором тут не будет. На самом деле, под понятием "искусственный интеллект" подразумевается далеко не машина или программа, полностью аналогичная человеческому разуму. По крайней мере в наши дни другого в это понятие почти не вкладывают. Искусственный интеллект, точнее интеллектуальная система - система способная принимать определенные решения в зависимости от исходных данных. Их очень много, этой серии систем посвящена целая теория. Здесь же рассмотрим лишь ее малую часть, ту, что применяется в играх.
Итак, традиционный пример. Одинокий воин, вооруженный до зубов, идет вперед, пробивается через тысячи монстров. Они нападают, стараются извести воина... А кто-нибудь задумывался, что за мысли бродят в головах или иных мыслящих частях тел этих монстров? Собственно, вот их перечень:
Мысль первая: Подойду-ка поближе...
В "Теории искусственного интеллекта" (ТИИ) этот вид мыслей называют преследованием. Для объяснения возьмем простейший случай: плоскость, на ней две точки. Одна управляется человеком, вторая - компьютером. Нужно, чтобы вторая гонялась за первой. Реализуется это двумя способами: направляющий и угловой. Первый условно (чтобы не привязываться к конкретному языку программирования) может быть сделан так:

Код:
Направление_X = знак(X_Точки1 - X_Точки2)
Направление_Y = знак(Y_Точки1 - Y_Точки2)
X_Точки2 + Направление_X * Скорость
Y_Точки2 + Направление_Y * Скорость

Поясню. Величины "Направление_?" принимают значения -1, 0, +1 (функция SGN). "?_Точки?" описывают текущее положение обеих точек по каждой из двух координат. "Скорость" - некоторая величина, описывающая, на сколько по любой из координат может сдвинуться объект. Первыми двумя строками получаем направления (знак разности ставится перед скоростью, ведь по одной оси можно в две стороны двигаться), последними двумя - двигаем точку в соответствии с этими направлениями. Вообще, способ простой, работает всегда на ура. Но в современных играх не используется. У него скорость задается для движения по оси... а если он двигается сразу по обеим осям, итоговая скорость оказывается больше осевой в "корень из двух" раз. Более того, если его использовать в 3D-игре, он не дает данных, чтобы повернуть движущийся объект "лицом" в направлении движения. На эти случаи предусмотрен способ, названный угловым. Он немного сложней, но при этом избавлен от недостатков первого (он сразу дает угол поворота объекта, одинаковую скорость во всех направлениях, да и самих направлений не 8, а почти неограниченно):

Код:
База_X = X_Точки2 - X_Точки1
База_Y = Y_Точки2 - Y_Точки1
Угол = arctg(База_Y / База_X)
Если База_X отрицательна, то Угол + 180 градусов
X_Точки2 + Скорость * cos(Угол)
Y_Точки2 + Скорость * sin(Угол)

Метод основан на тригонометрии и прямоугольном треугольнике. Первыми двумя строками мы математически сдвигаем обе точки так, чтобы первая оказалась в начале координат (лишь условно!). Чтобы сохранить результат перемещения и введены величины "База_?" (дабы не портить сами координаты точек, ведь это перемещение нам нужно лишь для расчетов). Далее, тангенс угла (кто помнит) есть отношение противолежащего катета к прилежащему (треугольник составлен осью X, линией, соединяющей точки и перпендикуляром из второй точки к оси X). Арктангенс вычисляет обратно угол из тангенса. Но правило это работает лишь при угле от -90 до 90 градусов. Следующая строка задает квадрант угла, то есть вычисляем, действительно ли он лежит в этом диапазоне или все-таки там от 90 до 270 градусов. И последние две строки задают вектор перемещения (опять же по правилам тригонометрии) длиной равной "Скорости" и с направлением на первую точку.
Мысль вторая: Лучше держаться подальше...
В ТИИ этот тип действия называется уклонением. Воин обрушил шквальный огонь на монстра и тот "решил" ретироваться. Алгоритмы работы такой "мысли" в том же упрощенном примере (на одной плоскости без ничего) идентичны предыдущей с точностью до знака при движении:
Напрявляющий:

Код:
Направление_X = знак(X_Точки1 - X_Точки2)
Направление_Y = знак(Y_Точки1 - Y_Точки2)
X_Точки2 - Направление_X * Скорость
Y_Точки2 - Направление_Y * Скорость

Угловой:

Код:
База_X = X_Точки2 - X_Точки1
База_Y = Y_Точки2 - Y_Точки1
Угол = arctg(База_Y / База_X)
Если База_X и База_Y отрицательны, то Угол + 180 градусов
Если База_X отрицательна, а База_Y положительна, то Угол + 180 градусов
X_Точки2 - Скорость * cos(Угол)
Y_Точки2 - Скорость * sin(Угол)

По сути, действие строго противоположно преследованию.
Мысль третья: Дай-ка подумать...
В ТИИ именуется бездействием. Код приводить не имеет большого смысла. Можно просто обнулить величину скорости, можно вообще при таком действии пропускать в программе блок управления данным монстром (или еще чем) и так далее. Если так можно выразиться, это "режим ожидания" системы.
Мысль четвертая: Мне все пофиг...
В ТИИ обозвана прямолинейным движением. То есть управляемый компьютером объект (монстр или еще что) начхал на игрока и почесал куда-то по своим делам. В реализации почти столь же прост, сколь предыдущий. Но примерный код все же приведу:

Код:
Угол = случайная величина от 0 до 360 градусов
X_Точки2 - Скорость * cos(Угол)
Y_Точки2 - Скорость * sin(Угол)

Если первую строчку применить один раз и потом полученный "Угол" использовать постоянно, объект так и будет двигаться прямо. Если ее использовать постоянно, траектория вообще непредсказуема. Так можно даже получить что-то вроде паники.
Мысль пятая: Это еще что такое?
В ТИИ именуют огибанием. Наткнулся этот монстр на стену или другое какое-то препятствие. И его надо обойти или, если оно не обходится, развернуться. Конкретный код тут уже сильно зависит от реализации программы, свойств движка и так далее. Но принцип может быть следующим:
- проверить, можно и нужно ли обходить это. То есть если с напрочь пофигистскими мыслями это тело уперлось во что-то, то и обходить незачем, меняем направление и все. А вот если игрок спрятался за большой ящик, то чтобы до него добраться ящик надо обойти. Если же уперлись в глухую стену, по-любому нужно развернуться и идти либо вдоль нее либо в обратном направлении.
- посмотреть короткий путь. Необязательный, в принципе, параметр. Предназначен для определения, с какой стороны короче обходить.
- развернуться на 90 градусов (в любую сторону, если не вычислался короткий путь)
- проследовать до конца объекта (можно не разворачивая модель, например, двигать, пока не прекратится столкновение с объектом)
- повернуться обратно на 90 градусов и идти (ехать) дальше.
Мысль шестая: Ой ща кто-то получит...
В ТИИ упоминается как Действие или Атака. Алгоритм тут всецело зависит от конкретной реализации игры. Важен сам факт принятия решения об атаке.
Мысль седьмая: Тут в сценарии написано...
Действие по шаблону. Заранее задано какое-то действие (скажем, маневр) и согласно этому сценарию (алгоритму) действия осуществляется движение объекта.

Мысли эти можно додумать, дополнить и так далее. Все зависит от того, что ожидается от виртуального персонажа
Теперь несколько слов о том, как эти мысли работают. В любом случае ведь невозможно их "думать" одновременно. Система, управляющая виртуальным персонажем, постоянно между ними переключается. А вот принципов этого переключения может быть минимум три:
- случайное. Тут понятно, "бросаем кости и действуем по тому числу, что выпало".
- случайно-вероятностное. Тут у каждой мысли есть еще свой "весовой" коэффициент. Чем он больше - тем больше шансов, что в голову придет именно эта мысль. Программно может быть реализовано так: скажем есть диапазон чисел от 1 до 20. Возможных мыслей 5. Их коэффициенты, скажем, 10, 5, 2, 2, 1. Всего их 20. Числа, ссылающиеся на мысли перемешиваются (например, чтобы на вторую мысль мысль вели числа 2, 7, 9, 15 и 19). После чего идет генерация случайных чисел с диапазоне 1-20, и каждое число ведет на какую-то "мысль". Понятно, что чем больше чисел диапазона ведут на какую-либо мысль, тем больше шансов, что именно она "придет в голову" системе.
- обстановочное. Вот тут, собственно, в зависимости от каких-либо параметров и меняются мысли. Въехал в стену - разворачивайся. Подошел на расстояние выстрела - стреляй. Кончились патроны - убегай. И так далее.
Последняя схема обеспечивает наиболее "адекватное" поведение управляемого компьютером объекта... но в то же время делает из него непобедимого противника. Поэтому данное разделение условно. Чтобы было интересно играть, нужно использовать последние два вперемежку. Но тут уже дело самого разработчика.

И напоследок, здесь были рассмотрены принципы построения системы искусственного интеллекта для активных игр (стрелялки, шутеры и т.д.).
В квестах это вообще неприменимо, так в принципе даже ИИ как такового и нет. Просто идет довольно громоздкий просчет ответов и действий игрока.
В РПГ (Ролевых играх) действует смесь квестовского модуля просчета и описанных выше принципов для стрелялок.
В стратегиях идет точно заданная последовательность действий (сначала построить одно, потом другое, когда нападать и т.д.). Она либо задана всегда и едино для каждого уровня сложности (скучновато, но несложно) либо заранее просчитывается в расчете на данную карту. Схема, разумеется, допускает некоторую вариацию (ну, взбрело в голову игроку напасть первым, скажем. нужно же ответить и достойно), но в общем остается неизменной. Однако в стратегиях реального времени принципы построения искусственного интеллекта, управляющего отдельными единицами ("юнитами") действует по той же, вышеописанной схеме мыслей.