## Linux compilation

    > mkdir build
    > cd build
    > cmake -DCMAKE_BUILD_TYPE=Debug ..
    > make

## Exercise 1

* Go into directory `Core` and implement a base class `PrintVisitor` which should implement `visit` method for two objects: `Ship` and `Store`
* Create `PrettyPrintVisitor` which will print cargo from `Ship` and `Sotore` (just move the implementation `printCargo`). 
* Add the rest of necessary implementation for `Ship` and `Store`. Visitor should be taken as `std::unique_ptr`
* Verify in the `main.cpp` if cargo print in the same way as previously.

Example:

```
Ship
|----------------|----------------|
|      NAME      |     AMOUNT     |
|----------------|----------------|
|Rum             | 300            |
|Banana          | 200            |
|Banana          | 150            |
|----------------|----------------|

Store
|----------------|----------------|----------------|
|      NAME      |     AMOUNT     |     PRICE      |
|----------------|----------------|----------------|
|Rum             | 1000           | 40             |
|Banana          | 1000           | 20             |
|Item            | 1000           | 30             |
|----------------|----------------|----------------|
```

## Exercise 2

* Create another visitor: `BasicPrintVisitor` which should print the cargo but without special frames, just raw info.
* For `Ship` print Name and Amount
* For `Store` print Name Amount and Price
* You shouldn't modify anything in your code, just change the visitor in `main.cpp` and you should get a new output

Example:

```
Ship
Rum            300
Banana         200
Banana         150

Store
Rum            1000           40
Banana         1000           20
Item           1000           30
```

## Exercise 3

* Create CargoDamageVisitor. You don't need to create a base class, because we know that we will not extend this code,
* You should create three `operator()` one for each cargo type: Alcohol, Fruit, Item,
* For fruit, you should draw a number between 0 and 5 and subtract such an amount of cargo
* For alcohol, you should draw a number between 0 and 10 and subtract half an amount of cargo
* For item, you should draw a number between 0 and 20 and subtract one quarter of cargo
* Visitor should be taken as a template argument by Player class
* Apply visitor whenever you successfully deal damage to ship
* Check in the main class if ship lost cargo after get damaged.