J'essaie donc d'implémenter une fonction récursive qui génère l'intégralité de l'arbre de jeu de Tic-Tac-Toe, et je n'arrive pas à le faire fonctionner.Quel est le problème avec ma fonction récursive?
void BuildTree(Node& nNode, const int& nextPlayer)
{
//Copy last board
Ticboard tBoard = nNode.m_board;
do
{
//Return first valid move
int validMove = tBoard.FirstValidMove();
if (validMove != -1)
{
Node f;
Ticboard tempBoard = nNode.m_board;
tempBoard.Move(validMove, nextPlayer);
tBoard.Move(validMove, nextPlayer);
f.m_board = tempBoard;
f.m_winCount = 0;
nNode.m_branches.push_back(f);
int currPlay = (nextPlayer == 1 ? 2 : 1);
BuildTree(f,currPlay);
}
else
{
break;
}
}while(true);
}
La fonction réelle fonctionne, je suis allé à travers et débogué et il montre qu'il fonctionne comme il est censé le faire, mais quand je regarde les noeuds générés (pour Tic-Tac-Toe, par la voie) dans Visual Studios via le point d'arrêt, il montre seulement les 9 premières branches. Je sais que d'autres ont été générés car cela prend quelques secondes, et j'ai ajouté un compteur.
Voilà comment j'appelle le code:
Ticboard lol;
Node startTree;
startTree.m_board = lol;
int startPlay = 1;
BuildTree(startTree, startPlay);
Sans copier tout mon code pour bitboards et tout le reste ici, pouvez-vous voir immédiatement quelque chose de mal avec la logique?
Mais j'ai ajouté & nNode, donc c'est une référence, donc les changements ne seront-ils pas montrés plus tard? Si non, comment puis-je résoudre ce problème? – cam
Ah, juste une réorganisation simple. Merci! – cam