aboutsummaryrefslogtreecommitdiff
path: root/src/repl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/repl.cpp')
-rw-r--r--src/repl.cpp162
1 files changed, 0 insertions, 162 deletions
diff --git a/src/repl.cpp b/src/repl.cpp
deleted file mode 100644
index b936af0..0000000
--- a/src/repl.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-#include "repl.hpp"
-#include "board.hpp"
-#include "bot.hpp"
-#include "moves.hpp"
-#include <algorithm>
-#include <cctype>
-#include <cstdint>
-#include <cstdlib>
-#include <iostream>
-#include <print>
-#include <string>
-
-bool isValidChessRank(char rank) {
- if (rank >= '1' && rank <= '8') {
- return true;
- } else {
- return false;
- }
-}
-bool isValidChessFile(char rank) {
- if (rank >= 'A' && rank <= 'H') {
- return true;
- } else {
- return false;
- }
-}
-int startREPL(Board *b) {
- printBoard(b);
- while (true) {
- GetLegalMoves(b);
- if (b->state == STALEMATE) {
- printBoard(b);
- std::println();
- std::cout << "\033[1mStalemate\033[0m" << "\n";
- std::println();
- return 0;
- }
- if (b->state == DRAW) {
- printBoard(b);
- std::println();
- std::cout << "\033[1mDraw\033[0m" << "\n";
- std::println();
- return 0;
- }
- if (b->state == WHITE_WON) {
- printBoard(b);
- std::cout << "\033[1mChechmate White won\033[0m" << "\n";
- return 0;
- }
- if (b->state == BLACK_WON) {
- printBoard(b);
- std::cout << "\033[1mCheckmate Black won\033[0m" << "\n";
- return 0;
- }
- if (b->state == TURN) {
- if (true) {
- Move move = EngineGetBestMove(b);
- PlayMove(move, b);
- printBoard(b);
- continue;
- }
- }
- std::cout << "> ";
- std::string command;
- if (!(std::cin >> command)) {
- std::println();
- std::cout << "Exiting...\n";
- return EXIT_SUCCESS;
- }
-
- std::transform(command.begin(), command.end(), command.begin(), ::toupper);
-
- std::cout << command << "\n";
- if (command == "EXIT") {
- std::println();
- std::cout << "Exiting...\n";
- return EXIT_SUCCESS;
- }
- if (command == "RESING") {
- std::cout << "\033[1mOK\033[0m" << "\n";
- if (b->turn) {
- b->state = BLACK_WON;
- } else {
- b->state = WHITE_WON;
- }
- continue;
- }
- if (command == "BOARD") {
- printBoard(b);
- continue;
- }
- if (command == "MOVES" || command == "MOVE") {
- auto moves = GetLegalMoves(b);
- PrintMoves(moves);
- continue;
- }
- if (command.length() != 4) {
- std::cout << "Unknown Command, use EXIT to exit";
- std::println();
- continue;
- }
- if (b->state == TURN) {
- if (!isValidChessFile(command[0])) {
- std::cout << "ERROR: Expected valid file at first place";
- std::println();
- continue;
- }
-
- if (!isValidChessRank(command[1])) {
- std::cout << "ERROR: Expected valid rank at second place";
- std::println();
- continue;
- }
-
- if (!isValidChessFile(command[2])) {
- std::cout << "ERROR: Expected valid file at third place";
- std::println();
- continue;
- }
-
- if (!isValidChessRank(command[3])) {
- std::cout << "ERROR: Expected valid rank at four place";
- std::println();
- continue;
- }
-
- // we know its a valid chess pos
- int fromFile = command[0] - 'A';
- int fromRank = '8' - command[1];
- int toFile = command[2] - 'A';
- int toRank = '8' - command[3];
- std::cout << fromFile << "\n";
- std::cout << fromRank << "\n";
- std::cout << toFile << "\n";
- std::cout << toRank << "\n";
- Move move = {
- {static_cast<uint8_t>(fromRank), static_cast<uint8_t>(fromFile)},
- {static_cast<uint8_t>(toRank), static_cast<uint8_t>(toFile)}};
-
- auto moves = GetLegalMoves(b);
- if (!(std::ranges::find(moves, move) != moves.end())) {
- std::cout << "Invalid move!";
- std::println();
- PrintMoves(moves);
- continue;
- }
- std::println();
- PlayMove(move, b);
- printBoard(b);
- }
- }
-}
-
-void PrintMoves(const std::vector<Move> &moves) {
- std::cout << "Moves (" << moves.size() << "):\n";
-
- for (const Move &move : moves) {
- std::cout << (char)((int)move.From.file + 'A') << 8 - (int)move.From.rank
- << " -> " << (char)((int)move.To.file + 'A')
- << 8 - (int)move.To.rank << "\n";
- }
-}