aboutsummaryrefslogtreecommitdiff
path: root/src/board.cpp
blob: 172a9bec2228e19d6ec825b95f6fe8ade4bcb83a (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
87
88
89
90
91
92
#include "board.hpp"
#include <cassert>
#include <cctype>
#include <cstdio>
#include <iostream>
#include <print>
#include <string>

char toChar(pieceType type) {
  switch (type) {
  case NONE:
    return '.';
  case PAWN:
    return 'P';
  case KNIGHT:
    return 'N';
  case BISHOP:
    return 'B';
  case ROOK:
    return 'R';
  case QUEEN:
    return 'Q';
  case KING:
    return 'K';
  default:
    std::cout << "\n" << type << "\n";
    assert(false && "Unknown piece" && type);
    return '?';
  }
}

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) {
  std::string line = "  +-----------------+\n";
  std::string whiteLetters = "    a b c d e f g h\n";
  std::string blackLetters = "    h g f e d c b a\n";

  std::cout << (b->turn ? whiteLetters : blackLetters);
  std::cout << line;

  if (b->turn) {
    for (int rank = 0; rank < 8; rank++) {
      std::printf("%d |", 8 - rank);

      for (int file = 0; file < 8; file++) {
        Piece piece = b->pieces[rank * 8 + file];
        char symbol = toChar(piece.type);

        if (!piece.color)
          symbol = std::tolower(static_cast<unsigned char>(symbol));

        std::printf(" %c", symbol);
      }

      std::printf(" | %d\n", 8 - rank);
    }
  } else {
    for (int rank = 7; rank >= 0; rank--) {
      std::printf("%d |", 8 - rank);

      for (int file = 7; file >= 0; file--) {
        Piece piece = b->pieces[rank * 8 + file];
        char symbol = toChar(piece.type);

        if (!piece.color)
          symbol = std::tolower(static_cast<unsigned char>(symbol));

        std::printf(" %c", symbol);
      }

      std::printf(" | %d\n", 8 - rank);
    }
  }

  std::cout << line;
  std::cout << (b->turn ? whiteLetters : blackLetters);

  std::println();
  std::println("Turn: {}", b->turn ? "White" : "Black");

  assert(b->castle != "");

  std::println("Castling: {}", b->castle);
}

// void PlayMove(Move move, board *b) { return; }