Xiangiqgame
AI engine for Xiangqi
Loading...
Searching...
No Matches
game_summary_converter.py
Go to the documentation of this file.
1import xiangqi_bindings as xb
3import xiangqipy.game_summary as pgs
4import xiangqipy.player_summary as pps
5import xiangqipy.enums as pen
6
7
9 _move_evaluator_type_converter = {
10 xb.EvaluatorType.kHuman: pen.EvaluatorType.NULL,
11 xb.EvaluatorType.kRandom: pen.EvaluatorType.RANDOM,
12 xb.EvaluatorType.kMinimax: pen.EvaluatorType.MINIMAX,
13 }
14
16 self,
17 core_player_spec: xb.PlayerSpec,
18 core_search_summaries: xb.SearchSummaries,
19 ):
20 self.core_player_spec = core_player_spec
21 self.core_search_summaries = core_search_summaries
22
23 @property
24 def py_color(self) -> xb.PieceColor:
25 return self.core_player_spec.color
26
27 @property
28 def py_player_type(self) -> pen.PlayerType:
29 if self.core_player_spec.evaluator_type == xb.EvaluatorType.kHuman:
30 return pen.PlayerType.HUMAN
31 else:
32 return pen.PlayerType.AI
33
34 @property
35 def py_move_evaluator_type(self) -> pen.EvaluatorType:
37 self.core_player_spec.evaluator_type
38 ]
39
40 @property
41 def py_max_search_depth(self) -> int:
42 return self.core_player_spec.minimax_search_depth
43
44 @property
45 def py_zobrist_key_size(self) -> int:
46 return self.core_player_spec.zobrist_key_size_bits
47
48 @property
49 def py_zkeys_seed(self) -> int:
50 return self.core_player_spec.zkeys_seed
51
52 @property
53 def py_search_summaries(self) -> cdm.SearchSummaries:
54 if self.core_search_summaries is not None:
55 return cdm.SearchSummaries.from_core_search_summaries(
56 core_search_summaries=self.core_search_summaries
57 )
58
59 def convert(self) -> pps.PlayerSummary:
60 return pps.PlayerSummary(
61 color=self.py_color,
62 player_type=self.py_player_type,
63 move_evaluator_type=self.py_move_evaluator_type,
64 max_search_depth=self.py_max_search_depth,
65 zobrist_key_size=self.py_zobrist_key_size,
66 zkeys_seed=self.py_zkeys_seed,
67 search_summaries=self.py_search_summaries,
68 )
69
70
72 _game_state_converter = {
73 xb.GameState.kUnfinished: pen.GameState.UNFINISHED,
74 xb.GameState.kRedWon: pen.GameState.RED_WON,
75 xb.GameState.kBlkWon: pen.GameState.BLACK_WON,
76 xb.GameState.kDraw: pen.GameState.DRAW,
77 }
78
79 def __init__(self, core_game_summary: xb.GameSummary):
80 self.core_game_summary = core_game_summary
81
82 @property
83 def py_game_id(self) -> str:
84 return self.core_game_summary.game_id
85
86 @property
87 def py_game_state(self) -> pen.GameState:
88 return self._game_state_converter[self.core_game_summary.game_state]
89
90 @property
91 def py_whose_turn(self) -> xb.PieceColor:
92 last_move = self.core_game_summary.move_log[-1]
93 last_move_piece = last_move.moving_piece
94 last_move_color = last_move_piece.piece_color
95 return xb.opponent_of(last_move_color)
96
97 @property
98 def py_move_log(self) -> list[xb.ExecutedMove]:
99 return [
100 cdm.ExecutedMove.from_core_executed_move(move)
101 for move in self.core_game_summary.move_log
102 ]
103 # return self.core_game_summary.move_log
104
105 @property
106 def py_player_summaries(self) -> pgs.PlayerSummaries:
107 return pgs.PlayerSummaries(
109 core_player_spec=self.core_game_summary.player_specs[
110 xb.PieceColor.kRed
111 ],
112 core_search_summaries=self.core_game_summary.search_summaries.get(
113 xb.PieceColor.kRed
114 ),
115 ).convert(),
117 core_player_spec=self.core_game_summary.player_specs[
118 xb.PieceColor.kBlk
119 ],
120 core_search_summaries=self.core_game_summary.search_summaries.get(
121 xb.PieceColor.kBlk
122 ),
123 ).convert(),
124 )
125
126 def convert(self) -> pgs.GameSummary:
127 return pgs.GameSummary(
128 game_id=self.py_game_id,
129 game_state=self.py_game_state,
130 whose_turn=self.py_whose_turn,
131 move_log=self.py_move_log,
132 player_summaries=self.py_player_summaries,
133 )
def __init__(self, xb.PlayerSpec core_player_spec, xb.SearchSummaries core_search_summaries)
Contains classes that mirror the structure of some core C++ classes, primarily to facilitate easy IO ...
Enums that are only used on the Python side of the app.
Definition: enums.py:1
GameSummary class and its component classes.
Definition: game_summary.py:1
Contains PlayerSummary class.