LINUX.ORG.RU
ФорумGames

Как закодить ИИ?

 , ,


2

2

Пытаюсь сделать соперника компьютера, игра сама похожа на доту только шашками, нужно используя ходы вверх,вниз,влево и вправо за ход пройти мимо шашек соперника и раньше встать на позиции соперника изначальные по очереди, клетки 8*8 поля, 9 твоих и 9 соперника, надо пройти по диагонали из угла в угол. проблема в том что шашки не могут проходить через друг друга и стоит выбор в выборе могущей походить, только у меня рекурсия и stack overfow выпадает когда я не выбиваю из массива те которые походить не могут

bool Game::Move_UpAI(int i,int j)
{
	if (i != 0 && Matrix[i - 1][j] == 0)
	{
		Matrix[i - 1][j] = Matrix[i][j];
		Matrix[i][j] = 0;
		ChessY[Matrix[i][j] - 1] += 0.2;
		std::cout << "MoveUp AI" << std::endl;
		return true;
	}
	else
		return false;
}
void Game::ReccurentWalk(int numbernotuse)
{
	current = -1, currentI = -1, currentJ = -1;
	for (int i = 10; i < 18; i++)
		if (!ai[i] )
		{
			current = i;
			if (current == numbernotuse)
				continue;
			break;
		}
	for (int i = 0; i < 8; i++)
		for (int j = 0; j < 8; j++)
			if (Matrix[i][j] == current)
			{
				currentI = i;
				currentJ = j;
				break;
			}
	if (!Move_UpAI(currentI, currentJ))
		if(!Move_LeftAI(currentI, currentJ))
		{
			ReccurentWalk(current);
		}
	//	Move_LeftAI(currentI, currentJ);
}
void Game::AI()
{
	if (secondplayer)
	{
		secondplayer = false;
		firstplayer = true;
		ReccurentWalk(-2);
		if (currentI == 0 && currentJ == 0)
		{
			ai[9] = true;
			ReccurentWalk(9);
		}

ИИ (сильного) пока нет и будет не скоро. Слабые потуги есть. Но по описанию они тебе не нужны. Полные правила игры в студию.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

Он про игровой ИИ к сильному и даже текущим нейросеткам отношения никакого. Просто вшитые и вычисляемые на основе условий поведения и всё. А тут у него правила игры. Для ии как и я для игрока должны быть средства управления, у челдовека кнопка (сдвинуть шашку в лево) у ИИ функция должна быть сдвинуть шашку в лево. Что бы саму логику ИИ вообще отделить от игры. Хотя никто не мешает действительно запилить нейросетку для игры. Но тут достаточно

  • ИИ смотрит на все позиции и выбирает шашки которые могут по правилам сходить

  • Из выбранных шашек он выбирает случайный ход или расчитывает на 1/2/3 хода вперёд выбирает тот в котором шашка дала лучшие результаты (главное меру знать ибо тут можно всю игру просчитать заранее, должно быть не более N ходов на перёд просчитано или вообще без просчётов для глупого ИИ но всё же играющего по правилам)

  • Согласно правилам и выбраной шашке он вызывает функцию сдвига шашки в нужном направлении

  • Далее ходит игрок

LINUX-ORG-RU ★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

проблема в том что шашки не могут проходить через друг друга и стоит выбор в выборе могущей походить, только у меня рекурсия и stack overfow выпадает когда я не выбиваю из массива те которые походить не могут

Это, кстати, хорошая иллюстрация зачем были изобретены знаки препинания.

ugoday ★★★★★ ()
Ответ на: комментарий от LINUX-ORG-RU

Он про игровой ИИ к сильному и даже текущим нейросеткам отношения никакого.

Всё зависит от правил игры. У Го имеет, топовые боты (которые от OpenAI и не доступны широкой публике) в dota2 имеют отношение к ML, а то что у него не имеет.

peregrine ★★★★★ ()
Ответ на: комментарий от bad_master

Я к тому, что бота можно так написать, что он никогда победить не даст. Ходи средней пешкой вперёд на клетку и назад и всё

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)
Ограничение на отправку комментариев: только для зарегистрированных пользователей