From e9d328acf4ee45bd8771d422fa4db40298e6e16a Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Sat, 29 Jan 2022 11:52:47 +0100 Subject: Init project --- src/Piece.cpp | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/Piece.cpp (limited to 'src/Piece.cpp') diff --git a/src/Piece.cpp b/src/Piece.cpp new file mode 100644 index 0000000..6f9a3be --- /dev/null +++ b/src/Piece.cpp @@ -0,0 +1,103 @@ +#include "Piece.hpp" + +namespace chessarbiter { +Piece::Piece(char c, std::string coord) + : piece(c), isBlack(!isupper(c)), coord(coord) {} + +std::vector Piece::GetMoves() { + std::vector moves; + char f = coord[0]; // File + char r = coord[1]; // Rank + if (piece == 'p' || piece == 'P') { + char side = 1; + if (piece == 'p') { + side = -1; + } + // First two steps + if ((r == '2' && piece == 'P') || (r == '7' && piece == 'p')) { + moves.push_back(std::string() + f + (char)(r + 2 * side)); + } + if ((piece == 'P' && r < '8') || (piece == 'p' && r > '1')) { + moves.push_back(std::string() + f + (char)(r + 1 * side)); + } + PIECE__ADD_MOVE(f - 1, r + 1 * side); + PIECE__ADD_MOVE(f + 1, r + 1 * side); + } else if (piece == 'k' || piece == 'K') { + PIECE__ADD_MOVE(f, r - 1); + PIECE__ADD_MOVE(f, r + 1); + PIECE__ADD_MOVE(f + 1, r); + PIECE__ADD_MOVE(f - 1, r); + PIECE__ADD_MOVE(f + 1, r + 1); + PIECE__ADD_MOVE(f - 1, r - 1); + PIECE__ADD_MOVE(f + 1, r - 1); + PIECE__ADD_MOVE(f - 1, r + 1); + } else if (piece == 'n' || piece == 'N') { + PIECE__ADD_MOVE(f + 1, r + 2); + PIECE__ADD_MOVE(f - 1, r + 2); + PIECE__ADD_MOVE(f + 1, r - 2); + PIECE__ADD_MOVE(f - 1, r - 2); + PIECE__ADD_MOVE(f + 2, r + 1); + PIECE__ADD_MOVE(f - 2, r + 1); + PIECE__ADD_MOVE(f + 2, r - 1); + PIECE__ADD_MOVE(f - 2, r - 1); + } else { + if (piece == 'b' || piece == 'B' || piece == 'Q' || piece == 'q') { + char rtmp = r; + char ftmp = f; + while (PIECE__IS_VALID(ftmp, rtmp)) { + ftmp++; + rtmp++; + PIECE__ADD_MOVE(ftmp, rtmp); + } + rtmp = r; + ftmp = f; + while (PIECE__IS_VALID(ftmp, rtmp)) { + ftmp--; + rtmp--; + PIECE__ADD_MOVE(ftmp, rtmp); + } + rtmp = r; + ftmp = f; + while (PIECE__IS_VALID(ftmp, rtmp)) { + ftmp--; + rtmp++; + PIECE__ADD_MOVE(ftmp, rtmp); + } + rtmp = r; + ftmp = f; + while (PIECE__IS_VALID(ftmp, rtmp)) { + ftmp++; + rtmp--; + PIECE__ADD_MOVE(ftmp, rtmp); + } + } + if (piece == 'r' || piece == 'R' || piece == 'Q' || piece == 'q') { + char rtmp = r; + char ftmp = f; + while (PIECE__IS_VALID(ftmp, rtmp)) { + rtmp++; + PIECE__ADD_MOVE(ftmp, rtmp); + } + rtmp = r; + ftmp = f; + while (PIECE__IS_VALID(ftmp, rtmp)) { + rtmp--; + PIECE__ADD_MOVE(ftmp, rtmp); + } + rtmp = r; + ftmp = f; + while (PIECE__IS_VALID(ftmp, rtmp)) { + ftmp++; + PIECE__ADD_MOVE(ftmp, rtmp); + } + rtmp = r; + ftmp = f; + while (PIECE__IS_VALID(ftmp, rtmp)) { + ftmp--; + PIECE__ADD_MOVE(ftmp, rtmp); + } + } + } + return (moves); +} +} // namespace chessarbiter \ No newline at end of file -- cgit v1.2.3