diff --git a/cpp/src/move.hpp b/cpp/src/move.hpp index b52f006..68a8d92 100644 --- a/cpp/src/move.hpp +++ b/cpp/src/move.hpp @@ -5,6 +5,7 @@ #include "pieces/piece.hpp" #include +#include struct Move { int8_t source_square; @@ -14,10 +15,34 @@ struct Move { CastleSide castle_side = CastleSide::NeitherSide; bool en_passant = false; int8_t promoting_to = Piece::None; + + std::string to_string() const { + std::stringstream ss; + ss << Coords::from_index(source_square) + << Coords::from_index(target_square); + if (promoting_to != Piece::None) { + switch (promoting_to & 0b00111) { + case Queen: + ss << 'q'; + break; + case Bishop: + ss << 'b'; + break; + case Knigt: + ss << 'n'; + break; + case Rook: + ss << 'r'; + break; + default: + break; + } + } + return ss.str(); + } }; inline std::ostream& operator<<(std::ostream& os, const Move& m) { - os << Coords::from_index(m.source_square) - << Coords::from_index(m.target_square); + os << m.to_string(); return os; }