Skip to content

Instantly share code, notes, and snippets.

@LokiSharp
Last active November 29, 2018 05:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LokiSharp/f6e5d65817410eb5fc500dbfc3a37b46 to your computer and use it in GitHub Desktop.
Save LokiSharp/f6e5d65817410eb5fc500dbfc3a37b46 to your computer and use it in GitHub Desktop.
from src.division_builder.division_builder import LandDivisionBuilder
from src.land_warfare.land_warfare_calc import calc_damage
from src.division_builder.technologies import technologies, equipments
from src.utils import round_util, round_sum, round_min, round_max
builder = LandDivisionBuilder("data/")
division_template_dict1 = {
'name': 'Test-Division_01 11步6炮',
'division_names_group': 'Test_Arm_01',
'regiments': ['infantry'] * 11 + ['artillery_brigade'] * 6,
'supports': ['engineer', 'recon', 'artillery', 'anti_air', 'anti_tank'],
'equipments': equipments,
'technologies': technologies,
}
division_template_dict2 = {
'name': 'Test-Division_02 8机步6坦4自火',
'division_names_group': 'Test_Arm_02',
'regiments': ['mechanized'] * 8 + ['super_heavy_armor'] * 6 + ['super_heavy_sp_artillery_brigade'] * 4,
'supports': ['engineer', 'recon', 'artillery', 'anti_air', 'anti_tank'],
'equipments': equipments,
'technologies': technologies,
}
division_template_dict3 = {
'name': 'Test-Division_03 25步',
'division_names_group': 'Test_Arm_03',
'regiments': ['infantry'] * 25,
'supports': ['engineer', 'recon', 'artillery', 'anti_air', 'anti_tank'],
'equipments': equipments,
'technologies': technologies,
}
division_template_dict4 = {
'name': 'Test-Division_02 8机步6坦4自火',
'division_names_group': 'Test_Arm_02',
'regiments': ['mechanized'] * 8 + ['modern_armor'] * 6 + ['modern_sp_artillery_brigade'] * 4,
'supports': ['engineer', 'recon', 'artillery', 'anti_air', 'anti_tank'],
'equipments': equipments,
'technologies': technologies,
}
division_template_dict5 = {
'name': 'Test-Division_05 11步5炮1重自反',
'division_names_group': 'Test_Arm_05',
'regiments': ['infantry'] * 11 + ['artillery_brigade'] * 5 + ['heavy_tank_destroyer_brigade'] * 1,
'supports': ['engineer', 'recon', 'artillery', 'anti_air', 'anti_tank'],
'equipments': equipments,
'technologies': technologies,
}
division1 = builder.calculate_stats(division_template_dict1)
division2 = builder.calculate_stats(division_template_dict2)
# division3 = builder.calculate_stats(division_template_dict3)
# division4 = builder.calculate_stats(division_template_dict4)
# division5 = builder.calculate_stats(division_template_dict5)
print(division1)
print(division2)
# print(division3)
# pprint(division4)
# print(division5)
round_degree = 2
def print_result(result_1, result_2):
print(
f"攻击伤害: "
f"合计:{round_sum(result_1):.2f} "
f"均值:{round_util(sum(result_1) / len(result_1)):.2f} "
f"最大值:{round_max(result_1):.2f} "
f"最小值:{round_min(result_1):.2f}"
)
print(
f"反击伤害: "
f"合计:{round_sum(result_2):.2f} "
f"均值:{round_util(sum(result_2) / len(result_2)):.2f} "
f"最大值:{round_max(result_2):.2f} "
f"最小值:{round_min(result_2):.2f}"
)
def cal_range(division_1, division_2):
division_a = division_1.copy()
division_b = division_2.copy()
print(f"进攻方属性:"
f"宽度:{division_a['Combat Width']:.2f} "
f"装备度:{division_a['HP']:.2f} "
f"组织度:{division_a['Organisation']:.2f} "
f"软攻:{division_a['Soft attack']:.2f} "
f"硬攻:{division_a['Hard attack']:.2f} "
f"防御:{division_a['Defense']:.2f} "
f"突破:{division_a['Breakthrough']:.2f} "
f"装甲厚度:{division_a['Armor']:.2f} "
f"穿甲深度:{division_a['Piercing']:.2f} "
f"硬度:{division_a['Hardness']:.2f} ")
print(f"防守方属性:"
f"宽度:{division_b['Combat Width']:.2f} "
f"装备度:{division_b['HP']:.2f} "
f"组织度:{division_b['Organisation']:.2f} "
f"软攻:{division_b['Soft attack']:.2f} "
f"硬攻:{division_b['Hard attack']:.2f} "
f"防御:{division_b['Defense']:.2f} "
f"突破:{division_b['Breakthrough']:.2f} "
f"装甲厚度:{division_b['Armor']:.2f} "
f"穿甲深度:{division_b['Piercing']:.2f} "
f"硬度:{division_b['Hardness']:.2f} ")
org_damage_l = []
org_back_damage_l = []
str_damage_l = []
str_back_damage_l = []
battle_round = 0
while division_a['Organisation'] > 0 and division_b['Organisation'] > 0:
battle_round += 1
print(f'第{battle_round}回合:')
if division_a['Organisation'] > 0:
org_damage, str_damage = calc_damage(division_a, division_b, 'Defense')
division_b['Organisation'] = division_b['Organisation'] - org_damage
division_b['HP'] = division_b['HP'] - str_damage
org_damage_l.append(round_util(org_damage))
str_damage_l.append(round_util(str_damage))
print(f"防御方伤害:组织度:{org_damage:.2f}({(org_damage/division_2['Organisation']*100):.2f}%) 装备度:{str_damage:.2f}({(str_damage/division_2['HP']*100):.2f}%)")
if division_b['Organisation'] > 0:
org_back_damage, str_back_damage = calc_damage(division_b, division_a, 'Breakthrough')
division_a['Organisation'] = division_a['Organisation'] - org_back_damage
division_a['HP'] = division_a['HP'] - str_back_damage
org_back_damage_l.append(round_util(org_back_damage))
str_back_damage_l.append(round_util(str_back_damage))
print(f"进攻方伤害:组织度:{org_back_damage:.2f}({(org_back_damage/division_1['Organisation']*100):.2f}%) 装备度:{str_back_damage:.2f}({(str_back_damage/division_1['HP']*100):.2f}%)")
print('组织度:')
print_result(org_damage_l, org_back_damage_l)
print('装备度:')
print_result(str_damage_l, str_back_damage_l)
print(f"攻击回合数 {len(org_damage_l):.2f} 反击回合数 {len(org_back_damage_l):.2f}")
print(f"进攻方组织度 {division_a['Organisation']:.2f} 防守方组织度 {division_b['Organisation']:.2f}")
print(f"进攻方装备度 {division_a['HP']:.2f} 防守方组织度 {division_b['HP']:.2f}")
if division_a['Organisation'] > division_b['Organisation']:
print('进攻方胜利')
else:
print('防守方胜利')
if __name__ == '__main__':
division_list_a = [division2]
division_list_b = [division1, division2]
for a in division_list_a:
for b in division_list_b:
print("=" * 40, f"{a['Name']} vs {b['Name']}", "=" * 40)
cal_range(a, b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment