aboutsummaryrefslogtreecommitdiff
path: root/src/fen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/fen.cpp')
-rw-r--r--src/fen.cpp147
1 files changed, 0 insertions, 147 deletions
diff --git a/src/fen.cpp b/src/fen.cpp
deleted file mode 100644
index 4b8686e..0000000
--- a/src/fen.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-#include "fen.hpp"
-#include "board.hpp"
-#include <cctype>
-#include <cstdlib>
-#include <print>
-#include <string>
-
-bool WHITE = true;
-bool BLACK = false;
-
-void setBoardFen(std::string fen, Game *b) {
- // example fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
- int file = 0;
- int rank = 0;
-
- enum parserState {
- POSITION,
- TURN,
- CASTLE,
- ENPASSANT,
- CLOCK1,
- CLOCK2,
- };
- parserState state = POSITION;
-
- for (uint i = 0; i < fen.length(); i++) {
- if (fen[i] == ' ') {
- if (state == POSITION) {
- state = TURN;
- continue;
- }
- if (state == TURN) {
- state = CASTLE;
- continue;
- }
- if (state == CASTLE) {
- state = ENPASSANT;
- continue;
- }
- if (state == ENPASSANT) {
- state = CLOCK1;
- continue;
- }
- if (state == CLOCK1) {
- state = CLOCK2;
- continue;
- }
- }
- if (state == ENPASSANT) {
- continue;
- }
- if (state == CASTLE) {
- if (fen[i] == '-') {
- b->blackCastleKing = false;
- b->blackCastleQueen = false;
- b->whiteCastleKing = false;
- b->whiteCastleQueen = false;
- continue;
- }
- if (fen[i] == 'K') {
- b->whiteCastleKing = true;
- continue;
- }
- if (fen[i] == 'Q') {
- b->whiteCastleQueen = true;
- continue;
- }
- if (fen[i] == 'k') {
- b->blackCastleKing = true;
- continue;
- }
- if (fen[i] == 'q') {
- b->blackCastleQueen = true;
- continue;
- }
- }
- if (state == TURN) {
- if (toupper(fen[i]) == 'W') {
- b->turn = WHITE;
- continue;
- }
- if (toupper(fen[i]) == 'B') {
- b->turn = BLACK;
- continue;
- }
- }
- if (state == POSITION) {
- if (isdigit(fen[i])) {
- int move = fen[i] - '0';
- file += move;
- if (file > 8) {
- std::println("Fatal: file was to big");
- exit(1);
- return; // malformed rank
- }
- continue;
- }
- if (fen[i] == '/') {
- file = 0;
- rank++;
- if (rank >= 8) {
- std::println("Fatal: rank was to big");
- exit(1);
- return; // malformed rank
- }
- continue;
- };
- if (toupper(fen[i]) == 'N') {
- Piece piece = createPiece(KNIGHT, isupper(fen[i]));
- b->pieces[rank * 8 + file] = piece;
- file++;
- continue;
- };
- if (toupper(fen[i]) == 'R') {
- Piece piece = createPiece(ROOK, isupper(fen[i]));
- b->pieces[rank * 8 + file] = piece;
- file++;
- continue;
- }
- if (toupper(fen[i]) == 'Q') {
- Piece piece = createPiece(QUEEN, isupper(fen[i]));
- b->pieces[rank * 8 + file] = piece;
- file++;
- continue;
- }
- if (toupper(fen[i]) == 'B') {
- Piece piece = createPiece(BISHOP, isupper(fen[i]));
- b->pieces[rank * 8 + file] = piece;
- file++;
- continue;
- }
- if (toupper(fen[i]) == 'P') {
- Piece piece = createPiece(PAWN, isupper(fen[i]));
- b->pieces[rank * 8 + file] = piece;
- file++;
- continue;
- }
- if (toupper(fen[i]) == 'K') {
- Piece piece = createPiece(KING, isupper(fen[i]));
- b->pieces[rank * 8 + file] = piece;
- file++;
- continue;
- }
- }
- break;
- }
-}