真三国无双武将心得(Python开发一个真三国无双20th纪念人物羁绊计算器)
目前 《真三国无双20th纪念》 这个手游在国内没有代理商,所以服务器是国际服,想找该游戏的去一些有外服的应用商店查找吧。
应广大群友要求制作了一个人物副将羁绊计算机,用于增加整体队伍属性使用。
先来看一个我自己搭配的一个比较优质的组合,由于这游戏人物太多了几百个人物,所以想要达到一个最优的组合还需要氪金一下。
羁绊计算器源码先来看一个效果图吧,我用Django部署到我的个人服务器上了。
源码如下:
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