С#: Искуственный интелект в играх. Поиск пути
Уроки предназначены для тех, кто уже хорошо разбирается в 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);
}
}
}
––––––––––––––––––––––––––––– Преимущество этого интеллекта в том, что он может преследовать игрока, даже если игрок изменяет положение.