:py:mod:`socha._socha`
======================
.. py:module:: socha._socha
Module Contents
---------------
Classes
~~~~~~~
.. autoapisummary::
socha._socha.Coordinate
socha._socha.Vector
socha._socha.Direction
socha._socha.FieldType
socha._socha.TeamEnum
socha._socha.Board
socha._socha.Move
socha._socha.GameState
socha._socha.RulesEngine
socha._socha.PluginConstants
.. py:class:: Coordinate(x: int, y: int)
Eine 2 dimensionale Koordinate auf einem Spielfeld.
Attributes:
x (int): Der x-Wert.
y (int): Der y-Wert.
.. py:attribute:: x
:type: int
.. py:attribute:: y
:type: int
.. py:method:: __str__() -> str
Return str(self).
.. py:method:: __repr__() -> str
Return repr(self).
.. py:method:: __eq__(other: Coordinate) -> bool
Unterstützt den Vergleichsoperator ==, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (Coordinate): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: __ne__(other: Coordinate) -> bool
Unterstützt den Vergleichsoperator !=, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (Coordinate): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: deepcopy() -> Coordinate
Kopiert das Objekt rekursiv.
.. py:method:: add_vector(vector: Vector) -> Coordinate
Addiert einen Vector auf die Werte dieser Koordinate (**nicht mutierend**).
Args:
vector (Vector): Der Vektor.
Returns:
Coordinate: Ein neues Koordinatenobjekt mit den berechneten Werten.
.. py:method:: add_vector_mut(vector: Vector) -> None
Addiert einen Vector auf die Werte dieser Koordinate (**mutierend**).
Args:
vector (Vector): Der Vektor.
.. py:method:: get_difference(other: Coordinate) -> Vector
Berechnet die Differenz zwischen zwei Koordinaten Punkten als Vektor.
Args:
other (Coordinate): Die andere Koordinate
Returns:
Vector: Der Vektor zwischen den Punkten
.. py:class:: Vector(delta_x: int, delta_y: int)
Ein 2 dimensionaler Vektor.
Attributes:
delta_x (int): Die Entfernung in x-Richtung.
delta_y (int): Die Entfernung in y-Richtung.
.. py:attribute:: delta_x
:type: int
.. py:attribute:: delta_y
:type: int
.. py:method:: __str__() -> str
Return str(self).
.. py:method:: __repr__() -> str
Return repr(self).
.. py:method:: __eq__(other: Vector) -> bool
Unterstützt den Vergleichsoperator ==, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (Vector): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: __ne__(other: Vector) -> bool
Unterstützt den Vergleichsoperator !=, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (Vector): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: deepcopy() -> GameState
Kopiert das Objekt rekursiv.
.. py:method:: add_vector(other: Vector) -> Vector
Addiert einen anderen Vector auf die Werte dieses Vektors (**nicht mutierend**).
Args:
other (Vector): Der andere Vektor.
Returns:
Vector: Ein neues Vektorobjekt mit den berechneten Werten.
.. py:method:: add_vector_mut(other: Vector) -> None
Addiert einen anderen Vector auf die Werte dieses Vektors (**mutierend**).
Args:
other (Vector): Der andere Vektor.
.. py:method:: scale(scalar: int) -> Vector
Skaliert diesen Vektor um ein gegebenes Skalar (**nicht mutierend**).
Args:
scalar (int): Das Skalar.
Returns:
Vector: Ein neues Vektorobjekt mit den berechneten Werten.
.. py:method:: scale_mut(scalar: int) -> None
Skaliert diesen Vektor um ein gegebenes Skalar (**mutierend**).
Args:
scalar (int): Das Skalar.
.. py:method:: get_length() -> float
Berechnet die Länge dieses Vektors.
Returns:
float: Die Länge des Vektors (in 32 bit Präzision).
.. py:class:: Direction
Bases: :py:obj:`enum.Enum`
Eine Darstellung für eine normierte Richtung.
Kann in einen Vektor konvertiert werden.
.. py:attribute:: Up
:type: int
:value: 0
Richtung nach oben, entspricht Vektor(0, 1).
.. py:attribute:: UpRight
:type: int
:value: 1
Richtung nach oben-rechts, entspricht Vektor(1, 1).
.. py:attribute:: Right
:type: int
:value: 2
Richtung nach rechts, entspricht Vektor(1, 0).
.. py:attribute:: DownRight
:type: int
:value: 3
Richtung nach unten-rechts, entspricht Vektor(1, -1).
.. py:attribute:: Down
:type: int
:value: 4
Richtung nach unten, entspricht Vektor(0, -1).
.. py:attribute:: DownLeft
:type: int
:value: 5
Richtung nach unten-links, entspricht Vektor(-1, -1).
.. py:attribute:: Left
:type: int
:value: 6
Richtung nach links, entspricht Vektor(-1, 0).
.. py:attribute:: UpLeft
:type: int
:value: 7
Richtung nach oben-links, entspricht Vektor(-1, 1).
.. py:method:: __str__() -> str
Return str(self).
.. py:method:: __repr__() -> str
Return repr(self).
.. py:method:: __eq__(other: Direction) -> bool
Unterstützt den Vergleichsoperator ==, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (Direction): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: __ne__(other: Direction) -> bool
Unterstützt den Vergleichsoperator !=, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (Direction): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: from_vector(vector: Vector) -> Optional[Direction]
:staticmethod:
Wandelt einen Vektor in eine der 8 Richtungen um, insofern der Vektor exakt der Richtung entspricht.
Args:
vector (Vector): Der Vektor, der konvertiert werden soll.
Returns:
Optional[Direction]: Die Richtung oder None, wenn der Vektor nicht direkt übersetzt werden kann.
.. py:method:: all_directions() -> List[Direction]
:staticmethod:
Gibt eine Liste aller 8 Richtungen aus.
Der erste Wert ist oben und alle weiteren folgen im Uhrzeigersinn.
Returns:
List[Direction]: Die Liste der Richtungen.
.. py:method:: to_vector() -> Vector
Wandelt die Richtung in den entsprechenden Vektor um.
Returns:
Vector: Der Richtungsvektor.
.. py:method:: to_mirrored() -> Direction
Spiegelt die gegebene Richtung.
Beispiel: Up -> Down.
Returns:
Direction: Die neue Richtung.
.. py:class:: FieldType
Bases: :py:obj:`enum.Enum`
Stellt alle verfügbaren Feldtypen dar.
.. py:attribute:: OneS
:type: int
:value: 0
Der kleine Fisch von Spieler 1.
.. py:attribute:: OneM
:type: int
:value: 1
Der mittlere Fisch von Spieler 1.
.. py:attribute:: OneL
:type: int
:value: 2
Der große Fisch von Spieler 1.
.. py:attribute:: TwoS
:type: int
:value: 3
Der kleine Fisch von Spieler 2.
.. py:attribute:: TwoM
:type: int
:value: 4
Der mittlere Fisch von Spieler 2.
.. py:attribute:: TwoL
:type: int
:value: 5
Der große Fisch von Spieler 2.
.. py:attribute:: Squid
:type: int
:value: 6
Der Kraken.
.. py:attribute:: Empty
:type: int
:value: 7
Alle anderen unbesetzten Felder.
.. py:method:: __str__() -> str
Return str(self).
.. py:method:: __repr__() -> str
Return repr(self).
.. py:method:: __eq__(other: FieldType) -> bool
Unterstützt den Vergleichsoperator ==, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (FieldType): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: __ne__(other: FieldType) -> bool
Unterstützt den Vergleichsoperator !=, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (FieldType): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: get_value() -> int
Gibt die entsprechende Wertigkeit eines Feldes zurück.
Für Fische je nachdem 1-3, für die anderen Felder 0.
Returns:
int: Der Wert des Feldes.
.. py:method:: get_team() -> Optional[TeamEnum]
Gibt für ein Fischfeld aus, zu welchem Team dieser Fisch gehört.
Returns:
Optional[TeamEnum]: Das Team, zudem der Fisch gehört, oder None, wenn das Feld kein Fisch ist.
.. py:method:: all_field_types() -> List[FieldType]
:staticmethod:
Gibt eine Liste aller Feldtypen aus.
Returns:
List[Direction]: Die Liste der Richtungen.
.. py:class:: TeamEnum
Bases: :py:obj:`enum.Enum`
Eine Darstellung für die beiden Teams
.. py:attribute:: One
:value: 0
Team 1
.. py:attribute:: Two
:value: 1
Team 2
.. py:method:: __str__() -> str
Return str(self).
.. py:method:: __repr__() -> str
Return repr(self).
.. py:method:: __eq__(other: TeamEnum) -> bool
Unterstützt den Vergleichsoperator ==, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (TeamEnum): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: __ne__(other: TeamEnum) -> bool
Unterstützt den Vergleichsoperator !=, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (TeamEnum): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: get_fish_types() -> List[FieldType]
Gibt eine Liste aller Fischtypen des Teams aus.
Returns:
List[FieldType]: Die Liste der Feldtypen.
.. py:method:: opponent() -> TeamEnum
Gibt den Gegner dieses Teams an.
Return:
TeamEnum: Das Gegnerteam.
.. py:class:: Board(map: List[List[FieldType]])
Ein Spielbrett, das die Felder des Spiels enthält.
Das Feld unten-links hat Koordinate (0, 0) und das Feld oben-rechts ist an Position (9, 9).
Gleichzeitig bedeutet das, dass map[0] auch die unterste Zeile des Spielfeldes ist.
Attributes:
map (List[List[Field]]): Die 2 dimensionale Liste der Felder, die das Spielbrett darstellen.
.. py:attribute:: map
:type: List[List[FieldType]]
.. py:method:: __str__() -> str
Return str(self).
.. py:method:: __repr__() -> str
Return repr(self).
.. py:method:: __eq__(other: TeamEnum) -> bool
Unterstützt den Vergleichsoperator ==, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (TeamEnum): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: __ne__(other: TeamEnum) -> bool
Unterstützt den Vergleichsoperator !=, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (TeamEnum): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: deepcopy() -> GameState
Kopiert das Objekt rekursiv.
.. py:method:: get_field(position: Coordinate) -> Optional[FieldType]
Gibt das Feld an der gegebenen Koordinate zurück.
Args:
position (Coordinate): Die Position des Feldes, das abgerufen werden soll.
Returns:
Field: Das Feld an der gegebenen Koordinate, oder None, wenn außerhalb des gültigen Bereichs.
.. py:method:: get_fields_by_type(field: FieldType) -> List[Coordinate]
Gibt eine Liste aller Koordinaten zurück, auf dem der angegebene Feld-Typ zu finden ist.
Args:
field (FieldType): Der Feld-Typ, nachdem gesucht werden soll.
Returns:
List[Coordinate]: Die Liste der Koordinaten.
.. py:method:: get_fields_in_direction(position: Coordinate, direction: Direction) -> List[FieldType]
Gibt eine Liste aller Feld-Typen zurück, die in einer Richtung liegen.
Dabei wird als Ausgangspunkt eine Koordinate genommen und dazu die Richtung, in die aufgelistet werden soll.
**Achtung**: Das Feld der Ausgangskoordinate wird *nicht* beachtet und ausgegeben.
Wenn die Startkoordinate nicht im Spielfeld liegt, wird eine leere Liste zurückgegeben.
Args:
position (Coordinate): Die Ausgangskoordinate.
direction (Direction): Die Richtung.
Returns:
List[FieldType]: Die Liste der Felder.
.. py:method:: get_fields_on_line(position: Coordinate, direction: Direction) -> List[FieldType]
Gibt eine Liste aller Feld-Typen zurück, die auf einer Gerade liegen.
Die Gerade wird aufgespannt durch eine Koordinate und einen Richtungsvektor.
Das Ergebnis wird in Richtung des "Vektorpfeils" abgelesen.
Wenn die Startkoordinate nicht im Spielfeld liegt, wird eine leere Liste zurückgegeben.
Args:
position (Coordinate): Die Startkoordinate für die Gerade.
direction (Direction): Der aufspannende Richtungsvektor.
Returns:
List[FieldType]: Die Liste der Felder.
.. py:method:: get_fish_on_line(position: Coordinate, direction: Direction) -> List[FieldType]
Funktioniert ähnlich wie *Board.get_fields_on_line()*,
gibt aber nur die Feldtypen, die Fische sind, auf einer Geraden als Liste aus.
Args:
position (Coordinate): Die Startkoordinate für die Gerade.
direction (Direction): Der aufspannende Richtungsvektor.
Returns:
List[FieldType]: Die Liste der Fisch-Felder.
.. py:class:: Move(start: Coordinate, direction: Direction)
Repräsentiert einen Zug im Spiel.
Attribute:
start (Coordinate): Die Koordinate, von wo aus ein Fisch bewegt werden soll.
direction (Direction): Die Richtung, in die der Fisch schwimmt.
.. py:attribute:: start
:type: Coordinate
.. py:attribute:: direction
:type: Direction
.. py:method:: __str__() -> str
Return str(self).
.. py:method:: __repr__() -> str
Return repr(self).
.. py:method:: __eq__(other: Move) -> bool
Unterstützt den Vergleichsoperator ==, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (Move): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: __ne__(other: Move) -> bool
Unterstützt den Vergleichsoperator !=, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (Move): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: deepcopy() -> GameState
Kopiert das Objekt rekursiv.
.. py:class:: GameState(board: Board, turn: int, last_move: Optional[Move])
Repräsentiert einen Spielstand.
Attribute:
board (Board): Das Spielbrett.
turn (int): Die aktuelle Runde.
last_move (Optional[Move]): Der zuletzt ausgeführte Zug.
.. py:attribute:: board
:type: Board
.. py:attribute:: turn
:type: int
.. py:attribute:: last_move
:type: Optional[Move]
.. py:method:: __str__() -> str
Return str(self).
.. py:method:: __repr__() -> str
Return repr(self).
.. py:method:: __eq__(other: GameState) -> bool
Unterstützt den Vergleichsoperator ==, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (GameState): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: __ne__(other: GameState) -> bool
Unterstützt den Vergleichsoperator !=, um die Werte mit denen eines
weiteren Objektes zuvergleichen.
Args:
other: (GameState): Die andere Koordinate.
Returns:
bool: Das Ergebnis des Vergleichs.
.. py:method:: deepcopy() -> GameState
Kopiert das Objekt rekursiv.
.. py:method:: set_board_field(position: Coordinate, field: FieldType) -> None
Ändert ein Feld auf dem Spielfeld an einer Koordinate.
Args:
position (Coordinate): Die Position des Feldes, das geändert werden soll.
field (FieldType): Das Feld, was dort platziert werden soll.
.. py:method:: possible_moves_for(start: Coordinate) -> List[Move]
Berechnet alle Züge, die aus der aktuellen Spielposition für den Fisch an der Koordinate möglich sind.
Args:
start (Coordinate): Die Position des gewählten Fisch.
Returns:
List[Move]: Die Liste der Züge.
.. py:method:: possible_moves() -> List[Move]
Berechnet alle Züge, die aus der aktuellen Spielposition für den aktuellen Spieler möglich sind.
Returns:
List[Move]: Die Liste der Züge.
.. py:method:: perform_move(move: Move) -> GameState
Führt den gegebenen Zug auf dem Spielstand aus, insofern dieser ausführbar ist (**nicht mutierend**).
Dabei wird *kein* Zug an den Spielserver übermittelt.
Args:
move_ (Move): Der zuverwendene Zug.
Returns:
Gamestate: Der neue Spielstand.
Raises:
PiranhasError: Wenn der Zug nicht valide ist.
.. py:method:: perform_move_mut(move: Move) -> None
Führt den gegebenen Zug auf dem Spielstand aus, insofern dieser ausführbar ist (**mutierend**).
Dabei wird *kein* Zug an den Spielserver übermittelt.
Args:
move_ (Move): Der zuverwendene Zug.
Raises:
PiranhasError: Wenn der Zug nicht valide ist.
.. py:class:: RulesEngine
Stellt Methoden, die zur Überprüfung der Spielregeln dienen.
.. py:method:: move_distance(board: Board, move_: Move) -> int
:staticmethod:
Gibt die Länge / Anzahl der Felder von einem Zug auf dem Spielfeld zurück.
Args:
board (Board): Das Spielfeld, auf dem die Länge berechnet werden soll.
move_ (Move): Der zuverwendene Zug.
Returns:
int: Die Länge.
.. py:method:: target_position(board: Board, move_: Move) -> Coordinate
:staticmethod:
Gibt die Koordinate zurück, auf der ein Fisch landen würde, wenn man den Zug ausführt.
Es wird nicht berücksichtigt, ob diese Koordinate im Spielfeld ist.
Args:
board (Board): Das Spielfeld, auf dem der Zug berechnet werden soll.
move_ (Move): Der zuverwendene Zug.
Returns:
Coordinate: Die Koordinate.
.. py:method:: is_in_bounds(coordinate: Coordinate) -> bool
:staticmethod:
Gibt einen Wahrheitswert zurück, ob eine Position in dem (Standard-) Spielfeld (10x10) liegt.
Args:
coordinate (Coordinate): Die Position
Returns:
bool: Ob die Koordinate im Feld ist.
.. py:method:: can_execute_move(board: Board, move_: Move) -> None
:staticmethod:
Prüft, ob ein Zug auf dem Board nach den Regeln durchgeführt werden könnte.
Dabei ist nicht relevant, welcher Spieler gerade tatsächlich dran wäre.
Gibt keinen Wert zurück, sondern wirft eine Fehlermeldung, falls der Zug nicht valide ist.
Args:
board (Board): Das Spielfeld.
move_ (Move): Der Zug, der geprüft werden soll.
Raises:
PiranhasError: Wenn der Zug nicht valide ist.
.. py:method:: get_team_on_turn(turn: int) -> TeamEnum
:staticmethod:
Berechnet anhand der Zugzahl, welcher Spieler dran sein müsste.
Es wird nicht beachtet, ob die Zahl kleiner 0 oder größer 59 ist.
Args:
turn (int): Die Zugzahl
Returns:
TeamEnum: Das Team, was dran ist.
.. py:class:: PluginConstants
Hält globale Konstanten.
.. py:attribute:: BOARD_WIDTH
:type: int
.. py:attribute:: BOARD_HEIGHT
:type: int
.. py:attribute:: ROUND_LIMIT
:type: int