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, } division_1 = builder.calculate_stats(division_template_dict1) division_2 = builder.calculate_stats(division_template_dict2) division_3 = builder.calculate_stats(division_template_dict3) division_4 = builder.calculate_stats(division_template_dict4) division_5 = builder.calculate_stats(division_template_dict5) print(division_1) print(division_2) print(division_3) print(division_4) print(division_5) round_degree = 2 test_temp = { "Name": "受测模板", "Division Names Group": "Test_Arm_02", "Organisation": 10, "HP": 10, "Soft attack": 10, "Hard attack": 10, "Defense": 0, "Breakthrough": 0, "Armor": 0, "Piercing": 0, "Combat Width": 10, "Hardness": 0, } 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_b = test_temp.copy() division_list_a = [division_1] division_list_b = [division_2] # test_stat = 'Soft attack' # for i in range(0, 101): # division_a = test_temp.copy() # division_a['Name'] = f'测试对象 {test_stat} {i}' # division_a[test_stat] = i # division_list_a.append(division_a) 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)