#pragma once #include #include class Robot; /* A 3-D grid world where robots mine positive-value blocks and trigger effects. */ class World { public: explicit World ( int x = 5, int y = 5, int z = 10 ); int getSizeX () const { return _sizeX; } int getSizeY () const { return _sizeY; } int getSizeZ () const { return _sizeZ; } int getValue ( int x, int y, int z ) const; void setValue ( int x, int y, int z, int value ); void setColumn ( int x, int y, const std::vector& values ); std::vector getColumn ( int x, int y ) const; void clear (); int getSurfaceLevel ( int x, int y ) const; int getSurfaceValue ( int x, int y ) const; bool hasPositiveValues () const; int remainingPositiveSum () const; int mine ( int x, int y ); int checkEffects ( int x, int y ); int mineAllPositive ( int x, int y ); double posiveAverage ( int x, int y ) const; int topPositiveSum ( int x, int y, int blocks ) const; void sortPositiveValuesInColumnAscending ( int x, int y ); void rearrange (); void display () const; void display ( const std::vector>& robots) const; private: int sizeX_ = 5; int sizeY_ = 5; int sizeZ_ = 10; std::vector>> grid_; void init(); void validateXY ( int x, int y ) const; void validateZ ( int z ) const; };