67 lines
2.0 KiB
GDScript
67 lines
2.0 KiB
GDScript
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()
|