【IT168 技术】在本系列的文章中,作者举例分析了国内各公司网络软件中的Bug情况和基于这些Bug可以分析得到的这些公司的开发管理状况。其中的数据取自2007-2012年网络上运行的各种游戏和软件系统,还有一些数据并没有到发布的状态,所以,后期会补充从2005到2012年一些游戏数据情况分析的文字出来。本文主要介绍网易一款游戏的逻辑Bug,以及对问题的分析。
网易的问题和分析
网易的东西用的不多,2012年上半年看到了支付宝里面的一个《战国风云》的宣传,貌似和曾经玩过的《热血三国》很类似(其实自从热血三国推出后,很多公司都模仿热血三国模式进行了自己的三国类或者战国类型的游戏开发,这样的抄袭很常见),于是就过去开始玩了一下。
结果发现了这样的一些问题:
1、一支部队从A走到B建立一个据点,然后再到C,如果没有到C的时候,就撤掉了B据点,部队会从中途往B据点返回,发现B消失了,就立刻回到A,然后部队损失一个百分比,好像是10%,因为有段时间没有玩了,所以,数值记得不是特别清楚。部队出发的时候每次携带都是往返的粮食数量,建立据点后,就可以立刻得到补充——这一点和热血三国比起来就弱了一些,热血三国的做法是,每个据点的粮食是单独计算的,必须运送过去或者收获到粮食,粮食不是全局共用的,这两者之间的数值计算差距,可就非常大了(注:青润曾经在game2热血三国第一服务器成为了那个服务器的老大,全服的州城12个,我手中的两个账号控制了4个,前后玩了将近一年时间,投入60块钱,最后卖掉一个账号3000块钱完全退出。个人认为,热血三国的数值计算做得很细,大部分地方考虑的都比较合理,几乎没有发现如此明显的弱点。当然后来热血三国升级后我就没有再玩,现在的情况就不知道了)。
2、同样一支部队从A走到B建立一个据点,然后再到C建立一个据点,再到D建立一个据点,……中间只要我撤掉一些或者几个据点,部队自动返回,就会出现损失同样百分比的部队数量,军队立刻回到出发城市。
3、在据点里没有出发的部队会立刻回到出发城市,并且没有任何兵力损失。
4、针对这一点,很多玩家开始用这样的方式进行部队撤回:将领带一个兵出去,撤掉据点,将领返回,兵力一个不会损失就全部回到了出发城池。
分析,网易的程序员可能是为了减少代码的复杂程度,我不了解他们的技术水平或者数学到底学的如何,但是从这里来看,这样的简化明显是不符合常规逻辑的,的确,这样的方式让代码的复杂度减少了很多,也许是为了性能考虑也许是确实感觉自己的服务器承受不了这样程度的复杂计算,但是,真得加上就很复杂么?笔者认为这是需要评估的,笔者没有时间去为他们做这方面的详细评估,所以只能写出来一泄了之。
当然,热血三国也出现过一些比较明显的bug,诸如整点定时养兵法,只要在整点的那一秒,城池内是有粮食的,就可以保证不会出现逃兵的事情。于是本来只能养100万军队的,养了5000万军队,每次出发征战都要到处调集粮食然后才能出动。当然,别人也无法攻打,无论有多少部队,一次都只能带一定数量的,对付别人兵城内的几千万军队都属于被秒死。而同样也出现了使用计谋让粮草车自动返回然后进攻这个城池的对应战术。于是激发了后续的应对战术就是多路定点运粮法和特殊时期道具送粮法等等。
另外,在这类游戏里面大都存在距离计算问题的粗略性,基本都采用了笔者称之为九宫格计算法的方式,也就是对角线和边角之间的距离同等。而实际上应该采用的是地图中心等距计算法,但是后者的计算复杂度要比前者高出很多个数量级。
关于这类游戏的内容和如何才能吸引玩家积极投入,而不是报复性投入,笔者曾经做过一些深入的分析,但是还没有能全部整理出来,诸如,不要故意通过活动制造玩家冲突,要让玩家主动发生冲突,前者会造成一些玩家的反感而退出游戏,而后者是必然会发生的。
例如,热血三国曾经推出一个挖宝的任务,挖宝的时间是24小时内的半个小时以上的采集,而经常打开宝藏地图看到的挖宝地点是别人已经占领正在进行采集的地点,于是,这样就不可避免的发生冲突,一方花了钱,另一方是先来后到不愿意让,这样通过活动设定让玩家发生冲突的活动基本上刚开始没多久就消亡了。
也就是说,不要拿玩家当傻瓜,刻意的作恶,会引来玩家的反抗的。关于这方面和一些其他部分的数据因为不属于bug范畴,所以就不在本文中进行分析了。
网易的答复和我的失望
网易的人看到我发的微博后就联系上我,想要知道是怎样的数值计算问题。于是,青润直接把上面提到的内容全部拷给了他们,因为本来就是为了交流沟通。
网易发来的第一封邮件的内容
你好,青润先生
我是网易的***。《战国风云》是我负责的一款产品。我听同事说你对网易的产品有一些评论,其中有点名说到《战国风云》有一些数理逻辑的缺陷。比较好奇,所以跟同事要了你的email,冒昧写信给你,想请教一下,你说的数理逻辑缺陷,具体的是指什么呢?还望不吝赐教,呵呵。我们也希望和第三方人士多交流一下看法。
抄送的同事**是《战国风云》现在的主****,对其中的一些数值问题,他参与讨论,能提供一些直接具体的信息。
期待回复,多谢!
Regards
***
然后回复
您好
我的文字还没有写完,不过,网易的反应算是最快的了。
网易的东西我用的不多,只有这个游戏也是因为意外才开始玩了一下。我把文字先贴给你们看看,昨晚刚刚写完关于你们的这个产品的这段文字。
网易的东西用的不多,2012年上半年看到了支付宝里面的一个《战国风云》的宣传,貌似和曾经玩过的《热血三国》很类似(其实自从热血三国推出后,很多公司都模仿热血三国模式进行了自己的三国类或者战国类型的游戏开发,这样的抄袭很常见),于是就过去开始玩了一下。
结果发现了这样的一些问题:
……(之前提到的Bug问题,后续的修订就不可能发出去了)
网易发来的第二封邮件的内容
青润:
你好,我是战国风云的****,针对你所提出的2个问题,我在这里做下解释:
存在通过放弃要塞(玩家占领的野地),使得玩家的兵力瞬间回到主城。
现状:
当出征的军队战斗完毕并返回出发地后,在行军到出发地时,如果发现不能正确返回时(出发地被放弃、出发地已经有将领驻扎),该将领已经所携带的军队会瞬间回到主城,并损失10%的士兵。
当放弃驻扎地的时候,如果驻扎地有将领存在则无法放弃,否则可以放弃。如果里面有士兵,则士兵会瞬间返还主城,并不会有相关损失。
带来的隐患:
玩家可以通过消耗将领的精力和一定数量的士兵(数量可为零),使得玩家的在城外的部分军队可以瞬回主城,将领也可以花费很短的时间返回主城。
为什么这样设定?
这个隐患在设计的时候我们预料到了,但是如果为避免隐患,则只有一个办法:当军队出征时,出发地无法被主动放弃。
如果禁止放弃的话,在09年游戏刚推出的时候会导致游戏的自由度过少,并影响游戏的体验,这个我们有玩家调查来证实。
另外由于存在要塞增兵机制、将领的出征带兵人数可自由设定 这些基础的游戏设定,必然导致一个要塞里面有军队无将领发生,这个时候如果不允许玩家通过放弃要塞来回收这些士兵,在该要塞的将领在远距离出征的情况下,则只能通过引入新的将领来带回这个要塞的士兵,这样会导致玩家理解起来较为麻烦,也更不容易学习。
所以我们保留了这个设计。
带来的隐患有多大?
这个设定可以这样理解, 花费 将领的10点精力值一定数量的士兵(数量可为零), 来换取部分军队的瞬间回城和将领的快速回城,出征将领一般为主力将,所以玩家不可能真正无损的实现瞬间回城。
在09年战国推出的时候,玩家的士兵很珍贵,如果军队在外出征,如果赶回家里,通常需要,而且没有加速行军的方法,后来推出相关道具,也是需要付费的,这个时候,如果遇到有其他玩家入侵,玩家可以利用这个方法快速将军队掉回原出发地。
另外,这个设计只是让玩家的军队快速回城,而无法做到快速出征,所以对整体战斗的影响不大,再加上玩家都已经适应了,我们也就作为特色给予保留,没有进行修改。
问题二:不要故意通过活动制造玩家冲突,要让玩家主动发生冲突,前者会造成一些玩家的反感而退出游戏,而后者是必然会发生的。
玩家的直接矛盾诱发,主要来源于以下六种日常行为:
a、主动掠夺玩家城池获得资源,主动掠夺玩家正在采集的要塞获得材料。
b、主动抢夺玩家在争霸赛中的物品,获得更好的收益。
c、主动抢夺玩家在卫城中的物品,获得更好的收入,并可能直接摧毁玩家的建筑。
d、主动占领玩家联盟所占领的名城,使得玩家集体理由受损。
e、联盟的产出由盟主一个人来发放,玩家在联盟内部因为分赃不均等行为产生裂痕。
f、国王通过封官、研究国家科技、安排边关战人员等方式来区别对待不同玩家,使得内部产生矛盾。
在我们的游戏中, 新手玩家在游戏中几乎不会遇到这些问题,老手玩家通过“获得利益的同时则必须承担风险”来引起游戏内的争斗,即使玩家之间发生争斗,失败方遭受的惩罚也有限,不会像某些游戏,会摧毁数个月的劳动成果。
总体而言,我们不会在活动上刻意制造冲突,但是会很隐晦的在玩家之间诱发矛盾,告诉玩家如果你这样做利益更大,而不是跟热三的那个活动一样,让玩家非得这样做不成。
回复2
您太急于解释这个问题了,以至于您根本没有完全看懂我文中的意思。
实际意思
此后就没有再收到网易的回信。
既然讨论到这个地步,青润反而有必要把想要表达的,本来应该在另一篇文字中写出来的东西写在这里了。
如果要保留目前的快速撤回的方式,那么需要考虑如下形式:
1、 撤回到城池的距离,中间撤掉的堡垒数量和位置以及间距,这些都应该影响将领的体力和部队损耗的数量,而不是用一个10%直接简化替代。
2、 如果中间堡垒距离成曲线状,那么是否可以采用直线撤回的方式,毕竟对于部队来说,探索一条没有走过的新路会造成更大比例的部队减员。
3、 撤回的途中也要根据山地、沼泽、草原、平地、丘陵等地形计算出撤回途中的损失率,毕竟是急行军,不是平常的一般化前进。
4、 以上三条也就是说应该有两种部队减员算法和将领体力减少算法,那就是直线撤回的损失算法和曲线撤回的损失算法,然后得到两种算法的结果,让玩家进行默认设定考虑或者选择。
5、 网易的朋友没有看到我写的这样一段文字“……同样一支部队从A走到B建立一个据点,然后再到C建立一个据点,再到D建立一个据点,……中间只要我撤掉一些或者几个据点……”,所以,他没有想到我要表达的实际上是本段1,2和4的内容,而不是他所强调的设计保留和立刻回兵的问题。(注意:3是与邮件内容无关,额外增加的)
6、 另外,前文中关于玩家冲突的话题本来就不是针对网易写的,网易的朋友却急于表达自己的设计和策划是没有问题的,于是解释了大量文字在这上面,忽视了自己本来应该解答的问题,数值计算,数值计算和后面提到的是否可以设定玩家冲突的活动并没有直接关系,舍本逐末就是我唯一能给网易这位朋友的评价了。但是,作为策划人员,如果连用户提出的问题都看不懂,不知道如何抓住重点,我不知道需求他是如何分析的,如何确定问题的,这个策划的可靠性和可行性就都让人存疑了。
7、 有人说开发方可以自己设定自己认可的规则!是的,作为开发方,你可以自由的你认可的设定规则,但是,当规则不合理的时候,就会让玩家要么转空子,要么逐渐离开,而且空子多了,玩家也会觉得没有意思而逐渐离开,所以,两个的结果是一样的。
8、 相反,合理的规则才会更为吸引人,尤其是符合日常常识和规律的规则。
9、 既然是游戏,在一定程度上就是现实生活的简化映射或者另一个层面的幻想,对于历史作战战略类游戏,贴近战争规律,就是最应该考虑的问题,我不知道网易的这位回信的朋友对战争了解多少,看过多少战争史和部队作战和迁移的书籍资料。如果没有,那实在是让人失望,如果看过还是如此的设计,那我只能叹息一下,不再言语。
10、 在2008年初,笔者曾经给深圳一家游戏公司提供过咨询服务,期间就发现策划人员往往数学非常差,很多甚至是文科,而且大部分是靠自己的想象来编写游戏策划,这样是不行的。没有数学基础的策划,就好像没有筋,不尊重规律规则的策划就好像没有骨头,这两者是相互依存的。
11、 有人说游戏策划一定要游戏打得多,作为笔者建议,非幻想类游戏的策划,类似于用历史文化背景来支撑的游戏,可能历史知识和数学知识更为重要,而这却往往是他们的短板,因为很多游戏策划只是因为爱玩游戏才来当策划,而这种兴趣的人往往很难坐下来读书,更不要说读可能更为枯燥而实际上内涵丰富的史书了。
12、 后期补充1,在热血三国与战国风云的对比中,热血三国采用的是粮食控制方式来限制部队的前进距离,因为考虑到游戏时间和现实时间对比往往是1:n的关系,因此体力可能不是一个重要因素,只要粮食供应到位,体力就可以得到恢复。在战国风云中采用的是全局粮食供应,也就是占到了任何据点,哪怕不是城市,也能立刻补充粮食,采用的是将领的体力控制。从实际对比来说,粮食控制应该比体力控制更为合理一些。或者说,如果不怕复杂度,可以考虑两者的并用。但是,从游戏策划本身来说,游戏中建设一个建筑物需要的时间明显不是现实中需要建设同样建筑物的时间长度,所以,游戏中的几分钟有可能就代表现实中的很多天,这中间将领的体力可以通过饮食来获得恢复,因此,从这里看,战国风云的策划就不如热血三国的策划更为合理。
13、 后期补充2,而同样,前面提到了热血三国的整点养兵法,可以约略的看作没2个小时是实际生活中的一天,如果这样计算,那整点养兵扣减粮食的方法也是合理的,古代基本上是一日二餐,很少有三餐的,因为在战国乃至三国时期物资供应都是比较紧缺的,甚至知道元朝也同样如此,后来南方经济逐渐发达起来也是因为水稻种植技术得到提升的结果。而蒙古骑兵当年冠绝天下除了他们的骑射技艺和作战策略以外,还有就是他们发明了便于在马背上直接食用的食物固体奶块,行军途中直接将奶片混合在水囊内,然后就可以化解开,直接饮用,如此就可以不停留连续行军,比起其他民族必须每日埋锅造饭两次损耗1到2个时辰以上的时间相比,他们的行军速度就快了很多。
14、 后期补充3,在热血三国中没有瞬回的做法,如果据点被撤销或者城池被占领,部队会按照部队的常规速度进行撤回到最近的或者出发的城池。瞬回实际上是违背日常规律的一种做法。而在撤回过程中如果粮食缺少,就会按照里程计算进行部队的减员,只剩一个兵的时候就不会再减员了,出发途中粮食如果没有了,兵力就会自动撤回。因此,青润曾经设计过一种保护名将的做法,就是考虑好粮食消耗,将将领带着一个兵前往一个很远的地点,然后,半夜粮食消耗尽,自动撤回,早上上线前后将领回到城池内。