:py:mod:`socha._socha` ====================== .. py:module:: socha._socha Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: socha._socha.Card socha._socha.Advance socha._socha.EatSalad socha._socha.ExchangeCarrots socha._socha.FallBack socha._socha.Field socha._socha.Board socha._socha.TeamEnum socha._socha.Hare socha._socha.Move socha._socha.GameState socha._socha.RulesEngine socha._socha.PluginConstants .. py:class:: Card Bases: :py:obj:`enum.Enum` Eine Karte, die im Spiel verwendet werden kann. Attributes: FallBack (int): Die Karte, die den Spieler zurückfallen lässt. HurryAhead (int): Die Karte, die den Spieler vorrücken lässt. EatSalad (int): Die Karte, die den Spieler Salat essen lässt. SwapCarrots (int): Die Karte, die die Karotten der Spieler tauscht. .. py:attribute:: FallBack :type: int :value: 0 .. py:attribute:: HurryAhead :type: int :value: 1 .. py:attribute:: EatSalad :type: int :value: 2 .. py:attribute:: SwapCarrots :type: int :value: 3 .. py:method:: moves() -> bool Gibt an, ob die Karte den Spieler bewegt. Args: None Returns: bool: True, wenn die Karte den Spieler bewegt, False sonst. .. py:method:: perform(state: GameState, remaining_cards: List[Card]) -> None Führt die Karte aus. Diese Methode **kann** den GameState **mutieren**, unabhängig vom Erfolg des Zuges. Args: state (GameState): Der aktuelle Spielzustand. remaining_cards (List[Card]): Die verbleibenden Karten. Raises: HUIError: Ein Fehler, wenn die Karte nicht ausgeführt werden kann. .. py:class:: Advance(distance: int, cards: List[Card]) Eine Klasse, die einen Vorwärtszug im Spiel darstellt. Attributes: distance (int): Die Anzahl der Felder, die der Spieler vorrücken soll. cards (List[Card]): Die Karten, die während des Vorgangs gespielt werden. .. py:attribute:: distance :type: int .. py:attribute:: cards :type: List[Card] .. py:method:: perform(state: GameState) -> None Führt den Vorwärtszug aus. Diese Methode **kann** den GameState **mutieren**, unabhängig vom Erfolg des Zuges. Args: state (GameState): Der aktuelle Zustand des Spiels. Raises: HUIError: Wenn der Vorwärtszug nicht erfolgreich ausgeführt werden kann. .. py:class:: EatSalad .. py:method:: perform(state: GameState) -> None Führt die Salat-Fressen Aktion aus. Diese Methode **kann** den GameState **mutieren**, unabhängig vom Erfolg des Zuges. Args: state (GameState): Der aktuelle Zustand des Spiels. Raises: HUIError: Wenn der Salat nicht erfolgreich gegessen werden kann. .. py:class:: ExchangeCarrots(amount: int) .. py:attribute:: amount :type: int .. py:method:: perform(state: GameState) -> None Führt die Karotten-Tausch-Aktion aus. Diese Methode **kann** den GameState **mutieren**, unabhängig vom Erfolg des Zuges. Args: state (GameState): Der aktuelle Zustand des Spiels. Raises: HUIError: Wenn die Karotten nicht erfolgreich getauscht werden können. .. py:class:: FallBack .. py:method:: perform(state: GameState) -> None .. py:class:: Field Bases: :py:obj:`enum.Enum` Generic enumeration. Derive from this class to define new enumerations. .. py:attribute:: Position1 :type: int :value: 0 Zahlfeld .. py:attribute:: Position2 :type: int :value: 1 Flaggenfeld .. py:attribute:: Hedgehog :type: int :value: 2 Igelfeld: Hierauf kann nur rückwärts gezogen werden. .. py:attribute:: Salad :type: int :value: 3 Salatfeld: Beim Betreten wird im nächsten Zug ein Salat gegessen. .. py:attribute:: Carrots :type: int :value: 4 Karottenfeld: Hier dürfen Karotten getauscht werden. .. py:attribute:: Hare :type: int :value: 5 Hasenfeld: Hier wird sofort eine Hasenkarte gespielt. .. py:attribute:: Market :type: int :value: 6 Marktfeld: Hier wird eine Hasenkarte gekauft (Variation). .. py:attribute:: Goal :type: int :value: 7 Zielfeld .. py:attribute:: Start :type: int :value: 8 Startfeld .. py:class:: Board(track: list[Field]) Ein Spielbrett, das die Felder des Spiels enthält. Attributes: track (List[Field]): Die Liste der Felder, die das Spielbrett darstellen .. py:attribute:: track :type: list[Field] .. py:method:: get_field(index: int) -> Optional[Field] Gibt das Feld am angegebenen Index zurück. Args: index (int): Der Index des Feldes, das abgerufen werden soll. Returns: Field: Das Feld am angegebenen Index, oder None, wenn außerhalb des gültigen Bereichs. .. py:method:: find_field(field: Field, start: int, end: int) -> Optional[int] Findet den ersten Index des angegebenen Feldes innerhalb des angegebenen Bereichs. Args: field (Field): Das Feld, nach dem gesucht werden soll. start (int): Der Startindex des Bereichs, in dem gesucht werden soll. end (int): Der Endindex des Bereichs, in dem gesucht werden soll. Returns: int: Der Index des Feldes, wenn gefunden, oder None, wenn nicht gefunden. .. py:method:: get_previous_field(field: Field, index: int) -> Optional[int] Findet die vorherige Vorkommen des angegebenen Feldes vor dem angegebenen Index. Args: field (Field): Das Feld, nach dem gesucht werden soll. index (int): Der Index, von dem aus gesucht werden soll. Returns: int: Der Index des vorherigen Vorkommens des Feldes, oder None, wenn nicht gefunden. .. py:method:: get_next_field(field: Field, index: int) -> Optional[int] Findet das nächste Vorkommen des angegebenen Feldes nach dem angegebenen Index. Args: field (Field): Das Feld, nach dem gesucht werden soll. index (int): Der Index, von dem aus gesucht werden soll. Returns: int: Der Index des nächsten Vorkommens des Feldes, oder None, wenn nicht gefunden. .. py:class:: TeamEnum Bases: :py:obj:`enum.Enum` Generic enumeration. Derive from this class to define new enumerations. .. py:attribute:: One :type: int :value: 0 Team 1 .. py:attribute:: Two :type: int :value: 1 Team 2 .. py:method:: __repr__() -> str Return repr(self). .. py:class:: Hare(team: TeamEnum, cards: Optional[List[Card]] = None, carrots: Optional[int] = None, salads: Optional[int] = None, last_move: Optional[Move] = None, position: Optional[int] = None) Repräsentiert einen Hasen im Spiel. Attribute: team (TeamEnum): Das Team, dem der Hase angehört. position (int): Die aktuelle Position des Hasen auf dem Brett. salads (int): Die Anzahl der Salate, die der Hase hat. carrots (int): Die Anzahl der Karotten, die der Hase hat. last_move (Optional[Move]): Der letzte Zug, den der Hase gemacht hat. cards (List[Card]): Die Karten, die der Hase hat. .. py:attribute:: team :type: TeamEnum .. py:attribute:: position :type: int .. py:attribute:: salads :type: int .. py:attribute:: carrots :type: int .. py:attribute:: last_move :type: Optional[Move] .. py:attribute:: cards :type: List[Card] .. py:method:: is_in_goal() -> bool Überprüft, ob der Hase im Ziel ist. Returns: bool: True, wenn der Hase im Ziel ist, False sonst. .. py:method:: can_enter_goal() -> bool Überprüft, ob der Hase das Ziel betreten kann. Returns: bool: True, wenn der Hase das Ziel betreten kann, False sonst. .. py:method:: advance_by(state: GameState, distance: int, cards: List[Card]) -> None Rückt den Hasen um eine bestimmte Entfernung vor. Args: state (GameState): Der aktuelle Spielzustand. distance (int): Die Entfernung, um die der Hase vorrücken soll. cards (List[Card]): Die Karten, die während des Vorgangs gespielt werden. Raises: HUIError: Wenn der Hase nicht vorrücken kann. .. py:method:: exchange_carrots(state: GameState, carrots: int) -> None Tauscht Karotten mit dem Hasen. Args: state (GameState): Der aktuelle Spielzustand. carrots (int): Die Anzahl der Karotten, die getauscht werden sollen. Raises: HUIError: Wenn die Karotten nicht getauscht werden können. .. py:method:: consume_carrots(state: GameState, carrots: int) -> None Verbraucht Karotten vom Hasen. Args: state (GameState): Der aktuelle Spielzustand. carrots (int): Die Anzahl der Karotten, die verbraucht werden sollen. Raises: HUIError: Wenn die Karotten nicht verbraucht werden können. .. py:method:: eat_salad(state: GameState) -> None Lässt den Hasen einen Salat essen. Args: state (GameState): Der aktuelle Spielzustand. .. py:method:: get_fall_back(state: GameState) -> Optional[int] Gibt den nächsten möglich Index zurück, an dem der Hase zurückfallen kann. Args: state (GameState): Der aktuelle Spielzustand. Returns: Optional[int]: Die Rückfallposition des Hasen, oder None, wenn nicht gefunden. .. py:method:: fall_back(state: GameState) -> None Lässt den Hasen zu einer vorherigen Position zurückfallen. Args: state (GameState): Der aktuelle Spielzustand. Raises: HUIError: Wenn der Hase nicht zurückfallen kann. .. py:method:: is_ahead(state: GameState) -> bool Überprüft, ob der Hase vor dem anderen Spieler ist. Args: state (GameState): Der aktuelle Spielzustand. Returns: bool: True, wenn der Hase vor dem anderen Spieler ist, False sonst. .. py:class:: Move(action: Advance | EatSalad | ExchangeCarrots | FallBack) Repräsentiert einen Zug im Spiel. Attribute: action (Advance | EatSalad | ExchangeCarrots | FallBack): Die Aktion, die der Zug ausführt. .. py:attribute:: action :type: Advance | EatSalad | ExchangeCarrots | FallBack .. py:method:: perform(state: GameState) -> None Führt den Zug aus. Args: state (GameState): Der aktuelle Spielzustand. Raises: HUIError: Wenn der Zug nicht ausgeführt werden kann. .. py:method:: __repr__() -> str Return repr(self). .. py:class:: GameState(board: Board, turn: int, player_one: Hare, player_two: Hare) Repräsentiert den aktuellen Zustand des Spiels. Attribute: board (Board): Das Spielbrett. turn (int): Die aktuelle Runde. .. py:attribute:: board :type: Board .. py:attribute:: turn :type: int .. py:method:: perform_move(move: Move) -> GameState Führt einen Zug aus und gibt den neuen Spielzustand zurück. Args: move (Move): Der Zug, der ausgeführt werden soll. Returns: GameState: Der neue Spielzustand. Raises: HUIError: Wenn der Zug nicht ausgeführt werden kann. .. py:method:: clone_current_player() -> Hare Gibt eine Kopie des aktuellen Spielers zurück. Returns: Hare: Eine Kopie des aktuellen Spielers. .. py:method:: clone_other_player() -> Hare Gibt eine Kopie des anderen Spielers zurück. Returns: Hare: Eine Kopie des anderen Spielers. .. py:method:: update_player(player: Hare) -> None Aktualisiert den Spieler. Args: player (Hare): Der Spieler, der aktualisiert werden soll. .. py:method:: is_over() -> bool Überprüft, ob das Spiel vorbei ist. Returns: bool: True, wenn das Spiel vorbei ist, False sonst. .. py:method:: possible_moves() -> List[Move] Gibt eine Liste aller möglichen Züge zurück. Returns: List[Move]: Eine Liste aller möglichen Züge. .. py:class:: RulesEngine Dient zur Überprüfung der Spielregeln. .. py:method:: calculates_carrots(distance: int) -> int :staticmethod: Berechnet die Anzahl der Karotten, die für einen Zug benötigt werden. Args: distance (int): Die Entfernung, die zurückgelegt werden soll. Returns: int: Die Anzahl der Karotten, die benötigt werden. .. py:method:: can_exchange_carrots(board: Board, player: Hare, count: int) -> None :staticmethod: Überprüft, ob ein Spieler Karotten tauschen kann. Args: board (Board): Das Spielbrett. player (Hare): Der Spieler, der Karotten tauschen möchte. count (int): Die Anzahl der Karotten, die getauscht werden sollen. Raises: HUIError: Wenn der Spieler nicht genug Karotten hat oder wenn das Feld nicht ein Karottenfeld ist. .. py:method:: can_eat_salad(board: Board, player: Hare) -> None :staticmethod: Überprüft, ob ein Spieler einen Salat essen kann. Args: board (Board): Das Spielbrett. player (Hare): Der Spieler, der einen Salat essen möchte. Raises: HUIError: Wenn der Spieler keinen Salat hat oder wenn das Feld nicht ein Salatfeld ist. .. py:method:: has_to_eat_salad(board: Board, player: Hare) -> None :staticmethod: Überprüft, ob ein Spieler einen Salat essen muss. Args: board (Board): Das Spielbrett. player (Hare): Der Spieler, der einen Salat essen muss. Raises: Exception: Wenn der Spieler nicht genug Salate hat oder wenn das Feld nicht ein Salatfeld ist. .. py:method:: can_move_to(board: Board, new_position: int, player: Hare, other_player: Hare, cards: List[Card]) -> None :staticmethod: Überprüft, ob ein Spieler zu einem bestimmten Feld ziehen kann. Args: board (Board): Das Spielbrett. new_position (int): Die neue Position, zu der der Spieler ziehen möchte. player (Hare): Der Spieler, der ziehen möchte. other_player (Hare): Der andere Spieler. cards (List[Card]): Die Karten, die der Spieler spielen möchte. Raises: Exception: Wenn das Feld besetzt ist oder wenn der Spieler nicht genug Karotten hat. .. py:class:: PluginConstants .. py:attribute:: NUM_FIELDS :type: int .. py:attribute:: INITIAL_SALADS :type: int .. py:attribute:: INITIAL_CARROTS :type: int .. py:attribute:: ROUND_LIMIT :type: int