예제 #1
0
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
예제 #2
0
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")
예제 #3
0
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
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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"
예제 #7
0
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
예제 #8
0
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")