Files
deepMiner/include/World.h
T
fegger 2a79d42bd6 World updates
Update World API and implementation:
rename size fields to sizeX_/sizeY_/sizeZ_, add helpers such as
mineAllPositive, positiveAverage, topPositiveSum and a sort helper,
and fix related surface/mine semantics for dynamic columns.
2026-04-26 17:48:28 +02:00

52 lines
1.4 KiB
C++

#pragma once
#include <vector>
#include <memory>
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<int>& values );
std::vector<int> 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 sortPositiveValuesInColumnAscending ( int x, int y );
void rearrange ();
void display () const;
void display ( const std::vector<std::unique_ptr<Robot>>& robots) const;
private:
int sizeX_ = 5;
int sizeY_ = 5;
int sizeZ_ = 10;
std::vector<std::vector<std::vector<int>>> grid_;
void init();
void validateXY ( int x, int y ) const;
void validateZ ( int z ) const;
};