Xiangiqgame
AI engine for Xiangqi
Loading...
Searching...
No Matches
move_translator.py
Go to the documentation of this file.
1"""
2Contains functions used to convert algebraic board notation into
3integer indices array notation.
4"""
5
6import re
7from xiangqi_bindings import BoardSpace, Move
8from typing import List
9
10
11def parse_input(player_input: str) -> List[str]:
12 first_step = player_input.strip().split(',')
13 return [item.strip() for item in first_step]
14
15
16def is_valid_algebraic_pair(parsed_input: List[str]) -> bool:
17 return len(parsed_input) == 2 and all([
18 re.fullmatch('^[a-i](?:10|[1-9])$', item) for item in parsed_input
19 ])
20
21
22def algebraic_space_to_boardspace(algebraic_space: str) -> BoardSpace:
23 alg_column = algebraic_space[0]
24 file = ord(alg_column) - ord('a')
25 alg_row = algebraic_space[1:]
26 rank = 10 - int(alg_row)
27
28 return BoardSpace(rank=rank, file=file)
29
30
31def boardspace_to_algebraic_space(board_space: BoardSpace) -> str:
32 alg_column = chr(board_space.file + ord('a'))
33 alg_row = str(10 - board_space.rank)
34 return f"{alg_column}{alg_row}"
35
36
37def convert_parsed_input_to_move(parsed_input: List[str]) -> Move:
38 board_space_from_to = [
39 algebraic_space_to_boardspace(entry) for entry in parsed_input]
40 return Move(start=board_space_from_to[0], end=board_space_from_to[1])
41
42
43def convert_move_to_input_str(move: Move) -> str:
44 from_str = boardspace_to_algebraic_space(move.start)
45 to_str = boardspace_to_algebraic_space(move.end)
46 return f"{from_str}, {to_str}"
Move convert_parsed_input_to_move(List[str] parsed_input)
str convert_move_to_input_str(Move move)
bool is_valid_algebraic_pair(List[str] parsed_input)
BoardSpace algebraic_space_to_boardspace(str algebraic_space)
List[str] parse_input(str player_input)
str boardspace_to_algebraic_space(BoardSpace board_space)