diff options
Diffstat (limited to 'src/board.cpp')
| -rw-r--r-- | src/board.cpp | 78 |
1 files changed, 76 insertions, 2 deletions
diff --git a/src/board.cpp b/src/board.cpp index 81cb583..1085dbb 100644 --- a/src/board.cpp +++ b/src/board.cpp @@ -1,12 +1,86 @@ #include "board.hpp" +#include <cctype> #include <cstdio> +#include <string> +bool WHITE = true; +bool BLACK = false; + +Piece createPiece(pieceType type, bool color, bool moved) { + Piece piece; + piece.type = type; + piece.color = color; + piece.moved = moved; + return piece; +}; void printBoard(board *b) { for (int i = 0; i < 64; i++) { - piece currentPiece = b->pieces[i]; - std::printf("%d ", currentPiece.type); + Piece currentPiece = b->pieces[i]; + std::printf("%d%d%d ", currentPiece.type, currentPiece.moved, + currentPiece.color); if (i % 8 == 7 && i != 0) { std::printf("\n"); } } } +void setBoardFen(std::string fen, board *b) { + // example fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 + int file = 0; + int rank = 0; + + for (int i = 0; i < fen.length(); i++) { + if (fen[i] == '/') { + file = 0; + rank++; + continue; + } + if (isdigit(fen[i])) { + int move = fen[i] - '0'; + file += move; + continue; + } + if (toupper(fen[i]) == 'W') { + b->turn = WHITE; + } + if (toupper(fen[i]) == 'B') { + b->turn = BLACK; + } + if (toupper(fen[i]) == 'N') { + Piece piece = createPiece(KNIGHT, isupper(i)); + b->pieces[rank * 8 + file] = piece; + file++; + continue; + } + if (toupper(fen[i]) == 'R') { + Piece piece = createPiece(ROOK, isupper(i)); + b->pieces[rank * 8 + file] = piece; + file++; + continue; + } + if (toupper(fen[i]) == 'Q') { + Piece piece = createPiece(QUEEN, isupper(i)); + b->pieces[rank * 8 + file] = piece; + file++; + continue; + } + if (toupper(fen[i]) == 'B') { + Piece piece = createPiece(BISHOP, isupper(i)); + b->pieces[rank * 8 + file] = piece; + file++; + continue; + } + if (toupper(fen[i]) == 'P') { + Piece piece = createPiece(PAWN, isupper(i)); + b->pieces[rank * 8 + file] = piece; + file++; + continue; + } + if (toupper(fen[i]) == 'K') { + Piece piece = createPiece(KING, isupper(i)); + b->pieces[rank * 8 + file] = piece; + file++; + continue; + } + break; + } +} |
