update
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
extends "res://tests/basis.gd"
|
||||
## Solopartie headless: Münzen, Genau, Topf, Zählen, Stufe, Tipp-Schranke.
|
||||
## Solopartie headless: Münzen, Topf, Zählen, Stufe, Tipp-Schranke.
|
||||
## Die Bots werden zu "Menschen" ohne Peer gemacht - dann wartet der Host
|
||||
## auf unsere Eingaben, und der Ablauf ist steuerbar.
|
||||
## auf unsere Eingaben, und der Ablauf ist steuerbar. Alles, was den eigenen
|
||||
## Zug braucht, kommt zuerst: nach 30 s Spielzeit spielt der Host den Platz
|
||||
## sonst automatisch. Genau und Aufdecken prüft tests/genau.gd.
|
||||
|
||||
var game: Node
|
||||
|
||||
@@ -20,6 +22,8 @@ func _menschen() -> void:
|
||||
|
||||
func _lauf() -> void:
|
||||
await _warte(func(): game = _find(get_tree().root, "Game"); return game != null, 20.0)
|
||||
# Nicht null: die Etappen beim Aufdecken sollen noch einzeln sichtbar sein.
|
||||
game.tempo = 0.3
|
||||
await _warte(func(): return game.phase == "bid", 40.0)
|
||||
var me: int = game.local_seat
|
||||
var hud: Node = game.hud
|
||||
@@ -35,6 +39,20 @@ func _lauf() -> void:
|
||||
await game._do_play(me, "count", 0)
|
||||
_pruef("Zählen ohne Ansage abgelehnt", game.hand[me].has("count"))
|
||||
|
||||
# --- Topf: Deckel und Übertrag
|
||||
game.topf.clear()
|
||||
game.hand[me] = ["gag", "gag", "gag", "gag", "gag", "gag", "gag"]
|
||||
for i in 7:
|
||||
await game._do_play(me, "gag", 0)
|
||||
_pruef("Topf höchstens %d" % BoosterDB.TOPF_MAX, game.topf.size() == BoosterDB.TOPF_MAX)
|
||||
_pruef("Rausfallen steht im Protokoll", game.log_lines.any(func(z): return "vom Tisch" in z))
|
||||
game.hand[2] = ["peek", "peek"]
|
||||
game._topf_an(2)
|
||||
_pruef("Gewinner nimmt bis zum Limit, Rest bleibt",
|
||||
game.hand[2].size() == BoosterDB.HANDLIMIT and game.topf.size() == BoosterDB.TOPF_MAX - 2)
|
||||
game.topf.clear()
|
||||
game.must_bid.clear()
|
||||
|
||||
# --- Wirkungen beider Seiten
|
||||
game.bid = {"seat": 1, "count": 1, "face": 4}
|
||||
var n4: int = game._count_face(4)
|
||||
@@ -57,19 +75,15 @@ func _lauf() -> void:
|
||||
game.bid = {}
|
||||
game.must_bid.clear()
|
||||
|
||||
# --- Topf: Deckel und Übertrag
|
||||
game.topf.clear()
|
||||
game.hand[me] = ["gag", "gag", "gag", "gag", "gag", "gag", "gag"]
|
||||
for i in 7:
|
||||
await game._do_play(me, "gag", 0)
|
||||
_pruef("Topf höchstens %d" % BoosterDB.TOPF_MAX, game.topf.size() == BoosterDB.TOPF_MAX)
|
||||
_pruef("Rausfallen steht im Protokoll", game.log_lines.any(func(z): return "vom Tisch" in z))
|
||||
game.hand[2] = ["peek", "peek"]
|
||||
game._topf_an(2)
|
||||
_pruef("Gewinner nimmt bis zum Limit, Rest bleibt",
|
||||
game.hand[2].size() == BoosterDB.HANDLIMIT and game.topf.size() == BoosterDB.TOPF_MAX - 2)
|
||||
game.topf.clear()
|
||||
game.must_bid.clear()
|
||||
# --- Fangnetz: ein Würfel unter dem Tisch kommt zurück und kommt zur Ruhe
|
||||
var d0 = game.table.dice_of(me)[0]
|
||||
d0.freeze = false
|
||||
d0.place(Transform3D(Basis(), Vector3(0, -50.0, 0)))
|
||||
_pruef("Fangnetz holt den Würfel zurück", game.table.fange_verirrte(me) and d0.global_position.y > 0.0)
|
||||
d0.place(Transform3D(Basis(), Vector3(0, -50.0, 0)))
|
||||
await game._neu_werfen(me, [0])
|
||||
_pruef("Würfeln endet trotz verirrtem Würfel, Wert gelesen",
|
||||
d0.global_position.y > 0.5 and game.host_values[me][0] >= 1 and game.host_values[me][0] <= 6)
|
||||
|
||||
# --- Protokoll und Tipp-Schranke im HUD
|
||||
game._push_state()
|
||||
@@ -88,39 +102,4 @@ func _lauf() -> void:
|
||||
hud._touch = false
|
||||
await get_tree().create_timer(2.5).timeout
|
||||
|
||||
# --- Genau-Treffer: Ansager verliert, Rufer bekommt einen
|
||||
game.must_bid.clear()
|
||||
var n3: int = game._count_face(3)
|
||||
if n3 == 0:
|
||||
game._set_die(me, 0, 3)
|
||||
n3 = 1
|
||||
var vorher: Array = []
|
||||
for i in 4:
|
||||
vorher.append(int(game.seats[i].count))
|
||||
game._do_bid(me, n3, 3)
|
||||
await _warte(func(): return game.turn == 1, 5.0)
|
||||
game._do_exact(1)
|
||||
await _warte(func(): return game.phase == "reveal", 5.0)
|
||||
_pruef("Etappe 1: noch nicht gezählt", int(game.reveal_total) == -1)
|
||||
await _warte(func(): return int(game.reveal_total) >= 0, 3.0)
|
||||
_pruef("Etappe 2: gezählt", int(game.reveal_total) == n3)
|
||||
await _warte(func(): return game.banner.begins_with("Genau!"), 3.0)
|
||||
await _warte(func(): return game.phase != "reveal", 8.0)
|
||||
_pruef("Genau: Ansager -1, Rufer +1, Rest gleich",
|
||||
int(game.seats[me].count) == vorher[0] - 1 and int(game.seats[1].count) == vorher[1] + 1
|
||||
and int(game.seats[2].count) == vorher[2] and int(game.seats[3].count) == vorher[3])
|
||||
_pruef("Rufer beginnt", game.starter == 1)
|
||||
|
||||
# --- Genau daneben
|
||||
await _warte(func(): return game.phase == "bid", 20.0)
|
||||
_menschen()
|
||||
await _warte(func(): return game.turn == 1, 5.0)
|
||||
var n5: int = game._count_face(5)
|
||||
game._do_bid(1, mini(n5 + 2, game._total_dice()), 5)
|
||||
await _warte(func(): return game.turn == 2, 5.0)
|
||||
var c2: int = game.seats[2].count
|
||||
game._do_exact(2)
|
||||
await _warte(func(): return game.banner.begins_with("Daneben"), 8.0)
|
||||
await _warte(func(): return game.phase != "reveal", 8.0)
|
||||
_pruef("Genau daneben: nur der Rufer verliert", int(game.seats[2].count) == c2 - 1)
|
||||
_fertig()
|
||||
|
||||
Reference in New Issue
Block a user