Witam!
Piszę proste warcaby i mam problem z implementacją minimaxa. Program jakoś gra, ale mam wątpliwości czy ruchy które znajduje są najlepsze. W związku z tym mam pytanie. Czy w poniższym kodzie funkcja Minimax (przy założeniu poprawności użytych struktur i funkcji) będzie zapisywała do struktury najlepszyruch optymalny ruch? A jeśli nie to jak to poprawić?
double OcenPozycje(char **szachownica, int rozmiar, bool czarne)
{
int liczbabialych = 0;
int liczbaczarnych = 0;
{
//liczba bierek
if (szachownica[i][j] == 'b' || szachownica[i][j] == 'B')
liczbabialych++;
if (szachownica[i][j] == 'c' || szachownica[i][j] == 'C')
liczbaczarnych++;
if (czarne)
return -(liczbabialych - liczbaczarnych)
else
return (liczbabialych - liczbaczarnych)
}
double MiniMax(char **szachownica, int rozmiar, bool ruch, int glebokosc, Ruch &najlepszyruch)
{
ListaMozliwychRuchow *glowa = DajListeRuchow(szachownica, rozmiar, ruch);
if (glebokosc == 0 || !glowa)
return OcenPozycje(szachownica, rozmiar, ruch);
double pom = 0;
double minmax = -10000;
while (glowa)
{
WykonajRuch(szachownica, rozmiar, glowa->ruch);
pom = - MiniMax(szachownica, rozmiar, !ruch, glebokosc - 1, najlepszyruch);
CofnijRuch(szachownica, rozmiar, glowa->ruch);
if (pom > minmax)
{
if (glebokosc == 6)
{
najlepszyruch.przed[0] = glowa->ruch.przed[0];
najlepszyruch.przed[1] = glowa->ruch.przed[1];
najlepszyruch.po[0] = glowa->ruch.po[0];
najlepszyruch.po[1] = glowa->ruch.po[1];
najlepszyruch.bicie = glowa->ruch.bicie;
najlepszyruch.polezbitego[0] = glowa->ruch.polezbitego[0];
najlepszyruch.polezbitego[1] = glowa->ruch.polezbitego[1];
najlepszyruch.zbity = glowa->ruch.zbity;
najlepszyruch.zmianadamka = glowa->ruch.zmianadamka;
}
minmax = pom;
}
glowa = glowa->nast;
}
UsunListe(glowa);
return minmax;
}