previous | index | next

Defining the GameInfo Class Members

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

previous | index | next