#pragma once #include #include class BaseSquareT { public: BaseSquareT(char rep=' ', int cost=10); virtual ~BaseSquareT() = default; virtual std::string Description() const; virtual int Cost() const; virtual char GetRepresentation(); virtual void Explore(); protected: int travelCost; char repChar; bool hidden{true}; }; class RoadSquareT: public BaseSquareT { public: RoadSquareT(int cost=5, int toll=100); virtual ~RoadSquareT() = default; std::string Description() const override ; virtual int Toll() const ; protected: int tollPrice; }; class HillSquareT: public BaseSquareT { public: HillSquareT(int cost=50); virtual ~HillSquareT() = default; char GetRepresentation() override; std::string Description() const override ; }; class WitchSquareT: public BaseSquareT { public: WitchSquareT(int cost=50); virtual ~WitchSquareT() = default; std::string Description() const override; char GetRepresentation() override; void Explore() override; private: char currentRep{'?'}; double pcts[3]{0.5,0.5,0.0}; }; BaseSquareT * RandomSquareT();