74 std::vector<std::vector<std::shared_ptr<Pawn>>>
pawns;
129 void print(
char)
const;
157 virtual void addPawn(std::shared_ptr<Pawn>);
371 void movePawnFromTo(
unsigned short,
unsigned short,
unsigned short,
unsigned short);
441 Pawn*
getPawn(
unsigned short,
unsigned short)
const;
471 bool isOccupied(
unsigned short,
unsigned short)
const;
553 bool isFree(
unsigned short,
unsigned short)
const;
568 bool isFree(
short int,
short int)
const;
684 auto h1 = std::hash<sista::Coordinates>{}(k.begin);
685 auto h2 = std::hash<sista::Coordinates>{}(k.end);
686 return h1 ^ (h2 << 1);
709 std::vector<std::vector<short int>> pawnsCount;
711 std::set<Path> pawnsToSwap;
713 Coordinates firstInvalidCell(std::map<Coordinates, short int>&)
const;
722 void clearPawnsToSwap();
754 void addPawn(std::shared_ptr<Pawn>)
override;
Border class header file.
Represents a brick of the border with a symbol and ANSI settings.
Definition border.hpp:34
Class representing a terminal Field for pawns and borders.
Definition field.hpp:71
void movePawn(Pawn *, const Coordinates &)
Moves a Pawn to new coordinates.
Definition field.cpp:181
Pawn * getPawn(const Coordinates &) const
Gets the Pawn at specified coordinates.
Definition field.cpp:270
Cursor cursor
Definition field.hpp:75
void addPrintPawn(std::shared_ptr< Pawn >)
Adds a Pawn to the field at its specified coordinates and prints it.
Definition field.cpp:171
int height
Definition field.hpp:77
void cleanCoordinates(const Coordinates &) const
Cleans the coordinates on screen by printing spaces.
Definition field.cpp:161
Coordinates movingByCoordinates(Pawn *, short int, short int) const
Calculates the new coordinates of a Pawn after moving by a relative offset.
Definition field.cpp:403
std::vector< std::vector< std::shared_ptr< Pawn > > > pawns
2D grid of shared pointers to Pawn objects.
Definition field.hpp:74
void validateCoordinates(const Coordinates &) const
Validates that the given coordinates are within bounds and not occupied.
Definition field.cpp:314
virtual ~Field()=default
Destructor to clean up resources.
virtual void erasePawn(Pawn *)
Removes a Pawn from the field at specified coordinates.
Definition field.cpp:151
void movePawnBy(Pawn *, const Coordinates &)
Moves a Pawn by a relative offset.
Definition field.cpp:207
void movePawnFromTo(const Coordinates &, const Coordinates &)
Moves a Pawn from one set of coordinates to another.
Definition field.cpp:257
bool isFree(const Coordinates &) const
Checks if specified coordinates are free (not occupied by a Pawn).
Definition field.cpp:303
virtual void addPawn(std::shared_ptr< Pawn >)
Adds a Pawn to the field at its specified coordinates.
Definition field.cpp:126
int width
Definition field.hpp:76
virtual void removePawn(Pawn *)
Removes a Pawn from the field.
Definition field.cpp:139
void print() const
Prints the entire field to the terminal.
Definition field.cpp:42
void clear()
Clears the field by removing all Pawns and resetting the grid.
Definition field.cpp:26
bool isOutOfBounds(const Coordinates &) const
Checks if specified coordinates are out of bounds.
Definition field.cpp:293
bool isOccupied(const Coordinates &) const
Checks if specified coordinates are occupied by a Pawn.
Definition field.cpp:283
void rePrintPawn(Pawn *)
Reprints a Pawn at its current coordinates.
Definition field.cpp:176
Class representing a Pawn owned by a Field or SwappableField.
Definition pawn.hpp:37
Class representing a terminal SwappableField for pawns and borders.
Definition field.hpp:706
void addPawn(std::shared_ptr< Pawn >) override
Adds a Pawn to the field and updates the pawnsCount grid.
Definition field.cpp:370
void simulateSwaps()
Simulates the swaps of the pawnsToSwap and removes unfeasible paths.
Definition field.cpp:485
void swapTwoPawns(const Coordinates &, const Coordinates &)
Swaps two Pawns at the specified coordinates.
Definition field.cpp:551
~SwappableField()
Destructor to clean up resources.
Definition field.cpp:363
void movePawn(Pawn *, const Coordinates &)
Moves a Pawn to new coordinates and updates the pawnsCount grid.
Definition field.cpp:381
void applySwaps()
Applies the swaps of the pawnsToSwap to the field.
Definition field.cpp:529
void removePawn(Pawn *) override
Removes a Pawn from the field and updates the pawnsCount grid.
Definition field.cpp:375
void addPawnToSwap(Pawn *, const Coordinates &)
Adds a Pawn to the set of pawnsToSwap.
Definition field.cpp:448
Cursor manipulation header file.
Sista library namespace.
Definition ansi.cpp:26
Effect
Enumeration for handling out-of-bounds coordinates.
Definition field.hpp:50
Definition coordinates.hpp:115
Represents 2D coordinates with x and y values.
Definition coordinates.hpp:31
Class representing a terminal cursor for movement operations.
Definition cursor.hpp:132
Represents a movement path for a Pawn, including priority handling.
Definition field.hpp:616
bool operator==(const Path &) const
Overloaded operator to check if two paths are equal (same begin and end coordinates).
Definition field.cpp:340
int priority
Definition field.hpp:618
Coordinates end
Definition field.hpp:620
bool operator|(const Path &) const
Overloaded operator to check if two paths are opposite (reverse of each other).
Definition field.cpp:331
static long long int current_priority
Definition field.hpp:617
bool operator<(const Path &) const
Overloaded operator to compare paths based on priority.
Definition field.cpp:337
Pawn * pawn
Definition field.hpp:621
Coordinates begin
Definition field.hpp:619
std::size_t operator()(const sista::Path &k) const noexcept
Definition field.hpp:683