В общем смысле искусственные игровые противники имеют некоторую заданную цель, которой "стремятся" достигнуть. Для упрощения настройки и программирования, цель раскладывается на задачи и подзадачи.
Например, цель ботов в Quake 3 или Counter Strike - доминировать в матче. Чтобы достигнуть этой цели, нужно выполнить следующие задачи: совершить больше всех убийств противников, быть убитым наименьшее число раз. Чтобы лидировать в списке убийц, нужно владеть лучшими предметами, занимать наиболее выгодные позиции на карте. Чтобы не быть убитым, необходимо иметь непредсказуемую тактику движения и, например, избегать открытых пространств. Эти подзадачи раскладываются на составляющие до тех пор, пока не будут максимально доступны для программирования.
Далее на итоговом списке подзадач расставляются динамически изменяемые приоритеты, которые определяют поведение ИИ в конкретный момент: в этой ситуации лучше выполнять подзадачу избегания, а в другой - подзадачу поиска и захвата доминирующей позиции на карте. Приоритеты изменяются на основании каких-либо факторов, например: текущая экипировка, состояние здоровья\брони\аммуниции, близость противников, положение на карте и тд.
Для того, чтобы закрепить определённую тактику за отдельно взятым экземпляром бота, добавьте в систему поощрения и наказания - то же место в таблице фрагов матча отлично для этого подходит.
Вышеописанное является очень обобщённым вариантом, и в литературе по теме вы найдёте более изящные реализации. В том числе и с использованием всевозможных нейронных сетей.
Прежде всего, как отметили выше, вам нужно определиться с вашими целями: какой игровый ИИ вы хотите сделать, и что он должен делать. Как только вы формализуете и структурируете свою задачу, вы быстро найдёте область решений и необходимую литературу.