very easily implemented the human_vs_ai controller
Some checks failed
pre-release / Pre Release (push) Waiting to run
tagged-release / Tagged Release (push) Has been cancelled

(god i love a good design)
This commit is contained in:
Karma Riuk
2025-02-06 20:12:12 +01:00
parent 60e1a77fcb
commit 74e4d596a7
4 changed files with 52 additions and 3 deletions

View File

@ -0,0 +1,32 @@
#include "human_vs_ai.hpp"
#include <algorithm>
HumanVsAIController::HumanVsAIController(Board b, View& v, ai::AI& ai)
: ManualController(b, v),
ai(ai) {
view.set_controller(this);
reset_selection();
}
void HumanVsAIController::on_tile_selected(int x, int y) {
Coords c{x, y};
Piece piece = board.piece_at(c);
if (selected_index == -1
|| (piece != Piece::None && piece != selected_piece
&& (piece & 0b11000) != (selected_piece & 0b11000))) {
show_legal_moves(c);
} else {
auto boh = std::find(targets.begin(), targets.end(), c.to_index());
if (boh != targets.end()) {
make_move(Move{selected_index, c.to_index()});
if (board.is_terminal())
return;
Move ai_move = ai.search(board);
make_move(ai_move);
} else
reset_selection();
}
}

View File

@ -0,0 +1,14 @@
#pragma once
#include "../model/ais/ai.hpp"
#include "../view/view.hpp"
#include "manual.hpp"
class HumanVsAIController : public ManualController {
protected:
ai::AI& ai;
public:
HumanVsAIController(Board, View&, ai::AI&);
void on_tile_selected(int, int) override;
};

View File

@ -6,7 +6,7 @@
#include "controller.hpp"
class ManualController : public Controller {
private:
protected:
View& view;
int8_t selected_index;
Piece selected_piece;