74 std::vector<std::vector<std::shared_ptr<Pawn>>>
pawns;
129 void print(
char)
const;
154 virtual void addPawn(std::shared_ptr<Pawn>);
366 void movePawnFromTo(
unsigned short,
unsigned short,
unsigned short,
unsigned short);
433 Pawn*
getPawn(
unsigned short,
unsigned short)
const;
463 bool isOccupied(
unsigned short,
unsigned short)
const;
547 bool isFree(
unsigned short,
unsigned short)
const;
563 bool isFree(
short int,
short int)
const;
679 auto h1 = std::hash<sista::Coordinates>{}(k.begin);
680 auto h2 = std::hash<sista::Coordinates>{}(k.end);
681 return h1 ^ (h2 << 1);
704 std::vector<std::vector<short int>> pawnsCount;
706 std::set<Path> pawnsToSwap;
708 Coordinates firstInvalidCell(std::map<Coordinates, short int>&)
const;
717 void clearPawnsToSwap();
747 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
Represents a 2D grid where Pawns can be placed, moved, and managed.
Definition: field.hpp:71
void movePawn(Pawn *, const Coordinates &)
Moves a Pawn to new coordinates.
Definition: field.cpp:171
Pawn * getPawn(const Coordinates &) const
Gets the Pawn at specified coordinates.
Definition: field.cpp:260
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:161
~Field()
Destructor to clean up resources.
Definition: field.cpp:41
int height
Definition: field.hpp:77
void cleanCoordinates(const Coordinates &) const
Cleans the coordinates on screen by printing spaces.
Definition: field.cpp:151
Coordinates movingByCoordinates(Pawn *, short int, short int) const
Calculates the new coordinates of a Pawn after moving by a relative offset.
Definition: field.cpp:371
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:298
virtual void erasePawn(Pawn *)
Removes a Pawn from the field at specified coordinates.
Definition: field.cpp:141
void movePawnBy(Pawn *, const Coordinates &)
Moves a Pawn by a relative offset.
Definition: field.cpp:197
void movePawnFromTo(const Coordinates &, const Coordinates &)
Moves a Pawn from one set of coordinates to another.
Definition: field.cpp:247
bool isFree(const Coordinates &) const
Checks if specified coordinates are free (not occupied by a Pawn).
Definition: field.cpp:287
virtual void addPawn(std::shared_ptr< Pawn >)
Adds a Pawn to the field at its specified coordinates.
Definition: field.cpp:132
int width
Definition: field.hpp:76
virtual void removePawn(Pawn *)
Removes a Pawn from the field.
Definition: field.cpp:135
void print() const
Prints the entire field to the terminal.
Definition: field.cpp:48
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:277
bool isOccupied(const Coordinates &) const
Checks if specified coordinates are occupied by a Pawn.
Definition: field.cpp:267
void rePrintPawn(Pawn *)
Reprints a Pawn at its current coordinates.
Definition: field.cpp:166
Represents an object on the field with a symbol, coordinates, and ANSI settings.
Definition: pawn.hpp:37
A specialized Field that handles Pawn swaps without conflicts.
Definition: field.hpp:701
void addPawn(std::shared_ptr< Pawn >) override
Adds a Pawn to the field and updates the pawnsCount grid.
Definition: field.cpp:354
void simulateSwaps()
Simulates the swaps of the pawnsToSwap and removes unfeasible paths.
Definition: field.cpp:453
void swapTwoPawns(const Coordinates &, const Coordinates &)
Swaps two Pawns at the specified coordinates.
Definition: field.cpp:519
~SwappableField()
Destructor to clean up resources.
Definition: field.cpp:347
void applySwaps()
Applies the swaps of the pawnsToSwap to the field.
Definition: field.cpp:497
void removePawn(Pawn *) override
Removes a Pawn from the field and updates the pawnsCount grid.
Definition: field.cpp:359
void addPawnToSwap(Pawn *, const Coordinates &)
Adds a Pawn to the set of pawnsToSwap.
Definition: field.cpp:416
Cursor manipulation header file.
Sista library namespace.
Definition: ansi.cpp:25
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
Manages terminal cursor operations.
Definition: cursor.hpp:132
Represents a movement path for a Pawn, including priority handling.
Definition: field.hpp:611
bool operator==(const Path &) const
Overloaded operator to check if two paths are equal (same begin and end coordinates).
Definition: field.cpp:324
int priority
Definition: field.hpp:613
Coordinates end
Definition: field.hpp:615
bool operator|(const Path &) const
Overloaded operator to check if two paths are opposite (reverse of each other).
Definition: field.cpp:315
static long long int current_priority
Definition: field.hpp:612
bool operator<(const Path &) const
Overloaded operator to compare paths based on priority.
Definition: field.cpp:321
Pawn * pawn
Definition: field.hpp:616
Coordinates begin
Definition: field.hpp:614
std::size_t operator()(const sista::Path &k) const noexcept
Definition: field.hpp:678