extends SceneTree ## Balance-Simulation, die KI spielt auch den Menschen. Bei gleichen Regeln ## sind etwa 50 % Siege zu erwarten: ## godot --headless --path . -s tests/simulate.gd func _initialize() -> void: var games := 100 var r := RandomNumberGenerator.new() r.seed = 0 var t0 := Time.get_ticks_msec() print("Beide gierig (Erwartung etwa 50 %):") _run(games, r, true, true) print("Du mit Vorausschau, Gegner gierig:") _run(games / 2, r, false, true) print("Beide mit Vorausschau:") _run(games / 2, r, false, false) print("Kampagne (du mit Vorausschau), je Stufe:") for stage in [0, 4, 9, 14, 19, 24, 29]: _campaign(stage, games / 4, r) print("Dauer %.1f s" % ((Time.get_ticks_msec() - t0) / 1000.0)) quit() func _campaign(stage: int, games: int, r: RandomNumberGenerator) -> void: var wins := 0 for i in games: var g := Game.new_battle_with(Campaign.opponent(stage), r) while g.winner == "": AI.take_turn(g, g.current(), false) assert(g.turn < 300, "Spiel endet nicht") if g.winner == "human": wins += 1 var st := Campaign.stage(stage) print("Stufe %2d %-12s %2d Leben, %d Merkmale: Siege %3d%%" % [stage + 1, st.name, int(st.life), st.perks.size(), wins * 100 / games]) func _run(games: int, r: RandomNumberGenerator, human_greedy: bool, opp_greedy: bool) -> void: var wins := 0 var turns := 0 for i in games: var g := Game.new_battle(r) while g.winner == "": var p := g.current() AI.take_turn(g, p, human_greedy if p.is_human else opp_greedy) assert(g.turn < 300, "Spiel endet nicht") if g.winner == "human": wins += 1 turns += g.turn print("Siege %3d%% Ø Züge %.1f" % [wins * 100 / games, float(turns) / games])