Hi there,
I am writing a game called othello. This game is played by the computer and the computer user. The game is played on a board.
The player can choose between white and black color. Where blacks starts first. It's an assignment for college.
I have added the complete source code.
I am having problems with this recursive function:
Code:
int O_bord::eval(int diepte, int & i, int & j, bool spelersbeurt){
int stand = 0; // voor de verschilfunctie
int c, d; // variabelen voor de coordinaten en de for-lussen
int voorlopigestand = 0; //om de waarde van een stand te retourneren
int spelerzwart = -100; //warde voor speler met kleur zwart
int spelerwit = 100; //waarde voor speler met kleur wit
//basis geval als diepte de waarde 0 bereikt
if (diepte == 0 || speelcontrolle()){
stand = verschil(); //de stand wordt geretourneerd
return stand;
}//if
//creert een nieuwe object O_bord om mee te werken
O_bord b(hoogte, breedte, kleurspeler);
b = *this;
//cout << "De kopie wordt afgedrukt" << endl;
//b.drukaf();//drukt af het nieuwe bord
//als de diepte nog niet nul is
for (c = 0; c < hoogte; c++){
for(d = 0; d < breedte; d++){
if (toegestanezet(c,d,spelersbeurt)){
//cout << "Er werd een gezet op de nieuwe kopie" << endl;
b = *this; //reset van het nieuwe bord
b.doezet(c,d,spelersbeurt); // een zet wordt uitgevoerd op de nieuwe object
//b.drukaf(); ////drukt af het nieuwe bord
//b.spelersbeurt = !spelersbeurt; // beurten worden geswicht
spelersbeurt = true; // beurten worden geswicht
voorlopigestand = b.eval((diepte -1), i, j, spelersbeurt); //hier wordt dieper gekeken
//enkele statistieken
cout << "diepte: " << diepte << " c: " << c << " d: " << d << " i: " << i <<
" j: " << j <<" voorlopigestand: " << voorlopigestand << endl;
spelersbeurt = false; //beurten worden geswicht
//================================//
//als de computer met zwart speelt//
//================================//
if (computersgetal == 1){
//als de computer aan de beurt is
if(!spelersbeurt){
//de voorlopige beste zet wordt opgeslagen
if (voorlopigestand >= spelerwit){
i = c;
j = d;
spelerwit = voorlopigestand;
}//if
}//if
//als de computer niet aan de beurt is
else {
if (voorlopigestand <= spelerzwart) {
i = c;
j = d;
spelerzwart = voorlopigestand;
}//if
}//else
}//if
//==============================//
//als de computer met wit speelt//
//==============================//
if (computersgetal == 2){
//als de computer aan de beurt is
if (!spelersbeurt){
if (voorlopigestand <= spelerzwart){
i = c;
j = d;
spelerzwart = voorlopigestand;
}//if
}//if
//als de computer niet aan de beurt is
else {
if (voorlopigestand >= spelerwit){
i = c;
j = d;
spelerwit = voorlopigestand;
}//if
}//else
}//if
}//if
}//for
}//for
//geef aan welke waarden geretourneerd moeten worden
if (computersgetal == 1){
return spelerzwart;
}
else {
return spelerwit;
}
}//othello::eval
void O_bord::verstandigezet(bool spelersbeurt, int diepte){
int x; // wordt toegekend aan de functieaanroep eval
int i,j; //coordinaten voor de functie
// de recursieve functie moet dan de bestezet bepalen
x = eval (diepte, i, j, spelersbeurt);
cout << "i: " << i << "j: " << j << " binnen verstandigezet " << endl;
// voert uit de verstandigezet voor de computer
//checkt eerst of de coordinaten correct zijn zodat de variabelen van die zet true worden in toegestanezet
if (toegestanezet(i,j,spelersbeurt)) {
doezet(i, j, spelersbeurt);
}//if
}//O_bord::verstandigezet
Some way I don't get the right coordinates passed to doezet(i,j, spelersbeurt)
So if anyone can give me some comments. I'll appreciate it.
If you don't understand, because of the comments
written in dutch, let me now.
Thanks