So konvertiere ich ein Python-Skript für einen Computer zu spielen Tic Tac Toe nach C++ und jede Funktion hat bisher funktioniert, außer für meine rekursive Funktion. Ich habe es mehrmals überprüft und es funktioniert immer noch nicht wie vorgesehen. Alle anderen Funktionen funktionieren und erzeugen das richtige Ergebnis, so dass es ein Problem mit dieser Funktion sein muss. Was noch seltsamer ist, wenn ich an diesem einen Punkt am Ende etwas ausmache, ändert sich das Ergebnis der rekursiven Funktion und ich bin mir nicht sicher warum. Ich benutze c9 zum code, wenn das irgendetwas bedeutet.Drucken etwas ändert die rekursive Funktion Ergebnisse
int* AI::get_ratio(string player, Board board_copy, int piece){
board_copy.place_piece(piece, player);
static int rwin[4]={1,0,0, true};
static int rloss[4]={0,1,0,false};
static int rtie[4]={0,0,1, false};
string symbol=get_symbol();
string winner=board_copy.check_game_over();
if(winner==symbol)
return rwin;
else if(winner==othersymbol)
return rloss;
else if(winner=="TIE")
return rtie;
int win, loss, tie;
win=0;
loss=0;
tie=0;
vector<int> moves;
bool p_win=false;
vector<int> pmoves=board_copy.get_pmoves();
for(int i=0; i<pmoves.size(); i++){
int *temp;
if(player==othersymbol)
temp=get_ratio(symbol, board_copy, pmoves[i]);
else
temp=get_ratio(othersymbol, board_copy, pmoves[i]);
if(equal(temp, rloss)){
if(player==symbol)
return rloss;
else
continue;
}
else if(equal(temp,rwin)){
p_win=true;
if(player==othersymbol)
return rwin;
else
continue;
}
moves.push_back(pmoves[i]);
win+=temp[0];
loss+=temp[1];
tie+=temp[2];
}
if(moves.size()==0 && player==othersymbol)
//cout << "loss\n"; this line changes the output for some reason
return rloss;
if(moves.size()==0 && player==symbol)
return rwin;
static int result[4]={win, loss, tie, p_win};
return result;
}
Bitte geben Sie eine [mcve] –
Zuerst erklären, was die Funktion versucht zu erreichen. Es hilft, wenn Sie erwartetes und tatsächliches Ergebnis zur Verfügung stellen können, indem Sie einen Beispielaufruf dieser Funktion machen – lamandy
Keine Klammern auf diesem 'if', so das Hinzufügen des' cout' bedeutet, dass es immer zurückkehrt, wahrscheinlich an der falschen Stelle. Tatsächliches Problem, keine Ahnung auf den ersten Blick. – user4581301