Xiangiqgame
AI engine for Xiangqi
Loading...
Searching...
No Matches
game_factory.hpp
Go to the documentation of this file.
1#pragma once
2
5#include <game/game.hpp>
12#include <memory>
18#include <unordered_map>
19
20namespace game {
21
23 std::unordered_map<
25 std::shared_ptr<MoveEvaluatorFactoryBase>,
29 std::istream &input_stream_;
30 std::shared_ptr<gameboard::GameBoardForConcepts> game_board_;
31
32 inline static const std::unordered_map<size_t, ZobristKeyType> zkey_bitcount_to_enum_ =
37
38 inline static const std::unordered_map<size_t, ZobristCalculatorCount>
43 };
44
45public:
47 const PlayerSpec &player_spec,
48 std::shared_ptr<gameboard::GameBoardForConcepts> game_board,
49 std::istream &input_stream = std::cin
50 );
51
52 std::shared_ptr<MoveEvaluatorFactoryBase> GetFactory();
53};
54
62
63public:
65 PlayerSpec red_player_spec,
66 PlayerSpec black_player_spec,
67 std::istream &red_player_input_stream = std::cin,
68 std::istream &black_player_input_stream = std::cin,
69 bool report_during_game = true
70 )
71 : red_player_spec_{red_player_spec}
72 , black_player_spec_{black_player_spec}
73 , red_player_input_stream_{red_player_input_stream}
74 , black_player_input_stream_{black_player_input_stream}
75 , report_during_game_{report_during_game}
77
78 std::unique_ptr<Game> Create() {
79 auto game_board = game_board_factory_.Create();
80
81 std::unordered_map<gameboard::PieceColor, PlayerSpec> player_specs;
82 player_specs.emplace(gameboard::PieceColor::kRed, red_player_spec_);
84
85 std::unordered_map<gameboard::PieceColor, std::unique_ptr<MoveEvaluatorBase>>
86 evaluators;
87
88 auto evaluator_factory_retriever_red =
90 auto evalutor_factory_red = evaluator_factory_retriever_red.GetFactory();
91 evaluators.emplace(
93 evalutor_factory_red->Create(gameboard::PieceColor::kRed)
94 );
95
96 auto evaluator_factory_retriever_black =
98 auto evalutor_factory_black = evaluator_factory_retriever_black.GetFactory();
99 evaluators.emplace(
101 evalutor_factory_black->Create(gameboard::PieceColor::kBlk)
102 );
103
104 std::shared_ptr<GameReporterInterface> game_reporter =
105 std::make_shared<terminalout::TerminalGameReporter>(
108 );
109
110 return std::make_unique<Game>(
111 game_board,
112 player_specs,
113 std::move(evaluators),
114 game_reporter,
116 );
117 }
118};
119
120} // namespace game
static const std::unordered_map< size_t, ZobristCalculatorCount > num_zcalculators_to_enum_
std::shared_ptr< gameboard::GameBoardForConcepts > game_board_
std::unordered_map< MinimaxTypeInfo, std::shared_ptr< MoveEvaluatorFactoryBase >, MinimaxTypeInfoHash > minimax_factories_
const PlayerSpec & player_spec_
static const std::unordered_map< size_t, ZobristKeyType > zkey_bitcount_to_enum_
std::shared_ptr< MoveEvaluatorFactoryBase > GetFactory()
PlayerSpec red_player_spec_
gameboard::GameBoardFactory game_board_factory_
std::istream & red_player_input_stream_
GameFactory(PlayerSpec red_player_spec, PlayerSpec black_player_spec, std::istream &red_player_input_stream=std::cin, std::istream &black_player_input_stream=std::cin, bool report_during_game=true)
std::istream & black_player_input_stream_
std::unique_ptr< Game > Create()
PlayerSpec black_player_spec_
std::shared_ptr< GameBoardForConcepts > Create(const BoardMapInt_t &starting_board=kStandardInitialBoard)
Definition: game.hpp:19
Tracking piece positions and determining legal moves.