#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 positiveAverage ( int x, int y ) const; int topPositiveSum ( int x, int y, int blocks ) const; void sortPositiveValues ( 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; };