最近《公主连结》的公会战又开启了,之前凭借yobot当上了管理(在这里感谢雨滴大佬,真是太nb了),不过毕竟不是自己敲出来的代码,总觉得没有感觉。老是想着能不能自己写个程序为工会做点贡献,正好,我们工会的排名和奖励机制和别的工会不大一样,别的工会一般是按照游戏里提供的“伤害”或者“积分”进行排序。我们为了防止有些人专挑好打的boss打,使用的是“红蓝刀积分”机制。
红蓝刀机制大概是这样的意思,《公主连结》的公会战一共有5个Boss,每个Boss的难易程度不一样,管理们商量出每个boss的正常伤害区间,大于这个区间的最大值就是蓝刀,小于最小值就是红刀,在区间内就是白刀。
同时,考虑到尾刀的存在,专门设置了橙刀,用来标记尾刀。
每种刀的积分如下:
- 蓝刀:+1(优质刀,一般靠暴击或者精准对轴才能打出来)
- 橙刀:+0.5(尾刀,尾刀统一按照+0.5计算,因此dd刀最好出在尾刀里)
- 白刀:+0(标准刀,基本按照轴来,伤害大概在这个区间里)
- 红刀:-1(劣质刀,没有按照轴来,或产生重大失误)
靠着雨滴大佬的yobot,可以自动生成Excel表格来统计各个玩家的伤害情况:
我就想,能不能写一个程序,根据管理们的红蓝刀线来自动完成上色功能呢?
乍一想,实现逻辑应该是挺简单的(也确实挺简单),通过Python按列遍历数据,然后根据不同区间填充不同的颜色即可。不过实际操作起来,因为以前没有试过”批量修改格式”,因此面向百度编程看很久,最终肝到凌晨4点才得以结束。
同时,因为实在是赶时间,代码写的也是完全以“能运行”为第一要义,完全没有考虑代码的可维护性,结构顺序,以及好好写注释(笑)。
每一个函数的作用就不细讲了,反正也是仅对我们工会有用的一个程序,源码会放在文末。大概讲一讲遇到的瓶颈,也算是记录一下心得。
1.修改文本
第一步当然是读取Excel文本的数据,读取完了以后自然要修改,当时在 xlwt
和 openxyxl
两个库中纠结,最终选择了通过 xlwt
与 xlutils
组合完成。
2.着色
这也是最核心的步骤,但是在CSDN以及别的论坛上对着色的介绍都甚少,最终花了很久才找到了解决方案,主要是通过 write_save.write()
方法来完成。
3.着漂亮的色
第一次成功着色以后的蓝色显得太刺眼,不是很好看,最后通过 xlwt.add_palette_colour("blue_colour", 40)
来完成。40这个数字是 add_palette_colour
里规定的,范围在8~64,每个数字对应一个RGB编码,具体的RGB编码在源代码的注释里。(就是因为一个一个试,试了好久才找到合适的颜色orz)
4.伤害值获取
其实很简单,注意到数据的记录格式都是类似:(2-5) 1109626 这种类型,只要使用 value=int(value[6:])
将字符串第六位以后的字符截取,并转化为整型即可。
5.确定当前遍历的是几周目的第几王,以此确定使用哪个区间的哪个颜色
用嵌套循环完成,外层确定周目数,内层确定王数,然后使用“+”进行字符串拼接,再决定使用哪个区间的哪个颜色 temp
:
1 | a=str(i)+"-"+str(j) |
6.尾刀的确定
这个其实也比较简单,注意到生成的excel表格中如果是尾刀则右边的格子必定存在数据,那么就只需要遍历偶数列,然后判断当前格子的右边是否空缺即可
放一下交互界面:
然后是涂色结果:
书记用了都说好.jpg:
最后放上源码~
1 | #coding=utf-8 |