// #include // #include "SchachHoernchen/utils.h" // #include "SchachHoernchen/Board.h" // #include "SchachHoernchen/uci.h" // // [[Rcpp::export(name = "print.board", rng = false)]] // void print_board( // const Board& board, // const bool check = true, // const bool attacked = false, // const bool pinned = false, // const bool checkers = false // ) { // using Rcpp::Rcout; // // Extract some properties // piece color = board.sideToMove(); // piece enemy = static_cast(!color); // u64 empty = ~(board.bb(piece::white) | board.bb(piece::black)); // u64 cKing = board.bb(king) & board.bb(color); // // Construct highlight mask // u64 attackMask = board.attacks(enemy, empty); // u64 mask = 0; // mask |= check ? attackMask & board.bb(color) & board.bb(king) : 0; // mask |= attacked ? attackMask & ~board.bb(color) : 0; // mask |= pinned ? board.pinned(enemy, cKing, empty) : 0; // mask |= checkers ? board.checkers(enemy, cKing, empty) : 0; // // print the board to console // Rcout << "FEN: " << board.fen() << '\n'; // for (Index line = 0; line < 17; line++) { // if (line % 2) { // Index rankIndex = line / 2; // Rcout << static_cast('8' - rankIndex); // for (Index fileIndex = 0; fileIndex < 8; fileIndex++) { // Index squareIndex = 8 * rankIndex + fileIndex; // if (bitMask(squareIndex) & mask) { // if (board.piece(squareIndex)) { // if (board.color(squareIndex) == black) { // // bold + italic + underline + black (blue) // Rcout << " | \033[1;3;4;94m"; // } else { // // bold + italic + underline (+ white) // Rcout << " | \033[1;3;4m"; // } // Rcout << UCI::formatPiece(board.piece(squareIndex)) // << "\033[0m"; // } else { // Rcout << " | ."; // } // } else if (board.color(squareIndex) == black) { // Rcout << " | \033[1m\033[94m" // bold + blue (black) // << UCI::formatPiece(board.piece(squareIndex)) // << "\033[0m"; // } else if (board.color(squareIndex) == white) { // Rcout << " | \033[1m\033[97m" // bold + white // << UCI::formatPiece(board.piece(squareIndex)) // << "\033[0m"; // } else { // Rcout << " | "; // } // } // Rcout << " |"; // } else { // Rcout << " +---+---+---+---+---+---+---+---+"; // } // Rcout << "\033[0K\n"; // clear rest of line (remove potential leftovers) // } // Rcout << " a b c d e f g h" << std::endl; // }