Witam. Czy jest ktoś w stanie wskazać mi błąd w tych funkcjach ? Odpowiadają za ruch komputera w kółko i krzyżyk. Wzorowałem się pseudokodem i internetem.
int alfaBeta(int*plansza,int gracz,int alfa,int beta,bool maximizingPlayer)
{
if (gracz == 0 || rezultatGry(plansza) != 0)
{
return plansza;
}
if (maximizingPlayer == true)
{
for (int i = 0; i < 25; i++)
{
alfa = max(alfa, alfaBeta(plansza[i], gracz - 1, alfa, beta, false));
if (alfa >= beta)
{
break; //odciecia
}
return alfa;
}
}
else if (maximizingPlayer == false)
{
for (int i = 0; i < 25; i++)
{
beta = min(beta, alfaBeta(plansza[i], gracz - 1, alfa, beta, true));
if (alfa >= beta)
{
break;
}
}
return beta;
}
}
void ruchKomputera(int* plansza)
{
int ruch;
int wynik = -2;
for (int i = 0; i < 25; ++i)
{
if (plansza[i] == 0)
{
plansza[i] = 1;
int tempScore = -alfaBeta(plansza, -1,0,25,true);
plansza[i] = 0;
if (tempScore > wynik)
{
wynik = tempScore;
ruch = i;
}
}
}
plansza[ruch] = 1;
}