From 4eb596a9a02ab817b817ac7ab2b0cc770144768f Mon Sep 17 00:00:00 2001 From: Arthur Bols Date: Sun, 18 Dec 2022 16:13:10 +0100 Subject: [PATCH] [Piece] Implement Piece::fromSymbol --- Piece.cpp | 31 +++++++++++++++++++++++++++++-- Piece.hpp | 12 ++++++------ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/Piece.cpp b/Piece.cpp index 43c0489..ba0e877 100644 --- a/Piece.cpp +++ b/Piece.cpp @@ -6,8 +6,35 @@ Piece::Piece(PieceColor color, PieceType type) : _color(color), _type(type) { } Piece::Optional Piece::fromSymbol(char symbol) { - (void)symbol; - return std::nullopt; + PieceType type; + PieceColor color = std::isupper(symbol) ? PieceColor::White : PieceColor::Black; + + auto tryType = static_cast(toupper(symbol)); + + switch (tryType) { + case PieceType::Pawn: + type = PieceType::Pawn; + break; + case PieceType::Knight: + type = PieceType::Knight; + break; + case PieceType::Bishop: + type = PieceType::Bishop; + break; + case PieceType::Rook: + type = PieceType::Rook; + break; + case PieceType::Queen: + type = PieceType::Queen; + break; + case PieceType::King: + type = PieceType::King; + break; + default: + return std::nullopt; + } + + return Piece(color, type); } PieceColor Piece::color() const { diff --git a/Piece.hpp b/Piece.hpp index b8851b5..8478af7 100644 --- a/Piece.hpp +++ b/Piece.hpp @@ -10,12 +10,12 @@ enum class PieceColor { }; enum class PieceType { - Pawn, - Knight, - Bishop, - Rook, - Queen, - King + Pawn = 'P', + Knight = 'N', + Bishop = 'B', + Rook = 'R', + Queen = 'Q', + King = 'K' }; class Piece {