Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 19 additions & 8 deletions logic.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
# not all imports are currently used, but they might be in the future and it shows all available functionalities
# Nicht alle Imports werden aktuell verwendet.
# Diese können in Zukunft aber sehr nützlich sein
# und zeigen außerdem alle Funktionalitäten der Software-Challenge Python API.
import math
import random
import time
from typing import Optional, Tuple
from socha import (
Field,
Coordinate,
Vector,
Direction,
FieldType,
TeamEnum,
Board,
Move,
GameState,
Move
RulesEngine,
)
from socha.api.networking.game_client import IClientHandler
from socha.starter import Starter
Expand All @@ -15,18 +23,21 @@
class Logic(IClientHandler):
game_state: GameState

# this method is called every time the server is requesting a new move
# this method should always be implemented otherwise the client will be disqualified
# Diese Methode wird immer aufgerufen, wenn der Spielserver einen Zug vom Client anfordert.
# Sie muss implementiert sein, weil der Computerspieler sonst disqualifiziert wird.
# Damit ein Zug an den Spielserver übermittelt wird, muss dieser mit *return* von der Methode zurückgegeben werden.
def calculate_move(self) -> Move:
return random.choice(self.game_state.possible_moves())

# this method is called every time the server has sent a new game state update
# this method should be implemented to keep the game state up to date
# Diese Methode wird jedes Mal aufgerufen, wenn der Server einen neunen Spielstand bereitstellt.
# Sie muss implentiert sein, damit die Spielstand Instanz auf dem neusten Stand bleibt.
def on_update(self, state: GameState) -> None:
self.game_state = state

# Die Klasse IClientHandler hält noch weitere Methoden, die durch bestimmte Aktionen des Servers ausgeführt werden.
# Weitere Informationen dazu gibt es in der verlinkten Dokumentation unter dem Submodul socha.api.networking.game_client.

if __name__ == "__main__":
Starter(logic=Logic())
# if u wanna have more insights, u can set the logging level to debug:
# Wenn man mehr Debug Informationen aus dem Hintergrund der API haben möchte, kann das Log-Level auf debug gesetzt werden:
# Starter(logic=Logic(), log_level=logging.DEBUG)
32 changes: 32 additions & 0 deletions python/socha/_socha.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,35 @@ class GameState:
"""
...

def perform_move(self, 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.
"""
...

def perform_move_mut(self, 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.
"""
...

class RulesEngine:
"""
Stellt Methoden, die zur Überprüfung der Spielregeln dienen.
Expand Down Expand Up @@ -498,6 +527,9 @@ class RulesEngine:
Args:
board (Board): Das Spielfeld.
move_ (Move): Der Zug, der geprüft werden soll.

Raises:
PiranhasError: Wenn der Zug nicht valide ist.
"""
...

Expand Down
Loading