213 lines
8.0 KiB
Python
213 lines
8.0 KiB
Python
"""
|
|
预设测试场景
|
|
提供各种预配置的战场状态用于测试
|
|
"""
|
|
from typing import Dict, Callable
|
|
from kards_battle.core.battle_engine import BattleEngine
|
|
from kards_battle.units.unit_loader import load_unit
|
|
from kards_battle.core.enums import LineType
|
|
|
|
|
|
class TestScenarios:
|
|
"""测试场景管理器"""
|
|
|
|
def __init__(self):
|
|
self.scenarios = {
|
|
'basic': self.scenario_basic,
|
|
'frontline': self.scenario_frontline_battle,
|
|
'squeeze': self.scenario_squeeze_test,
|
|
'resources': self.scenario_resource_test,
|
|
'massive': self.scenario_massive_battle,
|
|
'blitz': self.scenario_blitz_units,
|
|
'artillery': self.scenario_artillery_test,
|
|
'air': self.scenario_air_combat,
|
|
}
|
|
|
|
def list_scenarios(self) -> Dict[str, str]:
|
|
"""列出所有可用场景"""
|
|
return {
|
|
'basic': '基础部署 - 每方2个单位',
|
|
'frontline': '前线争夺 - 前线战斗场景',
|
|
'squeeze': '挤压测试 - 测试挤压机制',
|
|
'resources': '资源管理 - 不同费用单位',
|
|
'massive': '大规模战斗 - 满编队伍',
|
|
'blitz': '闪击战术 - BLITZ关键词单位',
|
|
'artillery': '火炮测试 - 火炮vs步兵',
|
|
'air': '空战场景 - 战斗机和轰炸机',
|
|
}
|
|
|
|
def load_scenario(self, name: str, engine: BattleEngine) -> bool:
|
|
"""加载指定场景"""
|
|
if name not in self.scenarios:
|
|
return False
|
|
|
|
scenario_func = self.scenarios[name]
|
|
scenario_func(engine)
|
|
return True
|
|
|
|
def scenario_basic(self, engine: BattleEngine):
|
|
"""基础部署场景"""
|
|
# 德军部署
|
|
infantry1 = load_unit("ger_infantry_grenadier")
|
|
tank1 = load_unit("ger_tank_panzer_iv")
|
|
engine.deploy_unit_to_support(infantry1, 0)
|
|
engine.deploy_unit_to_support(tank1, 0)
|
|
|
|
# 美军部署
|
|
infantry2 = load_unit("usa_infantry_gi")
|
|
tank2 = load_unit("usa_tank_sherman")
|
|
engine.deploy_unit_to_support(infantry2, 1)
|
|
engine.deploy_unit_to_support(tank2, 1)
|
|
|
|
# 设置资源
|
|
engine.debug_set_kredits(0, kredits=5, kredits_slot=5)
|
|
engine.debug_set_kredits(1, kredits=5, kredits_slot=5)
|
|
|
|
def scenario_frontline_battle(self, engine: BattleEngine):
|
|
"""前线争夺场景"""
|
|
# 德军占领前线
|
|
infantry1 = load_unit("ger_infantry_grenadier")
|
|
infantry2 = load_unit("ger_infantry_stormtrooper")
|
|
engine.deploy_unit_to_support(infantry1, 0)
|
|
engine.deploy_unit_to_support(infantry2, 0)
|
|
|
|
# 移动到前线
|
|
engine.debug_set_kredits(0, kredits=10)
|
|
engine.move_unit(infantry1.id, (LineType.FRONT, 0), 0)
|
|
|
|
# 美军准备进攻
|
|
marine = load_unit("usa_infantry_marine")
|
|
ranger = load_unit("usa_infantry_ranger")
|
|
engine.deploy_unit_to_support(marine, 1)
|
|
engine.deploy_unit_to_support(ranger, 1)
|
|
|
|
# 设置资源
|
|
engine.debug_set_kredits(0, kredits=5, kredits_slot=5)
|
|
engine.debug_set_kredits(1, kredits=5, kredits_slot=5)
|
|
|
|
def scenario_squeeze_test(self, engine: BattleEngine):
|
|
"""挤压机制测试场景"""
|
|
# 前线满编
|
|
for i in range(5):
|
|
unit = load_unit("ger_infantry_grenadier")
|
|
unit.name = f"Infantry {i+1}"
|
|
engine.deploy_unit_to_support(unit, 0)
|
|
if i < 5: # 前5个移到前线
|
|
engine.debug_set_kredits(0, kredits=10)
|
|
engine.move_unit(unit.id, (LineType.FRONT, i), 0)
|
|
|
|
# 准备挤压单位
|
|
squeeze_unit = load_unit("ger_tank_tiger")
|
|
engine.deploy_unit_to_support(squeeze_unit, 0)
|
|
|
|
# 设置资源
|
|
engine.debug_set_kredits(0, kredits=10, kredits_slot=10)
|
|
engine.debug_set_kredits(1, kredits=5, kredits_slot=5)
|
|
|
|
def scenario_resource_test(self, engine: BattleEngine):
|
|
"""资源管理测试场景"""
|
|
# 部署不同费用的单位
|
|
cheap = load_unit("ger_infantry_grenadier") # 费用1
|
|
medium = load_unit("ger_tank_panzer_iv") # 费用2
|
|
expensive = load_unit("ger_tank_tiger") # 费用4
|
|
|
|
engine.deploy_unit_to_support(cheap, 0)
|
|
engine.deploy_unit_to_support(medium, 0)
|
|
engine.deploy_unit_to_support(expensive, 0)
|
|
|
|
# 有限的资源
|
|
engine.debug_set_kredits(0, kredits=3, kredits_slot=3)
|
|
engine.debug_set_kredits(1, kredits=2, kredits_slot=2)
|
|
|
|
def scenario_massive_battle(self, engine: BattleEngine):
|
|
"""大规模战斗场景"""
|
|
# 德军满编
|
|
units_ger = [
|
|
"ger_infantry_grenadier",
|
|
"ger_infantry_stormtrooper",
|
|
"ger_tank_panzer_iv",
|
|
"ger_tank_tiger",
|
|
"ger_artillery_88mm",
|
|
]
|
|
for unit_id in units_ger:
|
|
unit = load_unit(unit_id)
|
|
engine.deploy_unit_to_support(unit, 0)
|
|
|
|
# 美军满编
|
|
units_usa = [
|
|
"usa_infantry_gi",
|
|
"usa_infantry_marine",
|
|
"usa_tank_sherman",
|
|
"usa_tank_pershing",
|
|
"usa_artillery_howitzer",
|
|
]
|
|
for unit_id in units_usa:
|
|
unit = load_unit(unit_id)
|
|
engine.deploy_unit_to_support(unit, 1)
|
|
|
|
# 充足的资源
|
|
engine.debug_set_kredits(0, kredits=12, kredits_slot=12)
|
|
engine.debug_set_kredits(1, kredits=12, kredits_slot=12)
|
|
|
|
def scenario_blitz_units(self, engine: BattleEngine):
|
|
"""闪击单位测试场景"""
|
|
# 部署带BLITZ关键词的单位
|
|
cavalry = load_unit("ger_infantry_15th_cavalry") # BLITZ
|
|
panzer = load_unit("ger_tank_panzer_iv") # BLITZ
|
|
ranger = load_unit("usa_infantry_ranger") # BLITZ
|
|
sherman = load_unit("usa_tank_sherman") # BLITZ
|
|
|
|
engine.deploy_unit_to_support(cavalry, 0)
|
|
engine.deploy_unit_to_support(panzer, 0)
|
|
engine.deploy_unit_to_support(ranger, 1)
|
|
engine.deploy_unit_to_support(sherman, 1)
|
|
|
|
# 设置资源
|
|
engine.debug_set_kredits(0, kredits=8, kredits_slot=8)
|
|
engine.debug_set_kredits(1, kredits=8, kredits_slot=8)
|
|
|
|
def scenario_artillery_test(self, engine: BattleEngine):
|
|
"""火炮测试场景"""
|
|
# 德军火炮
|
|
flak = load_unit("ger_artillery_88mm")
|
|
nebelwerfer = load_unit("ger_artillery_nebelwerfer")
|
|
engine.deploy_unit_to_support(flak, 0)
|
|
engine.deploy_unit_to_support(nebelwerfer, 0)
|
|
|
|
# 美军步兵在前线
|
|
gi1 = load_unit("usa_infantry_gi")
|
|
gi2 = load_unit("usa_infantry_gi")
|
|
gi1.name = "GI Squad 1"
|
|
gi2.name = "GI Squad 2"
|
|
engine.deploy_unit_to_support(gi1, 1)
|
|
engine.deploy_unit_to_support(gi2, 1)
|
|
|
|
# 移动美军到前线
|
|
engine.end_turn() # 切换到美军
|
|
engine.debug_set_kredits(1, kredits=10)
|
|
engine.move_unit(gi1.id, (LineType.FRONT, 0), 1)
|
|
engine.move_unit(gi2.id, (LineType.FRONT, 1), 1)
|
|
|
|
# 切回德军,准备火炮攻击
|
|
engine.end_turn()
|
|
engine.debug_set_kredits(0, kredits=10, kredits_slot=10)
|
|
|
|
def scenario_air_combat(self, engine: BattleEngine):
|
|
"""空战场景"""
|
|
# 德军空军
|
|
bf109 = load_unit("ger_fighter_bf109")
|
|
stuka = load_unit("ger_bomber_stuka")
|
|
engine.deploy_unit_to_support(bf109, 0)
|
|
engine.deploy_unit_to_support(stuka, 0)
|
|
|
|
# 美军空军
|
|
p51 = load_unit("usa_fighter_p51")
|
|
p47 = load_unit("usa_fighter_p47")
|
|
b17 = load_unit("usa_bomber_b17")
|
|
engine.deploy_unit_to_support(p51, 1)
|
|
engine.deploy_unit_to_support(p47, 1)
|
|
engine.deploy_unit_to_support(b17, 1)
|
|
|
|
# 设置资源
|
|
engine.debug_set_kredits(0, kredits=8, kredits_slot=8)
|
|
engine.debug_set_kredits(1, kredits=10, kredits_slot=10) |