update
This commit is contained in:
71
tests/sim.gd
Normal file
71
tests/sim.gd
Normal 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()
|
||||
Reference in New Issue
Block a user