wjx123xxx wjx123xxx
关注数: 28 粉丝数: 27 发帖数: 212 关注贴吧数: 14
【一帖成名】作为一个程序猿,我来看这次的bug 这次的bug闹得挺大的,但是好可惜没有机会亲身体验一把。不过,通过贴吧不断冒出来的帖子和回复,大致明白了bug是怎么来的,就是输出为0。我不知道其他人是怎么看待0的,作为一个程序猿,0其实是一个很敏感的数字。比如,程序刚开始运行的时候,角色的等级啊,经验值啊这些都是0,是后面从服务器传过来数据之后才能被赋值成为一个正确的值,也就是你日以继日,充钱奋斗才有的那一个数字。 好了,闲话少说,那么为什么这个0会产生这么大的一个bug呢。其实一千个程序员看到同一个策划的玩法会有一千种实现方式,玩法越复杂,实现方式的差别越大,所以要我准确说出原因是不可能的,我只能做出一些猜测。这次玩法的改动是将boss所有血条打完才掉装备改成boss每掉一条血就掉一件装备。好了,这里程序猿第一个要理解的就是一条血是怎么算,每个boss的总血量肯定不一样,那么一条血肯定不会是固定值,本猿没有考证过,猜测应该是1个boss有10条血,每条血10%血量。本来只要考虑boss的血量小于0被干掉之后然后让服务器给公会发装备就行了,现在每一条血没了都要触发这个动作。好了,问题来了,既然一条血掉了会掉装备,那么一次性打掉两条血要不要掉2次装备?按照策划的规则,这是很明显的嘛!!!那一次性直接把boss干翻是不是要把所有装备都掉一遍??玩游戏的人肯定不信能一次干翻,但是写代码的人根本不会考虑这个啊,这只是算法运算过程中的一个参数而已。Ok,所以这次玩法要改的代码我认为其实不多,只要在boss掉血的时候判断一下boss的血量有没有跨越血条分割线就行了,最多再判断下跨越了几条线从而给你发几次装备,能产生这么严重错误的可能性无限接近于0嘛。o(╯□╰)o,那么产生这个bug的原因只能从更低级的错误上去猜测了。 1. 因为装在手机上的客户端是不可能自行判断结果的,因为容易出现挂,所以错误应该产生在服务器上。 2. 手机端传了一个伤害0的结果给服务器,服务器不知道改了什么代码而导致服务器出错了。卧槽,哪个sb啊,怎么打都不可能伤害为0啊,为什么会是0啊,这根本无法理解啊o(╯□╰)o 因为打的不是boss啊,却能所有装备都掉一次,所以服务器肯定拿这个0干了什么其他的事,因为没见过bug具体什么样,但是应该是拿什么去除这个0了。学过数学的都知道,0是不能被除的,计算机也一样,拿任何东西除0都会产生错误,而产生错误并且没有抓住处理掉那么程序就崩了~~~ 显然,服务器跑的好好的,那么这个错误被获取了,o(╯□╰)o但是处理出问题了。 3. 好好地打小怪怎么就被当成boss战斗来处理了呢,而且给了这么个离谱的结果。这里就要说说程序抽象了,其实在代码中,boss中肯定是被和普通小怪一样处理的,就像比如大家都是人,都是同一个生物,那怎么区分呢,这里面肯定有一个值来区分小怪和boss的。比如0是boss,1是小怪之类的。好了,既然如此,小怪到boss的转变其实也就是一个值的问题。既然,前面产生了错误,那么跳过了区分boss和小怪的值的赋值也不是不可能吧,然后就到了该发装备了,前面我说过嘛,程序中大部分的值刚开始都是0,所以这个怪就被当做boss来处理了,而且被当做一次性被做掉的boss来处理了,⊙﹏⊙b汗~~~~所以一次发了10次装备。当然这些都是我主观推测,可能有复杂点的原因。 好了,前面说的都是废话,其实我就想说一句,龙图的技术真不咋的。当然测试也是失职,因为0是测试用例中可以说是必须测的值啊。
1 下一页