48 lines
1.8 KiB
GDScript
48 lines
1.8 KiB
GDScript
extends SceneTree
|
|
## Laufzeitmessung: Start, KI-Entscheidungen, Deckerzeugung, Vorschau, Musik.
|
|
|
|
|
|
func ms(f: Callable, n: int = 1) -> float:
|
|
var t0 := Time.get_ticks_usec()
|
|
for i in n:
|
|
f.call()
|
|
return (Time.get_ticks_usec() - t0) / 1000.0 / n
|
|
|
|
|
|
func _initialize() -> void:
|
|
var t := ms(func(): Cards.all())
|
|
print("Kartenpool laden: %.1f ms" % t)
|
|
var r := RandomNumberGenerator.new()
|
|
r.seed = 3
|
|
print("Ladenangebot: %.2f ms" % ms(func(): DeckGen.shop_cards(r, 5), 50))
|
|
print("Vorschau 1..5 Gegner: %.1f ms" % ms(func():
|
|
for n in range(1, 6):
|
|
for i in n:
|
|
DeckGen.random_opponent(i + 1)))
|
|
for n in [1, 3, 5]:
|
|
var g := Game.new_battle(n, r)
|
|
# ein volles Brett für alle, damit die Entscheidung teuer wird
|
|
var uid := 5000
|
|
for p in g.players:
|
|
for k in 4:
|
|
var c := Game.Creature.new(Cards.by_id("f_wolf"), p, uid)
|
|
uid += 1
|
|
c.ready = true
|
|
c.attacks_left = 1
|
|
p.board.append(c)
|
|
var h: Game.Player = g.players[0]
|
|
h.energy = 10
|
|
h.max_energy = 10
|
|
for k in 6:
|
|
h.hand.append(Cards.by_id("f_ritter"))
|
|
AI.time_budget_ms = 100000
|
|
var t_full := ms(func(): AI.choose_action(g, h))
|
|
AI.time_budget_ms = 150
|
|
var t_budget := ms(func(): AI.choose_action(g, h))
|
|
var cands := AI.candidate_actions(g, h).size()
|
|
print("KI-Entscheidung, %d Gegner, %d Kandidaten: ohne Budget %.0f ms, mit Budget %.0f ms" % [n, cands, t_full, t_budget])
|
|
print("Spielkopie: %.3f ms" % ms(func(): Game.new_battle(5, r).clone(), 20))
|
|
print("Musik erzeugen (läuft im Hintergrund-Thread): %.0f ms" % ms(func(): Sfx.new()._music()))
|
|
print("Snapshot 6 Spieler: %.2f ms" % ms(func(): Game.new_battle(5, r).snapshot(0), 10))
|
|
quit()
|