Я делаю настольную игру, похожую на манкалу. Я основал свой алгоритм на этом видео: https://www.youtube.com/watch?v=l-hh51ncgDI
Однако я застрял с переменной позицией и думаю, что мне все еще нужно сохранить ход. Я впервые занимаюсь искусственным интеллектом, и этот проект включал создание искусственного интеллекта для уникальной игры. Я думаю, что делаю это ужасно неправильно, поскольку я думаю, что минимакс должен быть древовидной диаграммой, а у меня нет дерева.
public class MiniMax
{
bool gameOver = false;
public float minimax(position, int depth, float alpha, float beta, bool player1)
{
if (depth == 0 || GameOver())
{
float score = Utility();
}
if (player1)
{
float maxVal = float.MaxValue;
foreach (var child in postition)
{
float eval = minimax(postition, depth - 1, alpha, beta, false);
maxVal = Mathf.Max(maxVal, eval);
alpha = Mathf.Max(alpha, eval);
if (beta <= alpha)
{
break;
}
}
return maxVal;
}
else
{
float minVal = float.MinValue;
foreach (var child in postition)
{
float eval = minimax(postition, depth - 1, alpha, beta, true);
minVal = Mathf.Max(minVal, eval);
beta = Mathf.Max(beta, eval);
if (beta <= alpha)
{
break;
}
}
return minVal;
}
}
bool GameOver()
{
return false;
}
float Utility()
{
//f(x) = -1(j.a + k.b) + l.c + m.d
float a = GameManager.arr1[0].LightStones;
float b = GameManager.arr2[0].DarkStones;
float c = GameManager.arr1[7].LightStones;
float d = GameManager.arr2[7].DarkStones;
float j;
if(a > c)
{
j = 1.5f;
}
else
{
j = 1;
}
float k;
if (b > d)
{
k = 1.5f;
}
else
{
k = 1;
}
float l;
if (c > a)
{
l = 1.5f;
}
else
{
l = 1;
}
float m;
if (d > b)
{
m = 1.5f;
}
else
{
m = 1;
}
return (-1*((j*a) + (k*b))) + (l*c) + (m*d);
}
}