[Piece] Refactor PieceType

This commit is contained in:
2022-12-20 22:12:48 +01:00
parent 4787e41c23
commit 2f8cebc2c4
2 changed files with 31 additions and 17 deletions

View File

@@ -23,15 +23,13 @@ PieceType Piece::type() const {
return mType; return mType;
} }
std::optional<PieceType> Piece::pieceTypeFromSymbol(char symbol) { std::optional<PieceType> Piece::pieceTypeFromSymbol(char symbol) {
auto tryType = static_cast<PieceType>(toupper(symbol)); switch (toupper(symbol)) {
case 'P': return PieceType::Pawn;
switch (tryType) { case 'N': return PieceType::Knight;
case PieceType::Pawn: return PieceType::Pawn; case 'B': return PieceType::Bishop;
case PieceType::Knight: return PieceType::Knight; case 'R': return PieceType::Rook;
case PieceType::Bishop: return PieceType::Bishop; case 'Q': return PieceType::Queen;
case PieceType::Rook: return PieceType::Rook; case 'K': return PieceType::King;
case PieceType::Queen: return PieceType::Queen;
case PieceType::King: return PieceType::King;
default: return std::nullopt; 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) { std::ostream &operator<<(std::ostream &os, const Piece &piece) {
int typeNum = static_cast<int>(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) { if (piece.color() == PieceColor::Black) {
typeNum = std::tolower(typeNum); typeNum = std::tolower(typeNum);
} }

View File

@@ -10,12 +10,12 @@ enum class PieceColor {
}; };
enum class PieceType { enum class PieceType {
Pawn = 'P', Pawn = 0b000,
Knight = 'N', Knight = 0b010,
Bishop = 'B', Bishop = 0b100,
Rook = 'R', Rook = 0b110,
Queen = 'Q', Queen = 0b1000,
King = 'K' King = 0b1010
}; };
class Piece { class Piece {