diff options
| author | Adam <adammegarules1@gmail.com> | 2026-07-25 14:07:41 +0200 |
|---|---|---|
| committer | Adam <adammegarules1@gmail.com> | 2026-07-25 14:07:41 +0200 |
| commit | d6bc8dd98f24bb8f354aced71867898fe23a7ad2 (patch) | |
| tree | 8ed6f240917947727997a9315b683af2a809c322 /src/board.cpp | |
| parent | 293a88b2a5822759b828bd23efedbf3d79de764b (diff) | |
adding fen support
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; + } +} |
