Board logo

标题: [历史] 从代码看精炼 [打印本页]

作者: 118151508    时间: 2009-2-22 13:36     标题: 从代码看精炼

1、运气占主要成分。

2、不管成功率是怎么出来的,这里肯定涉及到一个概率问题。
  所以有一种说法是垫暴多次,再上成功的可能性会提高。
  假设采用的是完全随机的算法,这条是成立的。因为计算机不会产生真正的随机数。

3、与第2条的说法完全相反,认为如果多次垫暴,再上成功的可能性反而下降。
  这种说法在理论上是有点道理的。比如网络的状况可能会影响到成功率的随机性。
  支持这种说法的玩家一般会选择人少的时候(深夜、凌晨)去精炼。

4、经验:
    a、垫是肯定要垫的,不然暴死你。  (参照2)
    b、一定要先试探,假如精1就暴了,那个时间段就别精了。 (参照1、3)
    c、试探发现没问题,在多次暴之后上。 (参照2)
    d、多次暴之后上仍然连续暴,不要再上了。  (参照3)
      我朋友精1连暴30多次!这个估计除了我在现场,没什么人会信了。

程序员写好有关于精炼的代码后,游戏里的精炼成败是自动随机执行的。我练习过产生随机数的代码,精炼成败的代码编写类似产生随机数的代码,比如我写好一段产生随机数的程序,在1-10之间每次随机产生一个数字。同样举例说精炼成败,假如1-10数字间1,3,5,7,9代表成功,2,4,6,8,10代表失败,在你精炼时候,系统随机产生个数字5,那么你精炼就是成功。有人会问为什么+4以后的装备很难成功,可以这样解释那就是+1在10个数字中1,2,3,4,5,6,7,8或许代表成功9,10代表失败,+2时候1,2,3,4,5,6,7代表成功,8,9,10代表失败,这样装备每高一级失败的数字就会增加一个,你精炼时候如果系统为你随机产生的失败的数字,那么装备就没了。或许ro的精炼代码不是这样编写的,但是肯定原理类似。玩家们都是用户,很多人不了解计算机语言,所以谈什么合成经验+7成功+8成功的归根结底一句话,是你的运气好而已,精炼没什么经验可谈



那些整天说着使用啥啥啥方法后自己成功率如何如何高的,基本上都是没有根据的。




下面我用几句很简单的程序代码来模拟一下物品精炼时候游戏程序中的处理流程。




///

/// 精炼物品

///

/// 待精练的物品

/// true: 成功 / false: 失败

public static bool Refine(Item targetItem)

{

System.Random rand = new Random();




// 为了方便、简单起见,我现在假设游戏中炼器的级别可以分为以下0-16级(就是游戏中物品名字后面的+N)

int[] levels = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };




// 这里由系统产生一个0至16随机数(其实程序中所产生的随机数都属于伪随机,不可能达到真实世界中的发生的随机效果

// 但是还是足够"随机"地产生一个指定范围内的数值啦,嘿嘿。

//

int flag = levels[rand.Next(0, 16)];




bool result = false;

// targetItem是用来描述你从窗口后拖到框中的物品

// 我们假设这个物品有一个名叫RefineLevel(即级数,如+1时RefineLevel就为1,依此类推)

// 现在我们拿刚才"随机"产生的数值跟这个要进行的物品的当前精炼级数进行比较

// 我们假设当取出的数据比物品的精炼级数大时就炼器成功

// 请注意!!!我这里只是假设用该种方法来实现精炼过程,真实游戏中的设定肯定远比这复杂的多

// 但是,我相信不管怎样复杂的处理,其中最最核心决定成功率的问题肯定涉及到随机数!

if (flag > targetItem.RefineLevel)

{

// 这里表示成功的情况,我们让物品的精炼等级提高一级(当然,真实游戏中还需要重新设置攻击/防等等数据!)


targetItem.RefineLevel++;

result = true;

}

else

{

// 这里表示失败的情况,我们让物品的精炼等级降一级或是直接将物品删除

targetItem.RefineLevel--; // targetItem.Delete();

result = false;

}




return result;

}




///

/// 精炼物品(

///

/// 待精练的物品

/// 用于提高成功率的特殊物品

/// true: 成功 / false: 失败

public static bool Refine(Item targetItem, params Item[] stuffItem)

{

return false;

}




好了,不管你是否看懂了上面的假设的一些代码,我想告诉大家的是不管怎样复杂的处理,其中最最核心决定成功率的问题肯定涉及到随机数!


而一旦涉及随机数的地方,就不会是你说什么2次或N次失败后再一次就会成功等等这么简单的问题。




所以,不要肓目相信所谓的技巧,是否成功绝大多数情况下是看你的运气了,当然,我们不可否认在少数几次抛硬币的过程中,


当你连续抛出同一面的情况下,下一次抛出另一面的机率看起来要大些。:)


其实这些都不是我研究出来的,我只是看得懂这些,能体会到,拿给大家分享下,让大家也了解下关于这方面的内容。研究所谓的规律不如研究代码的实际

[ 本帖最后由 118151508 于 2009-2-22 15:21 编辑 ]
作者: 不死亡灵小丸子    时间: 2009-2-22 13:40

的确是会连爆的,亲眼见证某人3件恐惧斗+6全成功,+7全爆
作者: intro    时间: 2009-2-22 14:23

程序员写随机数容易还是设计一套看似随机实则暗含规律的程序容易?
哪里会有什么规律啊,这都是妄想而已.
作者: adbel    时间: 2009-2-22 14:35

提示: 作者被禁止或删除 内容自动屏蔽
作者: adcl    时间: 2009-2-22 14:38

LZ所谓的代码从何而来,发来看看
作者: diablocwb5    时间: 2009-2-22 14:42

支持RP论
作者: 冷月·影弓    时间: 2009-2-22 14:46

请列出支持234的依据
我个人觉得根本是胡扯
作者: ycthomas    时间: 2009-2-22 14:53

垫东西就是说我要精炼A+8,在+7的时候去精炼B,再去+A,不连着敲对吧
作者: 傲雪残月    时间: 2009-2-22 15:13

其实很简单,就是一个乱数问题,RO精炼会有一张乱数表,每个数字是0-99的随机数,共有100个数字就代表0%-100%中不同的成功率
举个例子:比如说你这次精炼的成功率是30%,那么当你这次精炼所产生的乱数为0-29时成功,30-99时则失败,成功率为30%,失败率为70%;以此类推,当你这次成功率为10%是,产生0-9数字时成功,10-99时失败.概率越低,对应的数字范围越小,因此成功率就越低
引发的问题:如果这张乱数表是固定的,如果我们有办法判断乱数表的位置,如果有办法判断乱数表是如何消耗的...那么我们说的理论一点,就可以完全掌握精炼的成功与否,但是事实上这点应该是没办法做到的

[ 本帖最后由 傲雪残月 于 2009-2-22 15:18 编辑 ]
作者: pjwangyi    时间: 2009-2-22 15:40

很多辛辛苦苦打的东西在服务端其实就是一串数字字母而已~
浮云那
作者: nightelf    时间: 2009-2-22 19:29

听说随机数是根据电脑时间出的。。
作者: 喵喵の狗狗    时间: 2009-2-22 19:33

原帖由 nightelf 于 2009-2-22 19:29 发表
听说随机数是根据电脑时间出的。。


作者: makiyo    时间: 2009-2-22 19:33

汗   难道这就是传说中的源代码??




欢迎光临 浆糊论坛-RO小站 (http://bbs.rohome.cn/) Powered by Discuz! 7.2