extends "res://tests/basis.gd" ## Genau und Aufdecken in Etappen. Eigene Szene, damit der Ablauf innerhalb ## der 30 s Zugzeit bleibt - danach spielt der Host den Platz automatisch. var game: Node func _ready() -> void: add_child(preload("res://scenes/main.tscn").instantiate()) await get_tree().process_frame Net.start_singleplayer("Tester", 3, 1) _lauf() func _menschen() -> void: for i in [1, 2, 3]: game.seats[i].ai = false func _lauf() -> void: await _warte(func(): game = _find(get_tree().root, "Game"); return game != null, 20.0) game.tempo = 0.3 await _warte(func(): return game.phase == "bid", 40.0) var me: int = game.local_seat _menschen() game.must_bid.clear() # --- Genau-Treffer: Ansager verliert, Rufer bekommt einen game.must_bid.clear() # Der Rufer (Platz 1) liegt unter seiner Startzahl - nur dann gibt es den # Bonus. Erst wegnehmen, dann zählen: der entfernte Würfel könnte eine 3 sein. game.seats[1].count = 4 game.host_values[1].pop_back() game.table.set_dice_count(1, 4) 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 # Erst wenn die neue Ansagerunde wirklich läuft: Platz 1 ist dran und # noch unbeantwortet. Ein "turn == 1" allein gilt schon beim Würfeln. await _warte(func(): return game.phase == "bid" and game.turn == 1 and game._answered.is_empty(), 30.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 and game._answered.is_empty(), 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()