Xiangiqgame
AI engine for Xiangqi
Loading...
Searching...
No Matches
move_evaluator_random_for_concepts.cpp
Go to the documentation of this file.
3
4namespace moveselection {
5
6// RandomMoveEvaluatorForConcepts methods
7
9 gameboard::PieceColor evaluating_player
10)
11 : evaluating_player_{evaluating_player}
12 , prng_{std::mt19937_64{std::random_device{}()}} {}
13
14std::unique_ptr<RandomMoveEvaluatorForConcepts> RandomMoveEvaluatorForConcepts::Create(
15 gameboard::PieceColor evaluating_player
16) {
17 return std::unique_ptr<RandomMoveEvaluatorForConcepts>(
18 new RandomMoveEvaluatorForConcepts(evaluating_player)
19 );
20}
21
23 const gameboard::MoveCollection &allowed_moves
24) {
25 std::uniform_int_distribution<size_t> distr(0, allowed_moves.Size() - 1);
26 auto selected_move_index = distr(prng_);
27 return allowed_moves.moves[selected_move_index];
28}
29
31 throw std::runtime_error("RandomMoveEvaluator selected an illegal move");
32}
33
34// RandomMoveEvaluator factory methods
35
36std::unique_ptr<MoveEvaluatorBase> RandomMoveEvaluatorFactory::Create(
37 gameboard::PieceColor evaluating_player
38) {
39 return RandomMoveEvaluatorForConcepts::Create(evaluating_player);
40}
41
42} // namespace moveselection
std::unique_ptr< MoveEvaluatorBase > Create(gameboard::PieceColor evaluating_player) override
gameboard::Move SelectMove(const gameboard::MoveCollection &allowed_moves)
Randomly selects move from collection of allowed moves.
static std::unique_ptr< RandomMoveEvaluatorForConcepts > Create(gameboard::PieceColor evaluating_player)
Instantiates RandomMoveEvaluatorForConcepts in heap.
RandomMoveEvaluatorForConcepts(gameboard::PieceColor evaluating_player)
Constructor is private to force use of static Create method.
Selecting a move to execute.
A container for multiple gameboard::Move objects.
A gameboard::BoardSpace pair (start and end).