Задание
В настоящее время теория искусственного интеллекта активно развивается. Одним из направлений является решение логических игр. Это позволяет разработчику формализовать поиск в пространстве состояний, что является ключевым методом искусственного интеллекта. Игровые задачи легко представимы в компьютерной программе, поэтому разработка не сильно затруднена.
Целью работы является получение практических навыков решения сложных задач на примере логических игр с помощью подходов СИИ и закрепление теоретических знаний методам поиска по дереву состояний.
Необходимо проанализировать пространство состояний и дерево решений игры Ним, разработать программу на языке высокого уровня, моделирующую данную игру.
Функционал программы
Программа состоит из таких функций как:
void GenerateGame() – функция создания условий для игры;
int nim_sum() – функция определения ним-суммы для текущего хода;
void choose_first_move() – функция выбора первого хода (игрок или искусственный интеллект);
void show_piles() – функция показывает камни в кучах и ним-сумму;
void ai_move() – функция хода искусственного интеллекта;
void player_move() – функция хода игрока;
void new_move() – функция нового хода;
bool game_ended() – функция проверки окончания игры;
void win() – функция проверки победы или проигрыша;
int main() – главная функция.
Содержание отчета к программе
1 Постановка задачи 3
2 Краткое описание 4
3 Формирование и разбор правила 5
4 Формализация дерева состояний 10
5 Описание предложенных эвристик 12
6 Алгоритмы 13
6.1 Краткое описание использованных алгоритмов 13
6.2 Адаптация алгоритмов 14
7 Структура программы 16
8 Контрольный пример 19
9 Программный код 21
Заключение 28
Список источников 29
Фрагмент программного кода
void choose_first_move() //выбор первого хода (игрок или ИИ)
{
system("cls");
cout << "Выбор первого хода: \n";
cout << "Нажмите 'y' для передачи первого хода Компьютеру, любая другая клавиша - первый ход за Игроком";
if (_getch() == 'y')
{
if (nim_sum() == 0)
{
cout << "\nВы уверены в своем выборе? нажмите 'y' еще раз для подтверждения. \n";
if (_getch() == 'y')
{
cout << "\nПервый ход за Компьютером \n";
curent_move = 0;
}
else
{
cout << "\nПервый ход за Игроком \n";
curent_move = 1;
}
}
else
{
cout << "\nПервый ход за Компьютером \n";
curent_move = 0;
}
}
else
{
cout << "\nПервый ход за Игроком \n";
curent_move = 1;
}
cout << "\nДля начала игры нажмите любую клавишу... \n";
_getch();
}
void show_piles() //показывает камни в кучах и ним-сумму
{
system("cls");
cout << "Текущие условия: \n";
for (int i = 0; i < numbers_of_piles; i++)
cout << "[" << piles[i] << "] камней в куче № " << i + 1 << "\n";
cout << "Текущая ним-сумма: " << nim_sum() << "\n";
}
Скриншот архива с проектом

Пояснения по запуску программы
Скопировать код из пояснительной записки в проект в Visual Studio и запустить.
Телеграм
-