def vierfach_stechen(spieler): runde = SchockenSpiel() assert runde.leaf_state.name == "einwerfen" wuerfel.werfen = lambda n: (1, ) * n for S in spieler: runde.command_to_event(S.name, "einwerfen") return runde
def test_einwerfen_waehrend_stechen(spieler): # FALL einwerfen wenn stechen im gange ist runde = SchockenSpiel() wuerfel.werfen = lambda n: (1, ) * n runde.command_to_event(spieler[0].name, "einwerfen") runde.command_to_event(spieler[1].name, "einwerfen") # spieler 2 will nochmal einwerfen with pytest.raises(FalscherSpieler): runde.command_to_event(spieler[1].name, "einwerfen") runde.command_to_event(spieler[0].name, "stechen") # weiterer spieler will noch einwerfen, obwohl gestochen wird with pytest.raises(FalscheAktion): runde.command_to_event(spieler[2].name, "einwerfen")
def drei_spieler_eingeworfen_spieler_zwei_muss_werfen(spieler): # FALL: spieler 2 würfelt eindeutig das niedrigste runde = SchockenSpiel() assert runde.leaf_state.name == "einwerfen" wuerfel.werfen = lambda n: (2, ) * n runde.command_to_event(spieler[0].name, "einwerfen") wuerfel.werfen = lambda n: (1, ) * n runde.command_to_event(spieler[1].name, "einwerfen") wuerfel.werfen = lambda n: (3, ) * n runde.command_to_event(spieler[2].name, "einwerfen") return runde
def test_einwerfen_trotz_stechen(spieler): runde = SchockenSpiel() assert runde.leaf_state.name == "einwerfen" # FALL: Zwei Spieler werfen dasselbe ein, einer versucht zu starten wuerfel.werfen = lambda n: (1, ) * n runde.command_to_event(spieler[0].name, "einwerfen") runde.command_to_event(spieler[1].name, "einwerfen") with pytest.raises(FalscheAktion): runde.command_to_event(spieler[1].name, events.WÜRFELN)
def test_stiche_höher_einwurf_augen(spieler): # FALL Stiche sind größer als nächstkleinere Einwurf Augenzahlen runde = SchockenSpiel() assert runde.leaf_state.name == "einwerfen" wuerfel.werfen = lambda n: (2, ) * n runde.command_to_event(spieler[0].name, "einwerfen") wuerfel.werfen = lambda n: (3, ) * n runde.command_to_event(spieler[1].name, "einwerfen") wuerfel.werfen = lambda n: (2, ) * n runde.command_to_event(spieler[2].name, "einwerfen") wuerfel.werfen = lambda n: (6, ) * n runde.command_to_event(spieler[0].name, "stechen") wuerfel.werfen = lambda n: (5, ) * n runde.command_to_event(spieler[2].name, "stechen") # spieler 3 muss anfangen zu würfeln with pytest.raises(FalscherSpieler): runde.command_to_event(spieler[0].name, events.WÜRFELN) with pytest.raises(FalscherSpieler): runde.command_to_event(spieler[1].name, events.WÜRFELN)
def test_uebergang_einwerfen_halbzeit(spieler): runde = SchockenSpiel() assert runde.leaf_state.name == "einwerfen" # Übergang von Einwerfen nach Halbzeit runde = SchockenSpiel() assert runde.leaf_state.name == "einwerfen" wuerfel.werfen = lambda n: (2,) * n runde.command_to_event(spieler[0].name, "einwerfen") wuerfel.werfen = lambda n: (3,) * n runde.command_to_event(spieler[1].name, "einwerfen") wuerfel.werfen = lambda n: (1,) * n runde.command_to_event(spieler[2].name, "einwerfen") wuerfel.werfen = lambda n: (4, 6, 2) runde.command_to_event(spieler[2].name, "wuerfeln") assert runde._leaf_state.name == "wuerfeln"
def test_letzter_spieler_weiter(spieler): runde = SchockenSpiel() # spieler 1 faengt an wuerfel.werfen = lambda n: (6,) runde.command_to_event(spieler[0].name, "einwerfen") wuerfel.werfen = lambda n: (1,) runde.command_to_event(spieler[1].name, "einwerfen") # spieler 1 wuerfelt 2 mal und laesst liegen wuerfel.werfen = lambda n: (5, 1, 1) runde.command_to_event(spieler[1].name, "wuerfeln") runde.command_to_event(spieler[1].name, "wuerfeln") runde.command_to_event(spieler[1].name, "weiter") # spieler 0 wuerfelt 1 mal und laesst liegen wuerfel.werfen = lambda n: (1, 2, 3) runde.command_to_event(spieler[0].name, "wuerfeln") runde.command_to_event(spieler[0].name, "weiter") assert runde.state.spieler_liste[0].name == spieler[0].name assert runde.state.spieler_liste[0].deckel == 5
def test_eins_beiseite_dann_weiter(spieler): runde = SchockenSpiel() # spieler 1 faengt an wuerfel.werfen = lambda n: (6,) runde.command_to_event(spieler[0].name, "einwerfen") wuerfel.werfen = lambda n: (1,) runde.command_to_event(spieler[1].name, "einwerfen") wuerfel.werfen = lambda n: (2, 2, 1) runde.command_to_event(spieler[1].name, "wuerfeln") # spieler1 dreht um, aber entscheidet sich dann doch dagegen runde.command_to_event(spieler[1].name, "beiseite") spieler1 = next(s for s in runde.state.spieler_liste if s.name == spieler[1].name) # spieler1 sollte eine eins haben assert spieler1.einsen == 1 # der Befehl !weiter ist nun nicht erlaubt with pytest.raises(SpielerMussWuerfeln): runde.command_to_event(spieler[1].name, "weiter")