#include #include #include #include #include "board.hpp" #include "moves.hpp" Piece NonePiece = { false, NONE, false, }; #include void PrintMoves(const std::vector &moves) { std::cout << "Moves (" << moves.size() << "):\n"; for (const Move &move : moves) { std::cout << "(" << (int)move.From.file << ", " << (int)move.From.rank << ") -> (" << (int)move.To.file << ", " << (int)move.To.rank << ")\n"; } } int main(int argc, char **argv) { std::string startingFen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; if (argc < 1 || argc > 2) { printf("wrong arg count, use: ./chess [optinal starting fen]\n"); return 1; } printf("arg count: %d\n", argc); if (argc == 2) { startingFen = argv[1]; } board b; b.turn = true; b.castle = ""; b.halfMoveClock = 0; b.MoveClock = 0; for (int i = 0; i < 64; i++) { b.pieces[i] = NonePiece; }; setBoardFen(startingFen, &b); printBoard(&b); auto moves = GetLegalMoves(&b); PrintMoves(moves); while (true) { std::cout << "> "; std::string command; std::cin >> command; transform(command.begin(), command.end(), command.begin(), ::toupper); if (command.length() != 4) { std::cout << "Unknown Command, use EXIT to exit"; std::println(); continue; } if (command == "EXIT") { std::println(); std::cout << "Exiting...\n"; return 0; } std::cout << command; std::println(); } return EXIT_SUCCESS; }