项目背景
先来说说这个项目的起因。我在玩一款叫刀塔传奇的手游(真不是打广告),作为7年经验的刀狗,这款手游在内容上深深的吸引住了我,第二个区从14年8月开始玩到现在了,第一个区要追溯到14年2月。最近刀塔传奇开了新的核心玩法公会战,因为奖励丰厚,所以史无前例的撕逼大战轰轰烈烈的开始了。
关于公会战的要素有很多,可以看下下面3个介绍,不多做展开。
然后问题来了。
其一:每一条路上的战斗顺序是按照战斗力从高到低的顺序排的,因为存在阵容克制,你又看不到对方布阵,所以出战顺序会非常重要。然而,公会界面里的分路查看是这个样子的:


完全是按照成员排序的,成员内部排序也是乱的
这对于一个想要精心布阵以弱胜强的会长大人来说是很头疼的问题。
其二:公会面对成绩压力,会根据活跃程度以及实力、潜力进行人员优化,那就需要清楚地知道每个成员的战力,排名。(虽然我们很尽力的想要不放弃每一个会员,但是公会成绩不好很难向土豪和那么用心玩的低v交代。)然而,公会里面查看每个成员是这样的:

管理界面也只能看到活跃和团本挑战次数:


项目需求
由上面的问题可以看出,我们需要做一个数据可视化的东西出来,由于手游的特性,我们要做的是一个APP。(之前也试过excel来统计,可这玩意对于精确到英雄的可视化实在没什么好办法)
但是这个游戏分为3个大区,安卓区,iOS越狱区,iOS正版区。由于安卓和越狱的特性,是可以直接读取游戏内的数据的,各种xx助手也数不胜数,所以我们只需要做iOS正版的APP。(我会跟你们说我只会iOS么)
这个APP功能出要有:
- 添加,删除成员
- 战力排序的成员列表
- 添加,编辑,删除队伍
- 选择英雄
- 每条分路上的队伍数量,队伍次序
- 每条分路上的战力分布
- 预备几种分路方案,一键分路
开发过程
- 英雄列表,上刀塔大师网上去把英雄扒下来。
我原本是要扒小头像的,但是大师里面的小头像藏得好深,而且一下子没有找到正确的映射,只能退而求其次,扒封面。
原网址在这里http://dtcq.gamedashi.com/cards/index.html
要一张一张的下真的好low啊,而且做不到图片与英雄id,url,以及英雄名字快速对应起来。我想用爬虫爬,可是Ruby我只懂个皮毛,Python我又不会。最后没办法,只能显示网页源代码,直接操作字符串了。

这字符串弄下来了,写个正则又嫌麻烦,索性直接使用
</li>
这样的标签分割字符串,最终把图片用SDWebImage
都下下来,做成了个plist:

- 数据存储
由于这个版本没有网络请求,所有数据都采用CoreData存储。我使用了个非常强大又傻瓜的开源库,ObjectiveRecord,对于我这样的菜鸡来说比MagicalRecord好用不知道多少倍= =。以下是成员,队伍,英雄的模型关系:
Paste_Image.png
理论上是成员拥有队伍,队伍包含英雄的关系。
- 战力分布图
这里我使用了PNChart(用行动替周大神打广告)
成果展示







使用效果
一阶段开发完毕之后,我开心的发给各位会长大大使用,结果发现了很多问题。
- 英雄选择界面图片太多产生内存警告。
- 手输一小时才输了50多队,一个强力公会一共有400多队甚至500多队,全部输完要1天!
- 公会一共有会长一名长老5名,管理层之间想要共享数据,总不能都手输一遍吧?
解决方案
- 第一个问题的原因是
[UIImage imageNamed:xxx]
将图片都缓存到内存里不释放,替换成[UIImage imageWithContentsOfFile:path]
即可 - 2,3问题合成一个,用服务器存储数据,不过安全保密性要好,不然被人知道分路了怎么办?做一个网页用来编辑阵容,会长发出一个外链给公会成员自己编辑阵容,编辑完成之后提交,类似git pullrequest这样的操作,会长选择性的合并即可。
最后问题来了,我这个菜鸡不会写网页和服务端啊?难道要自学么?还是有朋友愿意来帮我?
网友评论