aboutsummaryrefslogtreecommitdiff
path: root/src/board.cpp
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;
  }
}