Skip to content

Commit 471ba34

Browse files
authored
Improve piranhas 2026 (I) (#96)
* update starter logic.py add new socha imports update comments to German * feature: perform_move() add GameState.perform_move() and mutating variant * fix: clarify describtion * chore: remove old 2025 plugin from project
1 parent 346717d commit 471ba34

26 files changed

+96
-2653
lines changed

logic.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
1-
# not all imports are currently used, but they might be in the future and it shows all available functionalities
1+
# Nicht alle Imports werden aktuell verwendet.
2+
# Diese können in Zukunft aber sehr nützlich sein
3+
# und zeigen außerdem alle Funktionalitäten der Software-Challenge Python API.
24
import math
35
import random
46
import time
57
from typing import Optional, Tuple
68
from socha import (
7-
Field,
9+
Coordinate,
10+
Vector,
11+
Direction,
12+
FieldType,
13+
TeamEnum,
14+
Board,
15+
Move,
816
GameState,
9-
Move
17+
RulesEngine,
1018
)
1119
from socha.api.networking.game_client import IClientHandler
1220
from socha.starter import Starter
@@ -15,18 +23,21 @@
1523
class Logic(IClientHandler):
1624
game_state: GameState
1725

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

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

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

2940
if __name__ == "__main__":
3041
Starter(logic=Logic())
31-
# if u wanna have more insights, u can set the logging level to debug:
42+
# Wenn man mehr Debug Informationen aus dem Hintergrund der API haben möchte, kann das Log-Level auf debug gesetzt werden:
3243
# Starter(logic=Logic(), log_level=logging.DEBUG)

python/socha/_socha.pyi

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,35 @@ class GameState:
438438
"""
439439
...
440440

441+
def perform_move(self, move: Move) -> GameState:
442+
"""
443+
Führt den gegebenen Zug auf dem Spielstand aus, insofern dieser ausführbar ist (**nicht mutierend**).
444+
Dabei wird *kein* Zug an den Spielserver übermittelt.
445+
446+
Args:
447+
move_ (Move): Der zuverwendene Zug.
448+
449+
Returns:
450+
Gamestate: Der neue Spielstand.
451+
452+
Raises:
453+
PiranhasError: Wenn der Zug nicht valide ist.
454+
"""
455+
...
456+
457+
def perform_move_mut(self, move: Move) -> None:
458+
"""
459+
Führt den gegebenen Zug auf dem Spielstand aus, insofern dieser ausführbar ist (**mutierend**).
460+
Dabei wird *kein* Zug an den Spielserver übermittelt.
461+
462+
Args:
463+
move_ (Move): Der zuverwendene Zug.
464+
465+
Raises:
466+
PiranhasError: Wenn der Zug nicht valide ist.
467+
"""
468+
...
469+
441470
class RulesEngine:
442471
"""
443472
Stellt Methoden, die zur Überprüfung der Spielregeln dienen.
@@ -498,6 +527,9 @@ class RulesEngine:
498527
Args:
499528
board (Board): Das Spielfeld.
500529
move_ (Move): Der Zug, der geprüft werden soll.
530+
531+
Raises:
532+
PiranhasError: Wenn der Zug nicht valide ist.
501533
"""
502534
...
503535

0 commit comments

Comments
 (0)