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: -- ) 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()