diff --git a/shm/CMakeLists.txt b/shm/CMakeLists.txt index 5590fc92a..504367b87 100644 --- a/shm/CMakeLists.txt +++ b/shm/CMakeLists.txt @@ -3,16 +3,17 @@ cmake_minimum_required(VERSION 3.10) project(SHM_2077) set(FILES + alcohol.cpp + cargo.cpp + coordinates.cpp + fruit.cpp island.cpp + item.cpp map.cpp player.cpp ship.cpp - coordinates.cpp - cargo.cpp store.cpp - alcohol.cpp - item.cpp - fruit.cpp + time.cpp ) set(FLAGS diff --git a/shm/alcohol.cpp b/shm/alcohol.cpp index add2b2f5e..cef680e33 100644 --- a/shm/alcohol.cpp +++ b/shm/alcohol.cpp @@ -1,27 +1,36 @@ #include "alcohol.hpp" #include -Alcohol::Alcohol(const std::string& name, size_t amount, size_t basePrice, size_t percentage) - : Cargo(name, amount, basePrice), percentage_(percentage) {} ; +Alcohol::Alcohol(const std::string& name, + size_t amount, + size_t basePrice, + size_t percentage, + Time* time) + : Cargo(name, amount, basePrice, time) + , percentage_(percentage) {}; -size_t Alcohol::getPrice() const { - return static_cast(basePrice_ * static_cast(percentage_)/static_cast(MaxPercentage)); +size_t Alcohol::getPrice() const +{ + return static_cast(basePrice_ * static_cast(percentage_) / static_cast(MaxPercentage)); } -Cargo& Alcohol::operator+=(size_t amount) { +Cargo& Alcohol::operator+=(size_t amount) +{ amount_ += amount; return *this; } -Cargo& Alcohol::operator-=(size_t amount) { - if (amount <= amount_) { +Cargo& Alcohol::operator-=(size_t amount) +{ + if (amount <= amount_) { amount_ -= amount; - } else if(amount_ < 0){ + } else if (amount_ < 0) { std::cerr << "Amount of cargo can not be under 0!!!\n"; } return *this; } -bool Alcohol::operator==(const Cargo& cargo) const { - return cargo.getName() == getName(); +bool Alcohol::operator==(const Cargo& cargo) const +{ + return cargo.getName() == getName(); } \ No newline at end of file diff --git a/shm/alcohol.hpp b/shm/alcohol.hpp index 8dd3f7d14..90d9b8390 100644 --- a/shm/alcohol.hpp +++ b/shm/alcohol.hpp @@ -1,12 +1,16 @@ #pragma once #include "cargo.hpp" -constexpr size_t MaxPercentage{96}; -//Class responsible for managing Alcohol in the game. +constexpr size_t MaxPercentage { 96 }; +// Class responsible for managing Alcohol in the game. class Alcohol : public Cargo { public: - Alcohol(const std::string& name, size_t amount, size_t basePrice, size_t percentage); - ~Alcohol() override{}; + Alcohol(const std::string& name, + size_t amount, + size_t basePrice, + size_t percentage, + Time* time); + ~Alcohol() override {}; Cargo& operator+=(size_t amount) override; Cargo& operator-=(size_t amount) override; @@ -15,12 +19,13 @@ class Alcohol : public Cargo { size_t getPercentage() const { return percentage_; }; void setPercentage(size_t percentage) { percentage_ = percentage; }; - //Methods override from Cargo class. + // Methods override from Cargo class. size_t getPrice() const override; std::string getName() const override { return name_; }; size_t getAmount() const override { return amount_; }; size_t getBasePrice() const override { return basePrice_; }; - void setAmount(const size_t& amount) override { amount_ = amount;}; + void setAmount(const size_t& amount) override { amount_ = amount; }; + private: size_t percentage_; }; \ No newline at end of file diff --git a/shm/cargo.cpp b/shm/cargo.cpp index 586a13c97..b2263e8bf 100644 --- a/shm/cargo.cpp +++ b/shm/cargo.cpp @@ -1,21 +1,26 @@ -#include #include "cargo.hpp" +#include -Cargo::Cargo(const std::string& name, size_t amount, size_t basePrice, Time *time) +Cargo::Cargo(const std::string& name, + size_t amount, + size_t basePrice, + Time* time) : name_(name) , amount_(amount) , basePrice_(basePrice) , time_(time) - { - time->attachObserver(this); - } +{ + time->attachObserver(this); +} -Cargo& Cargo::operator+=(size_t amount) { +Cargo& Cargo::operator+=(size_t amount) +{ amount_ += amount; return *this; } -Cargo& Cargo::operator-=(size_t amount) { +Cargo& Cargo::operator-=(size_t amount) +{ if (amount <= amount_) { amount_ -= amount; } else { @@ -24,11 +29,13 @@ Cargo& Cargo::operator-=(size_t amount) { return *this; } -bool Cargo::operator==(const Cargo& cargo) const { +bool Cargo::operator==(const Cargo& cargo) const +{ return cargo.getName() == getName(); } -void Cargo::nextDay() { +void Cargo::nextDay() +{ if (lifespan_ >= 0.01) { lifespan_ -= 0.01; } diff --git a/shm/cargo.hpp b/shm/cargo.hpp index 021194205..589dcc8df 100644 --- a/shm/cargo.hpp +++ b/shm/cargo.hpp @@ -1,13 +1,13 @@ #pragma once -#include -#include "time.hpp" #include "iObserver.hpp" +#include "time.hpp" +#include -//Class responsible for managing Cargo in the game. +// Class responsible for managing Cargo in the game. class Cargo : public IObserver { public: - Cargo(const std::string& name, size_t amount, size_t basePrice, Time *time); + Cargo(const std::string& name, size_t amount, size_t basePrice, Time* time); Cargo(const std::string& name, size_t amount, size_t basePrice); virtual ~Cargo() = default; @@ -22,7 +22,7 @@ class Cargo : public IObserver { virtual void setAmount(const size_t& amount) = 0; //{ amount_ = amount; }; void nextDay(); - + protected: std::string name_; size_t amount_; diff --git a/shm/coordinates.cpp b/shm/coordinates.cpp index 043eca120..c23350e47 100644 --- a/shm/coordinates.cpp +++ b/shm/coordinates.cpp @@ -1,23 +1,32 @@ #include "coordinates.hpp" -void Coordinates::setPositionX(size_t positionX) { +void Coordinates::setPositionX(size_t positionX) +{ positionX = positionX_; } -size_t Coordinates::getPositionX() const { +size_t Coordinates::getPositionX() const +{ return positionX_; } -void Coordinates::setPositionY(size_t positionY) { +void Coordinates::setPositionY(size_t positionY) +{ positionY = positionY_; } -size_t Coordinates::getPositionY() const { +size_t Coordinates::getPositionY() const +{ return positionY_; } -bool Coordinates::operator== (const Coordinates n_pos) const { +bool Coordinates::operator==(const Coordinates n_pos) const +{ return positionX_ == n_pos.positionX_ && positionY_ == n_pos.positionY_; } -size_t Coordinates::distance(const Coordinates& lhs, const Coordinates& rhs) { - return std::round(std::sqrt(std::pow((static_cast(lhs.getPositionX()) - static_cast(rhs.getPositionX())),2) + std::pow((static_cast(lhs.getPositionY()) - static_cast(rhs.getPositionY())),2))); +size_t Coordinates::distance(const Coordinates& lhs, const Coordinates& rhs) +{ + return std::round(std::sqrt(std::pow((static_cast(lhs.getPositionX()) - static_cast(rhs.getPositionX())), + 2) + + std::pow((static_cast(lhs.getPositionY()) - static_cast(rhs.getPositionY())), + 2))); } diff --git a/shm/coordinates.hpp b/shm/coordinates.hpp index b7433a8ff..aafab8f99 100644 --- a/shm/coordinates.hpp +++ b/shm/coordinates.hpp @@ -4,24 +4,26 @@ class Coordinates { public: Coordinates() - : positionX_(0) - , positionY_(0) - {} + : positionX_(0) + , positionY_(0) + { + } - Coordinates(size_t positionX, size_t positionY) - : positionX_(positionX) - , positionY_(positionY) - {} + Coordinates(size_t positionX, size_t positionY) + : positionX_(positionX) + , positionY_(positionY) + { + } - void setPositionX(size_t ); + void setPositionX(size_t); size_t getPositionX() const; - void setPositionY(size_t ); + void setPositionY(size_t); size_t getPositionY() const; - bool operator== (const Coordinates ) const; + bool operator==(const Coordinates) const; - size_t distance(const Coordinates& , const Coordinates& ); + size_t distance(const Coordinates&, const Coordinates&); private: size_t positionX_; diff --git a/shm/fruit.cpp b/shm/fruit.cpp index 0c11e3a4b..d8e7510b7 100644 --- a/shm/fruit.cpp +++ b/shm/fruit.cpp @@ -1,19 +1,27 @@ #include "fruit.hpp" #include -Fruit::Fruit(const std::string& name, size_t amount, size_t basePrice, size_t expirationDate) - : Cargo(name, amount, basePrice), expirationDate_(expirationDate) {}; +Fruit::Fruit(const std::string& name, + size_t amount, + size_t basePrice, + size_t expirationDate, + Time* time) + : Cargo(name, amount, basePrice, time) + , expirationDate_(expirationDate) {}; -size_t Fruit::getPrice() const { - return static_cast( basePrice_ * static_cast(purchaseDate_)/ expirationDate_); +size_t Fruit::getPrice() const +{ + return static_cast(basePrice_ * static_cast(purchaseDate_) / expirationDate_); } -Cargo& Fruit::operator+=(size_t amount) { +Cargo& Fruit::operator+=(size_t amount) +{ amount_ += amount; return *this; } -Cargo& Fruit::operator-=(size_t amount) { +Cargo& Fruit::operator-=(size_t amount) +{ if (amount <= amount_) { amount_ -= amount; } else { @@ -22,20 +30,23 @@ Cargo& Fruit::operator-=(size_t amount) { return *this; } -bool Fruit::operator==(const Cargo& cargo) const { +bool Fruit::operator==(const Cargo& cargo) const +{ return cargo.getName() == getName(); } -Fruit& Fruit::operator--() { - if(purchaseDate_ <= 0) { +Fruit& Fruit::operator--() +{ + if (purchaseDate_ <= 0) { purchaseDate_ = 0; } purchaseDate_--; return *this; } -Fruit& Fruit::operator--(int) { - if(purchaseDate_ <= 0) { +Fruit& Fruit::operator--(int) +{ + if (purchaseDate_ <= 0) { purchaseDate_ = 0; } purchaseDate_--; diff --git a/shm/fruit.hpp b/shm/fruit.hpp index 2d8ba12b5..59a69ad9e 100644 --- a/shm/fruit.hpp +++ b/shm/fruit.hpp @@ -1,10 +1,14 @@ #pragma once #include "cargo.hpp" -//Class responsible for managing Fruit in the game. +// Class responsible for managing Fruit in the game. class Fruit : public Cargo { public: - Fruit(const std::string& name, size_t amount, size_t basePrice, size_t expirationDate); + Fruit(const std::string& name, + size_t amount, + size_t basePrice, + size_t expirationDate, + Time* time); ~Fruit() override {}; Cargo& operator+=(size_t amount) override; @@ -13,7 +17,7 @@ class Fruit : public Cargo { virtual Fruit& operator--(); virtual Fruit& operator--(int); - //Methods override from Cargo class. + // Methods override from Cargo class. virtual size_t getPrice() const override; virtual std::string getName() const override { return name_; }; size_t getAmount() const override { return amount_; }; @@ -21,7 +25,7 @@ class Fruit : public Cargo { size_t getExpirationDate() const { return expirationDate_; }; size_t getPurchaseData() const { return purchaseDate_; }; - void setAmount(const size_t& amount) override { amount_ = amount;}; + void setAmount(const size_t& amount) override { amount_ = amount; }; protected: size_t expirationDate_; diff --git a/shm/game.cpp b/shm/game.cpp new file mode 100644 index 000000000..7088878fa --- /dev/null +++ b/shm/game.cpp @@ -0,0 +1,240 @@ +#include "game.hpp" +#include "map.hpp" +#include + +Game::Game(size_t money, size_t days, size_t goal) + : money_(money) + , gameDayes_(days) + , finalGoal_(goal) +{ + time_ = std::make_shared