真三国无双武将心得(Python开发一个真三国无双20th纪念人物羁绊计算器)

《真三国无双20th纪念》

目前 《真三国无双20th纪念》 这个手游在国内没有代理商,所以服务器是国际服,想找该游戏的去一些有外服的应用商店查找吧。

真三国无双武将心得(Python开发一个真三国无双20th纪念人物羁绊计算器)(1)

应广大群友要求制作了一个人物副将羁绊计算机,用于增加整体队伍属性使用。

真三国无双武将心得(Python开发一个真三国无双20th纪念人物羁绊计算器)(2)

真三国无双武将心得(Python开发一个真三国无双20th纪念人物羁绊计算器)(3)

先来看一个我自己搭配的一个比较优质的组合,由于这游戏人物太多了几百个人物,所以想要达到一个最优的组合还需要氪金一下。

真三国无双武将心得(Python开发一个真三国无双20th纪念人物羁绊计算器)(4)

真三国无双武将心得(Python开发一个真三国无双20th纪念人物羁绊计算器)(5)

羁绊计算器源码

先来看一个效果图吧,我用Django部署到我的个人服务器上了。

真三国无双武将心得(Python开发一个真三国无双20th纪念人物羁绊计算器)(6)

真三国无双武将心得(Python开发一个真三国无双20th纪念人物羁绊计算器)(7)

源码如下:

import pandas as pd from collections import Counter import numpy as np df = pd.read_excel("sanguo_data.xlsx",sheet_name="全部羁绊") df_s = pd.read_excel("sanguo_data.xlsx",sheet_name="特殊羁绊") df_c = pd.read_excel("sanguo_data.xlsx",sheet_name="国家") name_1 = "吕布" # 优先 attr_type = "atk" # 这里选择一个优先选择属性项 # attr属性列表索引序号 attr_type_dict ={ "atk" : 0,"def":1,"HP":2,"war":3,"str":4,"move":5 } all_data_list = [] for i in range(len(df)): if name_1 in df["name1"][i] or name_1 in df["name2"][i] or name_1 in df["name3"][i] : # 添加遍历的武将姓名 name_list = [df['name1'][i],df['name2'][i],df['name3'][i]] name_list = [i for i in name_list if i != '-'] name_tuple = tuple(name_list) # 获取当前记录的属性值 data_atk = df['atk'][i] data_def = df['def'][i] data_HP = df['HP'][i] data_war = df['war'][i] data_str = df['str'][i] data_move = df['move'][i] data_list = (data_atk,data_def,data_HP,data_war,data_str,data_move) # 计算当前记录所选属性的贡献度 attr_dict = { "atk" : data_atk,"def":data_def,"HP":data_HP,"war":data_war,"str":data_str,"move":data_move } attr_w = attr_dict[attr_type] / len(name_list) result_data = (name_tuple,data_list,attr_w) if data_list[attr_type_dict[attr_type]] != 0: all_data_list.append(result_data) # 根据所选择的羁绊人物填充到列表,数值累计求和 def append_sum_data(name_list,df,i): # 设置全局变量 global sum_atk,sum_def,sum_HP,sum_war,sum_str,sum_move # 添加遍历的武将姓名 name_list = name_list [df['name1'][i],df['name2'][i],df['name3'][i]] # 累计求和遍历的武将关联的数值属性 sum_atk = sum_atk df['atk'][i] sum_def = sum_def df['def'][i] sum_HP = sum_HP df['HP'][i] sum_war = sum_war df['war'][i] sum_str = sum_str df['str'][i] sum_move = sum_move df['move'][i] # print(sum_atk,sum_def,sum_HP,sum_war,sum_str,sum_move) return name_list # 计算全部羁绊关联的武将且优先选择定位属性 name_list = [] sum_atk = 0 sum_def = 0 sum_HP = 0 sum_war = 0 sum_str = 0 sum_move = 0 for i in range(len(df)): # 先遍历 name_1 优选,根据一个优先选择项排除无用的羁绊关联 if name_1 in df['name1'][i]: # 根据所选择的羁绊人物填充到列表,数值累计求和 name_list = append_sum_data(name_list,df,i) elif name_1 in df['name2'][i]: name_list = append_sum_data(name_list,df,i) elif name_1 in df['name3'][i]: name_list = append_sum_data(name_list,df,i) # name1 武将列表去重、删除空白制表符 name1_list = list(set(name_list)) name1_list = [i for i in name1_list if i != '-'] name1_list.remove(name_1) print("{} {} 羁绊所需 {} 人物:".format(name_1,attr_type,len(name1_list)),",".join(name1_list)) print("计算结果:攻击:{},防御:{},生命:{},无双:{},气力:{},移动:{}".format(sum_atk,sum_def,sum_HP,sum_war,sum_str,sum_move)) for name in name1_list: for i in range(len(df)): if name in df["name1"][i] or name in df["name2"][i] or name in df["name3"][i] : # 添加遍历的武将姓名 name_list = [df['name1'][i],df['name2'][i],df['name3'][i]] name_list = [i for i in name_list if i != '-'] name_tuple = tuple(name_list) # 获取当前记录的属性值 data_atk = df['atk'][i] data_def = df['def'][i] data_HP = df['HP'][i] data_war = df['war'][i] data_str = df['str'][i] data_move = df['move'][i] data_list = (data_atk,data_def,data_HP,data_war,data_str,data_move) # 计算当前记录所选属性的贡献度 attr_dict = { "atk" : data_atk,"def":data_def,"HP":data_HP,"war":data_war,"str":data_str,"move":data_move } attr_w = attr_dict[attr_type] / len(name_list) result_data = (name_tuple,data_list,attr_w) if data_list[attr_type_dict[attr_type]] != 0: all_data_list.append(result_data) # 按照w权重排序 all_data_list = list(set(all_data_list)) all_data_list = sorted(all_data_list, key=lambda x: x[2],reverse=True) result_name_list = [] result_data_list = [0,0,0,0,0,0] result_all_data_list = [] person_num = 11 # 限制羁绊1-9人 for data in all_data_list: if len(result_name_list) < person_num: # 累计填充武将 result_name_list = result_name_list list(data[0]) result_name_list = list(set(result_name_list)) # 累计求和数值 result_data_list = list(np.sum([result_data_list,data[1]], axis = 0)) # 重新构建贡献数据 result_all_data_list.append(data) # 计算势力数值加成获取3同势力数据 df_s_3_nation = df_s[df_s["data"]=="3同势力"] df_s_3_dict = df_s_3_nation.to_dict('records')[0] # 将羁绊全部武将列入 df_c_result = df_c[df_c['name'].isin(result_name_list)] df_c_result.reset_index(inplace=True,drop=True) # 统计国家频次list 计算3个同样国家的人物触发羁绊 counter = Counter(df_c_result["nation"].to_list()) nation_list = [] for k,v in counter.items(): if v>2: nation_list.append(k) # 激活的国家羁绊数量 len_nation_list = len(nation_list) # 国家羁绊增加数值 nation_data_list = [ df_s_3_dict["atk"]*len_nation_list, df_s_3_dict["def"]*len_nation_list, df_s_3_dict["HP"]*len_nation_list, df_s_3_dict["war"]*len_nation_list, df_s_3_dict["str"]*len_nation_list, df_s_3_dict["move"]*len_nation_list ] result_name_list.remove(name_1) result_data_list = list(np.sum([result_data_list,nation_data_list], axis = 0)) print("------------------------------------") print("{} {} 羁绊所需 {} 人物:".format(name_1,attr_type,len(result_name_list)),",".join(result_name_list)) print("国家羁绊激活 {} 个".format(len_nation_list)) print("计算结果:攻击:{},防御:{},生命:{},无双:{},气力:{},移动:{}".format(result_data_list[0],result_data_list[1],result_data_list[2],result_data_list[3],result_data_list[4],result_data_list[5])) print("------------------------------------") print("羁绊贡献") for data in result_all_data_list: print("组合:{},贡献:攻击:{},防御:{},生命:{},无双:{},气力:{},移动:{}".format(data[0],data[1][0],data[1][1],data[1][2],data[1][3],data[1][4],data[1][5],)) print("------------------------------------") print("还可增加的属性根据武将职业自己搭配") print("包含2同名武将:攻击:{},防御:{},生命:{},无双:{},气力:{},移动:{}".format(30,30,30,30,30,30)) if len(result_name_list)<10: print("包含3同名武将:攻击:{},防御:{},生命:{},无双:{},气力:{},移动:{}".format(50,50,50,50,50,50)) print("包含1国羁绊:攻击:{},防御:{},生命:{},无双:{},气力:{},移动:{}".format(30,30,30,30,30,30)) print("包含3攻武将:攻击:{},无双:{}".format(100,50)) print("包含3防武将:攻击:{},防御:{}".format(50,100)) print("包含3迅武将:攻击:{},气力:{}".format(50,100)) print("包含3射武将:攻击:{},无双:{},气力:{}".format(50,50,50)) print("包含3特武将:攻击:{},无双:{},气力:{}".format(50,50,50))

本地脚本计算结果

吕布人物羁绊

吕布 atk 羁绊所需 5 人物: 貂蝉,吕玲绮,陈宫,关羽,张辽 计算结果:攻击:450,防御:100,生命:50,无双:200,气力:0,移动:0 ------------------------------------ 吕布 atk 羁绊所需 10 人物: 貂蝉,徐晃,吕玲绮,曹操,关羽,陈宫,夏侯惇,董卓,张辽,关银屏 国家羁绊激活 2 个 计算结果:攻击:1010,防御:210,生命:160,无双:260,气力:260,移动:0 ------------------------------------ 羁绊贡献 组合:('吕布', '吕玲绮'),贡献:攻击:100,防御:0,生命:0,无双:50,气力:0,移动:0 组合:('张辽', '吕玲绮'),贡献:攻击:100,防御:0,生命:0,无双:0,气力:50,移动:0 组合:('关银屏', '关羽'),贡献:攻击:100,防御:50,生命:0,无双:0,气力:0,移动:0 组合:('关羽', '吕布'),贡献:攻击:100,防御:50,生命:0,无双:0,气力:0,移动:0 组合:('吕布', '陈宫'),贡献:攻击:100,防御:50,生命:0,无双:0,气力:0,移动:0 组合:('曹操', '陈宫'),贡献:攻击:100,防御:0,生命:0,无双:0,气力:50,移动:0 组合:('关羽', '徐晃'),贡献:攻击:100,防御:0,生命:0,无双:0,气力:50,移动:0 组合:('夏侯惇', '张辽', '关羽'),贡献:攻击:100,防御:0,生命:50,无双:0,气力:50,移动:0 组合:('张辽', '吕布', '陈宫'),贡献:攻击:100,防御:0,生命:50,无双:50,气力:0,移动:0 组合:('貂蝉', '董卓'),贡献:攻击:50,防御:0,生命:0,无双:100,气力:0,移动:0 ------------------------------------ 还可增加的属性根据武将职业自己搭配 包含2同名武将:攻击:30,防御:30,生命:30,无双:30,气力:30,移动:30 包含1国羁绊:攻击:30,防御:30,生命:30,无双:30,气力:30,移动:30 包含3攻武将:攻击:100,无双:50 包含3防武将:攻击:50,防御:100 包含3迅武将:攻击:50,气力:100 包含3射武将:攻击:50,无双:50,气力:50 包含3特武将:攻击:50,无双:50,气力:50

关羽人物羁绊

关羽 atk 羁绊所需 8 人物: 张辽,吕布,徐晃,张飞,夏侯惇,刘备,鲍三娘,关银屏 计算结果:攻击:450,防御:150,生命:250,无双:0,气力:150,移动:0 ------------------------------------ 关羽 atk 羁绊所需 10 人物: 张辽,吕布,吕玲绮,曹操,魏延,李典,夏侯惇,陈宫,刘备,徐晃 国家羁绊激活 3 个 计算结果:攻击:890,防御:240,生命:140,无双:140,气力:240,移动:0 ------------------------------------ 羁绊贡献 组合:('吕布', '陈宫'),贡献:攻击:100,防御:50,生命:0,无双:0,气力:0,移动:0 组合:('刘备', '魏延'),贡献:攻击:100,防御:0,生命:0,无双:0,气力:50,移动:0 组合:('张辽', '吕玲绮'),贡献:攻击:100,防御:0,生命:0,无双:0,气力:50,移动:0 组合:('关羽', '吕布'),贡献:攻击:100,防御:50,生命:0,无双:0,气力:0,移动:0 组合:('吕布', '吕玲绮'),贡献:攻击:100,防御:0,生命:0,无双:50,气力:0,移动:0 组合:('夏侯惇', '曹操'),贡献:攻击:100,防御:0,生命:50,无双:0,气力:0,移动:0 组合:('关羽', '徐晃'),贡献:攻击:100,防御:0,生命:0,无双:0,气力:50,移动:0 组合:('李典', '夏侯惇'),贡献:攻击:100,防御:50,生命:0,无双:0,气力:0,移动:0 ------------------------------------ 还可增加的属性根据武将职业自己搭配 包含2同名武将:攻击:30,防御:30,生命:30,无双:30,气力:30,移动:30 包含1国羁绊:攻击:30,防御:30,生命:30,无双:30,气力:30,移动:30 包含3攻武将:攻击:100,无双:50 包含3防武将:攻击:50,防御:100 包含3迅武将:攻击:50,气力:100 包含3射武将:攻击:50,无双:50,气力:50 包含3特武将:攻击:50,无双:50,气力:50

#python##真三国无双##游戏脚本##游戏外挂#

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页