- KI-Vorausschau in zwei Stufen mit Zielvorauswahl (höchstens 4 Ziele je Karte und Angreifer, die 8 besten Erstschritte vertieft): 5 Gegner 2063 ms -> 101 ms, 1 Gegner 160 ms -> 36 ms, alle Kandidaten im Budget; 52:48 gegen die alte Suche - KI rechnet im WorkerThreadPool auf einer Spielkopie, schon während der Wartezeit; längste Bildzeit im Kampf mit 5 Gegnern 108 ms -> 38 ms - Musik wird im Hintergrund erzeugt (Start 185 ms schneller) - Style.overlay und Style.confirm ersetzen vier kopierte Dialoge - Übersetzungen für Abbrechen und Zurücksetzen, Archetypen neu gemessen - tests/perf_probe.gd (Laufzeiten) und tests/frame_probe.tscn (Bildzeiten) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QPgKvy5W9WRNFHjkm5QsHx
50 lines
1.6 KiB
GDScript
50 lines
1.6 KiB
GDScript
extends Node
|
|
## Fensterprobe: Kosten von refresh() und längste Bildzeit während KI-Zügen (5 Gegner).
|
|
|
|
var main: Node
|
|
var max_dt := 0.0
|
|
var frames_n := 0
|
|
var measuring := false
|
|
|
|
|
|
func _ready() -> void:
|
|
Game.test_seed = 4242
|
|
main = load("res://scenes/main.tscn").instantiate()
|
|
main.save_path = "user://_probe.json"
|
|
add_child(main)
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
var scr: BattleScreen = BattleScreen.new(5)
|
|
main.show_screen(scr)
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
var h: Game.Player = scr.game.human
|
|
while h.hand.size() < 8 and not h.deck.is_empty():
|
|
scr.game.draw(h)
|
|
var t0 := Time.get_ticks_usec()
|
|
for i in 30:
|
|
scr.refresh()
|
|
print("refresh() mit 5 Gegnern und 8 Handkarten: %.2f ms" % ((Time.get_ticks_usec() - t0) / 1000.0 / 30))
|
|
scr.mulligan.visible = false
|
|
h.mulligan_done = true
|
|
scr.ai_delay = 0.2
|
|
measuring = true
|
|
var start := Time.get_ticks_msec()
|
|
var actions := 0
|
|
var last_turn := scr.game.turn
|
|
while Time.get_ticks_msec() - start < 12000 and scr.game.winner == "":
|
|
if scr.game.current().is_human and scr.game.current() == h:
|
|
scr.game.end_turn()
|
|
scr.after_action()
|
|
await get_tree().process_frame
|
|
measuring = false
|
|
print("längste Bildzeit in 12 s KI-Spiel: %.0f ms (%d Bilder, Zug %d)" % [max_dt * 1000.0, frames_n, scr.game.turn])
|
|
DirAccess.remove_absolute(ProjectSettings.globalize_path("user://_probe.json"))
|
|
get_tree().quit()
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
if measuring:
|
|
frames_n += 1
|
|
max_dt = maxf(max_dt, delta)
|