Files
pirate-dice/tests/sim.gd
2026-09-16 17:00:41 +02:00

67 lines
2.0 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.simulation = true
game.seats[game.local_seat].ai = true
var gesehen := {}
var t := 0.0
while game.phase != "over" and t < 300.0:
await get_tree().create_timer(0.02).timeout
t += 0.02
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 += game.runde
laengste = maxi(laengste, game.runde)
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()