aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/board.cpp78
-rw-r--r--src/board.hpp11
-rw-r--r--src/main.cpp17
3 files changed, 95 insertions, 11 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;
+ }
+}
diff --git a/src/board.hpp b/src/board.hpp
index 68557c8..eb2f153 100644
--- a/src/board.hpp
+++ b/src/board.hpp
@@ -1,6 +1,8 @@
#ifndef SRC_BOARD_H_
#define SRC_BOARD_H_
+#include <cstdint>
+#include <string>
enum pieceType {
NONE,
PAWN,
@@ -11,16 +13,21 @@ enum pieceType {
KING,
};
-struct piece {
+struct Piece {
bool color;
pieceType type;
bool moved;
};
struct board {
- piece pieces[64];
+ Piece pieces[64];
bool turn; // 1 white; 0 black
+ std::string castle;
+ uint8_t halfMoveClock;
+ uint16_t MoveClock;
};
void printBoard(board *b);
+void setBoardFen(std::string fen, board *b);
+Piece createPiece(pieceType type, bool color, bool moved = false);
#endif /* SRC_BOARD_H_ */
diff --git a/src/main.cpp b/src/main.cpp
index 6d82603..a2d9deb 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -2,19 +2,22 @@
#include "board.hpp"
-#define WHITE = true
-#define BLACK = false
+Piece NonePiece = {
+ false,
+ NONE,
+ false,
+};
int main() {
board b;
b.turn = true;
+ b.castle = "KQkq";
+ b.halfMoveClock = 0;
+ b.MoveClock = 0;
for (int i = 0; i < 64; i++) {
- piece NewPiece;
- NewPiece.color = true;
- NewPiece.moved = false;
- NewPiece.type = ROOK;
- b.pieces[i] = NewPiece;
+ b.pieces[i] = NonePiece;
};
+ setBoardFen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", &b);
printBoard(&b);
return EXIT_SUCCESS;
}