This commit is contained in:
team3
2026-09-16 15:04:02 +02:00
parent 3be22351a3
commit b9d6b115c0
23 changed files with 795 additions and 425 deletions

71
tests/sim.gd Normal file
View File

@@ -0,0 +1,71 @@
extends "res://tests/basis.gd"
## Bot gegen Bot, viele Partien hintereinander: Rundenzahl und Siegquoten je
## Platz. Kein Test, ein Messgerät für die Regler in ai.gd.
## Aufruf: make sim (oder einzeln: -- <stufe> <partien>)
var game: Node
var stufe := 1
var partien := 20
func _ready() -> void:
var args := OS.get_cmdline_user_args()
if args.size() > 0:
stufe = int(args[0])
if args.size() > 1:
partien = int(args[1])
add_child(preload("res://scenes/main.tscn").instantiate())
await get_tree().process_frame
_lauf()
func _lauf() -> void:
var runden_summe := 0
var siege := {}
var genau := 0
var wuerfe := 0
var laengste := 0
for n in partien:
Net.start_singleplayer("Tester", 2, stufe, 3)
await _warte(func(): game = _find(get_tree().root, "Game"); return game != null and game.phase != "lobby", 20.0)
game.tempo = 0.0
game.seats[game.local_seat].ai = true
var runden := 0
var letzte := ""
var gesehen := {}
var t := 0.0
while game.phase != "over" and t < 300.0:
await get_tree().create_timer(0.1).timeout
t += 0.1
if game.phase != letzte:
letzte = game.phase
if letzte == "roll":
runden += 1
for z in game.log_lines:
if gesehen.has(z):
continue
gesehen[z] = true
if "Genau" in z:
genau += 1
if " wirft " in z:
wuerfe += 1
runden_summe += runden
laengste = maxi(laengste, runden)
var sieger := ""
for s in game.seats:
if s.alive:
sieger = String(s.name)
siege[sieger] = int(siege.get(sieger, 0)) + 1
# Aufräumen für die nächste Partie: wie "Nochmal", nur ohne Menü.
game._quitting = true
Net.leave()
var raum: Node = game.get_parent().get_parent().get_parent()
raum.get_parent().remove_child(raum)
raum.queue_free()
game = null
await get_tree().process_frame
print("SIM Stufe %d: %d Partien, Ø %.1f Runden (längste %d), Ø %.1f Würfe, Ø %.1f Genau-Rufe" % [
stufe, partien, float(runden_summe) / partien, laengste, float(wuerfe) / partien, float(genau) / partien])
for k in siege:
print("SIM Stufe %d: %s gewinnt %d×" % [stufe, k, siege[k]])
get_tree().quit()