С#: Искуственный интелект в играх. Поиск пути

Уроки предназначены для тех, кто уже хорошо разбирается в C#. В основном искусственный интеллект (ИИ) сложен из операторов выбора. Основная задача интеллекта, это чаще всего поиск пути. И именно в этом уроке мы поговорим об этом. Представим, что у нас есть монстр который должен подойти к игроку. Карта — это наш массив 10*10. Монстр отображается в массиве как буква М, а игрок Р. Для начала выберем консольный проект и создадим массив, расположим на нём игрока и монстра:

char[,] map = new char[10, 10];

int player_x = 10;

int player_y = 10;

int monst_x = 0;

int monst_y = 1;


Создадим игровой цикл, и весь следующий код запишем в него:

do

{

}while(1==1);

Ну вот, основа у нас готова, осталось сделать интеллект! Нужно сделать, чтобы монстр приблизился к игроку. Алгоритм простой: Если положение монстра по оси Х больше положения игрока по оси Х, то уменьшить положение монстра по Х на 1. Программа сравнивает положение монстра и игрока, и изменяет положение монстра.

if (monst_x > player_x) { monst_x–; }

if (monst_x < player_x) { monst_x++; }

if (monst_y > player_y) { monst_y–; }

if (monst_y < player_y) { monst_y++; }

———————————————– Нарисуем игрока и монстра:

map[player_x, player_y] = ‘P’;

map[monst_x, monst_y] = ‘M’;

—————————————–– Теперь нам нужно вывести карту на экран:

for (int x = 0; x <= 9; x++)

{

for (int y = 0; y <= 9; y++)

{

Console.Write(map[x, y]);

}

Console.WriteLine(“”);

}

Console.WriteLine(“––––––––––––––––––––––––––”);

Console.ReadLine();

—————————————— Удалим игрока и монстра:

map[player_x, player_y] = ’ ’;

map[monst_x, monst_y] = ’ ’;

Всё, запустите программу и нажмите Enter для смены кадров. Исходный код проекта:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

char[,] map = new char[10, 10];

int player_x = 9;

int player_y = 9;

int monst_x = 2;

int monst_y = 1;

do

{

if (monst_x > player_x) { monst_x–; }

if (monst_x < player_x) { monst_x++; }

if (monst_y > player_y) { monst_y–; }

if (monst_y < player_y) { monst_y++; }

map[player_x, player_y] = ‘P’;

map[monst_x, monst_y] = ‘M’;

for (int x = 0; x <= 9; x++)

{

for (int y = 0; y <= 9; y++)

{

Console.Write(map[x, y]);

}

Console.WriteLine(“”);

}

Console.WriteLine(“––––––––––––––––––––––––––”);

Console.ReadLine();

map[player_x, player_y] = ’ ’;

map[monst_x, monst_y] = ’ ’;

} while (2 == 2);

}

}

}

––––––––––––––––––––––––––––– Преимущество этого интеллекта в том, что он может преследовать игрока, даже если игрок изменяет положение.