diff --git a/Piece.cpp b/Piece.cpp index 425a087..9715227 100644 --- a/Piece.cpp +++ b/Piece.cpp @@ -23,16 +23,14 @@ PieceType Piece::type() const { return mType; } std::optional Piece::pieceTypeFromSymbol(char symbol) { - auto tryType = static_cast(toupper(symbol)); - - switch (tryType) { - case PieceType::Pawn: return PieceType::Pawn; - case PieceType::Knight: return PieceType::Knight; - case PieceType::Bishop: return PieceType::Bishop; - case PieceType::Rook: return PieceType::Rook; - case PieceType::Queen: return PieceType::Queen; - case PieceType::King: return PieceType::King; - default:return std::nullopt; + switch (toupper(symbol)) { + case 'P': return PieceType::Pawn; + case 'N': return PieceType::Knight; + case 'B': return PieceType::Bishop; + case 'R': return PieceType::Rook; + case 'Q': return PieceType::Queen; + case 'K': return PieceType::King; + default: return std::nullopt; } } @@ -41,7 +39,23 @@ bool operator==(const Piece &lhs, const Piece &rhs) { } std::ostream &operator<<(std::ostream &os, const Piece &piece) { - int typeNum = static_cast(piece.type()); + int typeNum; + + switch (piece.type()) { + case PieceType::Pawn: typeNum = 'P'; + break; + case PieceType::Knight: typeNum = 'N'; + break; + case PieceType::Bishop: typeNum = 'B'; + break; + case PieceType::Rook:typeNum = 'R'; + break; + case PieceType::Queen: typeNum = 'Q'; + break; + case PieceType::King: typeNum = 'K'; + break; + } + if (piece.color() == PieceColor::Black) { typeNum = std::tolower(typeNum); } diff --git a/Piece.hpp b/Piece.hpp index 9b46c64..b87b276 100644 --- a/Piece.hpp +++ b/Piece.hpp @@ -10,12 +10,12 @@ enum class PieceColor { }; enum class PieceType { - Pawn = 'P', - Knight = 'N', - Bishop = 'B', - Rook = 'R', - Queen = 'Q', - King = 'K' + Pawn = 0b000, + Knight = 0b010, + Bishop = 0b100, + Rook = 0b110, + Queen = 0b1000, + King = 0b1010 }; class Piece {