Source code for chipiron.players.move_selector.human

"""
This module contains the implementation of the CommandLineHumanMoveSelector class, which allows a human player
 to select moves through the command line interface.
"""

from dataclasses import dataclass
from typing import Literal

import chipiron.environments.chess_env.board as boards
from chipiron.environments.chess_env.move import moveUci
from chipiron.environments.chess_env.move.imove import moveKey
from chipiron.utils import seed

from .move_selector import MoveRecommendation
from .move_selector_types import MoveSelectorTypes


[docs]@dataclass class CommandLineHumanPlayerArgs: """ Represents the arguments for a human player that selects moves through the command line interface. """ type: Literal[MoveSelectorTypes.CommandLineHuman] # for serialization
[docs]@dataclass class GuiHumanPlayerArgs: """ Represents the arguments for a human player that selects moves through the GUI. """ type: Literal[MoveSelectorTypes.GuiHuman] # for serialization
[docs]class CommandLineHumanMoveSelector: """ A move selector that allows a human player to select moves through the command line interface. """
[docs] def select_move(self, board: boards.IBoard, move_seed: seed) -> MoveRecommendation: """ Selects a move based on user input through the command line interface. Args: board (boards.BoardChi): The current state of the chess board. move_seed (seed): The seed used for move selection. Returns: MoveRecommendation: The selected move recommendation. Raises: AssertionError: If the selected move is not a legal move. """ print(f"Legal Moves {board.legal_moves}") legal_moves_uci: list[moveUci] = [] move: moveKey for move in board.legal_moves: legal_moves_uci.append(board.get_uci_from_move_key(move)) print(f"Legal Moves {legal_moves_uci}") good_move: bool = False while not good_move: move_uci: str = input("Input your move") print(f"choice of move {move_uci}") if move_uci in legal_moves_uci: good_move = True else: print("Bad move, Not legal") assert move_uci in legal_moves_uci return MoveRecommendation(move=move_uci, evaluation=None)