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