Xiangiqgame
AI engine for Xiangqi
Loading...
Searching...
No Matches
game_interfaces.py
Go to the documentation of this file.
1"""
2Python abstract classes used by a Game.
3"""
4
5import abc
6from dataclasses import dataclass
7from typing import Dict, List
8
9import numpy as np
10import pandas as pd
11import xiangqi_bindings as bindings
12
14from xiangqipy.enums import GameState, PlayerType, EvaluatorType
15from xiangqipy.player_summary import PlayerSummary
16
17
18class Player(abc.ABC):
19 """
20 Can take a turn in a Game.
21 """
22
24 self,
25 color: bindings.PieceColor,
26 player_type: PlayerType,
27 evaluator_type: EvaluatorType = EvaluatorType.NULL,
28 ) -> None:
29 self._color = color
30 self._player_type = player_type
31 self._evaluator_type = evaluator_type
32
33 @abc.abstractmethod
35 self, game_board: bindings.GameBoard, cur_moves: List[bindings.Move]
36 ) -> bindings.Move:
37 pass
38
39 @abc.abstractmethod
41 self,
42 illegal_move: bindings.Move,
43 game_board: bindings.GameBoard,
44 cur_moves: List[bindings.Move],
45 ):
46 pass
47
48 @property
49 def player_type(self) -> PlayerType:
50 return self._player_type
51
52 @property
53 def move_evaluator_type(self) -> EvaluatorType:
54 return self._evaluator_type
55
56 @property
57 def max_search_depth(self) -> int | None:
58 if self._evaluator_type == EvaluatorType.MINIMAX:
59 return self._move_evaluator.search_depth()
60
61 @property
62 def zkeys_seed(self) -> int | None:
63 if self._evaluator_type == EvaluatorType.MINIMAX:
64 return self._move_evaluator.zkeys_seed
65
66 @property
67 def zobrist_key_size(self) -> int | None:
68 if self._evaluator_type == EvaluatorType.MINIMAX:
69 return self._move_evaluator.zobrist_key_size_bits()
70
71 @property
72 def search_summaries(self) -> cdm.SearchSummaries | None:
73 if self._evaluator_type == EvaluatorType.MINIMAX:
74 return cdm.SearchSummaries.from_core_search_summaries(
75 core_search_summaries=self._move_evaluator.search_summaries
76 )
77
78 @property
79 def summary(self) -> PlayerSummary:
80 return PlayerSummary(
81 color=self._color,
82 player_type=self.player_type,
83 move_evaluator_type=self.move_evaluator_type,
84 max_search_depth=self.max_search_depth,
85 zobrist_key_size=self.zobrist_key_size,
86 zkeys_seed=self.zkeys_seed,
87 search_summaries=self.search_summaries,
88 )
89
90
91class MoveReporter(abc.ABC):
92 """
93 Reports details of a Game.
94 """
95
96 @abc.abstractmethod
98 self,
99 red_player_summary: PlayerSummary,
100 black_player_summary: PlayerSummary,
101 game_state: GameState,
102 game_board: bindings.GameBoard,
103 whose_turn: bindings.PieceColor,
104 is_in_check: bool,
105 move_count: int,
106 prev_move: bindings.Move = None,
107 ):
108 pass
def report_game_info(self, PlayerSummary red_player_summary, PlayerSummary black_player_summary, GameState game_state, bindings.GameBoard game_board, bindings.PieceColor whose_turn, bool is_in_check, int move_count, bindings.Move prev_move=None)
Can take a turn in a Game.
EvaluatorType move_evaluator_type(self)
None __init__(self, bindings.PieceColor color, PlayerType player_type, EvaluatorType evaluator_type=EvaluatorType.NULL)
cdm.SearchSummaries|None search_summaries(self)
def illegal_move_notice_response(self, bindings.Move illegal_move, bindings.GameBoard game_board, List[bindings.Move] cur_moves)
bindings.Move propose_move(self, bindings.GameBoard game_board, List[bindings.Move] cur_moves)
Data container for data from one xiangqipy.game_interfaces.Player in a Game.
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
Contains PlayerSummary class.