aboutsummaryrefslogtreecommitdiff
path: root/src/board.cpp
diff options
context:
space:
mode:
authorAdam <adammegarules1@gmail.com>2026-07-25 14:07:41 +0200
committerAdam <adammegarules1@gmail.com>2026-07-25 14:07:41 +0200
commitd6bc8dd98f24bb8f354aced71867898fe23a7ad2 (patch)
tree8ed6f240917947727997a9315b683af2a809c322 /src/board.cpp
parent293a88b2a5822759b828bd23efedbf3d79de764b (diff)
adding fen support
Diffstat (limited to 'src/board.cpp')
-rw-r--r--src/board.cpp78
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;
+ }
+}