blob: 1085dbb79d6af1a793e07d5a8dbdad270742b0a1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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%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;
}
}
|