Example
Below you find an example program which generates all legal moves
for the current position and outputs them to the console.
cpp
#include "chess.hpp"
using namespace chess;
int main () {
Board board = Board("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1");
Movelist moves;
movegen::legalmoves(moves, board);
for (const auto &move : moves) {
std::cout << uci::moveToUci(move) << std::endl;
}
return 0;
}
Then just compile the program using clang or gcc and run it.
bash
g++ -std=c++17 -O3 -march=native -o example example.cpp
./example
Perft
cpp
uint64_t perft(Board& board, int depth) {
Movelist moves;
movegen::legalmoves(moves, board);
if (depth == 1) {
return moves.size();
}
uint64_t nodes = 0;
for (int i = 0; i < moves.size(); i++) {
const auto move = moves[i];
board.makeMove(move);
nodes += perft(board, depth - 1);
board.unmakeMove(move);
}
return nodes;
}
PGN Parser
cpp
#include <fstream>
#include <memory>
#include <string>
#include "chess.hpp"
using namespace chess;
class MyVisitor : public pgn::Visitor {
public:
void header(std::string_view key, std::string_view value) {}
void move(std::string_view move, std::string_view comment) {}
void startPgn() {}
void startMoves() {}
void endPgn() {}
};
int main(int argc, char const *argv[]) {
const auto file = "games.pgn";
auto file_stream = std::ifstream(file);
auto vis = std::make_unique<MyVisitor>();
pgn::StreamParser parser(file_stream);
parser.readGames(*vis);
return 0;
}