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;
}