GameInfo::GameInfo(Player player1, Player player2,
GameState initialState) {
this->player1 = player1;
this->player2 = player2;
currentState = initialState;
nextToPlay = player1;
}
Player GameInfo::play() {
cout << endl << currentState->toString() << endl << endl;
if (gameOver())
return opponent(nextToPlay); // nextToPlay loses
else {
Move move = nextToPlay->getMove(currentState);
GameState next = currentState->nextState(move);
if (next == NULL) {
cout << "Illegal move.\n";
play();
}
else {
cout << nextToPlay->getName() << " takes " << move->getCoins()
<< " coin(s) from pile " << move->getPile() << endl;
GameState save = currentState;
currentState = next;
delete save; // reclaim memory for game state object
delete move; // reclaim memory for move object
nextToPlay = opponent(nextToPlay);
play();
}
}
}
bool GameInfo::gameOver() {
return (currentState->getPile1() +
currentState->getPile2() +
currentState->getPile3()) == 0;
}
Player GameInfo::opponent(Player p) {
return (p == player1) ? player2 : player1;
}
|