## Linux compilation > mkdir build > cd build > cmake -DCMAKE_BUILD_TYPE=Debug .. > make ## Exercise 1 * Go into directory Player and implement a base class `Player`, this class should have 3 public virtual members: * `virtual int attack(Ship& playerShip) = 0;` * `virtual Ship& getShip() = 0;` * `virtual const Ship& getShip() const = 0;` * Add to `Player` class a non-virtual function: `Action::Status makeAction(const BattleField& battleField);`. * Add to `Player` class 2 virtual protected function (a template method): * `virtual Ship* chooseEnemyShip(const BattleField& battleField) const = 0;` * `virtual std::unique_ptr chooseAction(const BattleField& battleField) const = 0;` * Implement some logic in method `makeAction` based on 2 template method: * To simplify, Player can only attack or defense * Use class Command from directory `Battle` ## Exercise 2 * Implement class `RealUser` which will inherit from class `Player`. Implement both template methods: * Don't make it too complex, just ask user about action and type of ammunition, then you can randomly choose a damage or if missed. * To increase defense, you can use method `setArmor` from `Ship` class. * Rewrite class `Enemy` to inherit from `Player` add also implementation for both template methods * Uncomment code in main, check if you can perform a real battle! ## Exercise 3 * Go into directory `Battle` and implement class `Escape` which will inherit from class `Action`. * Roll a die (1 to 20), if value is bigger than `12` a player successfully escaped. * Noticed that we shouldn't modify existing code, but we need to do this in two place, where? * How would you refactor the code?