Esempio n. 1
0
void GameLogic::updateMoveList_() {
  Command command;
  for (int idx = 0; idx <= 1; idx++) {
    moveList_[idx].clear();
    Coordinate currentHeadCoord = worldModel_.players[idx].body.back();
    Coordinate nextHeadCoord = getUpdatedHeadPosition(currentHeadCoord, Direction::UP);
    if (isValidCoordinate(nextHeadCoord) && 
          field_[nextHeadCoord.x][nextHeadCoord.y] == kEmpty) {
      command.direction = Direction::UP;
      moveList_[idx].push_back(command);
    }
    nextHeadCoord = getUpdatedHeadPosition(currentHeadCoord, Direction::DOWN);
    if (isValidCoordinate(nextHeadCoord) && 
          field_[nextHeadCoord.x][nextHeadCoord.y] == kEmpty) {
      command.direction = Direction::DOWN;
      moveList_[idx].push_back(command);
    }
    nextHeadCoord = getUpdatedHeadPosition(currentHeadCoord, Direction::LEFT);
    if (isValidCoordinate(nextHeadCoord) && 
          field_[nextHeadCoord.x][nextHeadCoord.y] == kEmpty) {
      command.direction = Direction::LEFT;
      moveList_[idx].push_back(command);
    }
    nextHeadCoord = getUpdatedHeadPosition(currentHeadCoord, Direction::RIGHT);
    if (isValidCoordinate(nextHeadCoord) && 
          field_[nextHeadCoord.x][nextHeadCoord.y] == kEmpty) {
      command.direction = Direction::RIGHT;
      moveList_[idx].push_back(command);
    }
  }
}
Esempio n. 2
0
bool GameLogic::update(Command command, int32_t playerId) {
  size_t idx = 0;
  if(playerId == player1_){
    idx = 0;
  }
  else if(playerId == player2_){
    idx = 1;
  }
  else {
    return false;
  }

  Coordinate nextHeadPosition = getUpdatedHeadPosition(
    worldModel_.players[idx].body.back(), command.direction);
  worldModel_.players[idx].body.push_back(nextHeadPosition);
  
  if (isValidCoordinate(nextHeadPosition) &&
      field_[nextHeadPosition.x][nextHeadPosition.y] == kEmpty) {
    field_[nextHeadPosition.x][nextHeadPosition.y] = playerId;
  }
  else {
    if (winner_ == std::to_string(kNoWinner)) {
      winner_ = (player1_ == playerId) ? std::to_string(player2_) : std::to_string(player1_);
    }
    else {
      winner_ = std::to_string(kNoWinner);  // tie
    }
    hasFinished_ = true;
  }
  return true;
}