aboutsummaryrefslogtreecommitdiff
path: root/src/board
diff options
context:
space:
mode:
authorAdam <adammegarules1@gmail.com>2026-07-31 19:18:40 +0200
committerAdam <adammegarules1@gmail.com>2026-07-31 19:18:40 +0200
commit392ebaf9af5823933546dec98a1a478ec3965dbb (patch)
tree95b303948cfb3bbc7a7c92660489dd0344c5d120 /src/board
parentc437220aab7b908995a87cf958d9a67e54d478cb (diff)
making fen parser better
Diffstat (limited to 'src/board')
-rw-r--r--src/board/board.cpp3
-rw-r--r--src/board/board.hpp1
-rw-r--r--src/board/fen.cpp23
3 files changed, 14 insertions, 13 deletions
diff --git a/src/board/board.cpp b/src/board/board.cpp
index cb9254e..8c8e423 100644
--- a/src/board/board.cpp
+++ b/src/board/board.cpp
@@ -263,3 +263,6 @@ void UpdateBitboards(Game *g) {
g->PieceBitboard |= (1ULL << i);
}
}
+void SetPiece(int i, PieceType type, bool color, Game *g) {
+ g->pieces[i] = {.color = color, .type = type};
+}
diff --git a/src/board/board.hpp b/src/board/board.hpp
index 91a38f9..7a9779a 100644
--- a/src/board/board.hpp
+++ b/src/board/board.hpp
@@ -104,4 +104,5 @@ void UnMakeMove(UndoMove undo, Game *g);
Position FindKing(Game *g, bool white);
void UpdateBitboards(Game *g);
+void SetPiece(int i, PieceType type, bool color, Game *g);
#endif /* SRC_BOARD_H_ */
diff --git a/src/board/fen.cpp b/src/board/fen.cpp
index 91a2533..ca64e47 100644
--- a/src/board/fen.cpp
+++ b/src/board/fen.cpp
@@ -1,5 +1,6 @@
#include "fen.hpp"
#include "board.hpp"
+#include <cassert>
#include <cctype>
#include <cstdlib>
#include <print>
@@ -90,8 +91,9 @@ void setBoardFen(std::string fen, Game *g) {
file += move;
if (file > 8) {
std::println("Fatal: file was to big");
+ assert(false && "Malformed file");
exit(1);
- return; // malformed rank
+ return; // malformed file
}
continue;
}
@@ -100,44 +102,39 @@ void setBoardFen(std::string fen, Game *g) {
rank++;
if (rank >= 8) {
std::println("Fatal: rank was to big");
+ assert(false && "Malformed rank");
exit(1);
return; // malformed rank
}
continue;
};
if (toupper(fen[i]) == 'N') {
- Piece piece = createPiece(KNIGHT, isupper(fen[i]));
- g->pieces[rank * 8 + file] = piece;
+ SetPiece(rank * 8 + file, KNIGHT, isupper(fen[i]), g);
file++;
continue;
};
if (toupper(fen[i]) == 'R') {
- Piece piece = createPiece(ROOK, isupper(fen[i]));
- g->pieces[rank * 8 + file] = piece;
+ SetPiece(rank * 8 + file, ROOK, isupper(fen[i]), g);
file++;
continue;
}
if (toupper(fen[i]) == 'Q') {
- Piece piece = createPiece(QUEEN, isupper(fen[i]));
- g->pieces[rank * 8 + file] = piece;
+ SetPiece(rank * 8 + file, QUEEN, isupper(fen[i]), g);
file++;
continue;
}
if (toupper(fen[i]) == 'B') {
- Piece piece = createPiece(BISHOP, isupper(fen[i]));
- g->pieces[rank * 8 + file] = piece;
+ SetPiece(rank * 8 + file, BISHOP, isupper(fen[i]), g);
file++;
continue;
}
if (toupper(fen[i]) == 'P') {
- Piece piece = createPiece(PAWN, isupper(fen[i]));
- g->pieces[rank * 8 + file] = piece;
+ SetPiece(rank * 8 + file, PAWN, isupper(fen[i]), g);
file++;
continue;
}
if (toupper(fen[i]) == 'K') {
- Piece piece = createPiece(KING, isupper(fen[i]));
- g->pieces[rank * 8 + file] = piece;
+ SetPiece(rank * 8 + file, KING, isupper(fen[i]), g);
file++;
continue;
}