SanIX_程序分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SanIX_程序分析

SanIX PK1.01程序代码分析 (2005-12-22) 所有结果均基于对PK版1.01的汇编代码的跟踪分析得出,而且是在普通剧本环境下得出,因此想磨练史话一类剧本中的事件可能不遵循下述结果。 如无特别说明,公式中的除法均为整数除法,因此运算顺序绝不可轻易调换,不满足交换率和结合率。 由于跟踪时仅记录了公式中的主要变量,一些系数可能有所出入,但并不影响这个公式在函数关系上的正确性。 请保持此文档的完整性,转载请注明。 一、内政部分 1、人口变动模型 只有都市才具有人口属性,因此人口的变动仅针对都市而言。人口的变动主要包括非兵役人口增量和增加兵役两个方面。基本的变化规律及影响因素不难知道,大体上民心越高则越有利,士兵越多则兵役人口增长越缓慢。然而准确的公式我还没有见到有人给出过。 程序在计算每个城市的人口变动时,首先计算出总非兵役人口增量、总增加兵役人口及总民心等几个中间参数,然后再分配到各个都市,这几个中间参数的计算如下: 总非兵役人口增量=总非兵役人口/20 总增加兵役=max(总非兵役人口-总兵力+99999,0)/100000×总非兵役人口/100/10 总民心=所有都市民心之和 总非兵役人口=所有都市非兵役人口之和 总兵力=所有都市兵役人口之和+所有士兵+所有伤兵 假定初始时每个都市民心为100,人口为30000,并且假定10年内所有都市只搞内政,不征兵则10年内总人口及总兵役人口的变化如下: 有了以上中间参数,则每个都市的人口变动计算如下: 非兵役人口增量=max(民心×总非兵役人口增量/总民心-非兵役人口/20,30000-非兵役人口) 增加兵役=民心×总增加兵役/总民心 如果非兵役人口增量为负,则人口流失,都市非兵役人口减少,反之则增加。由于总增加兵役不可能为负,因此增加兵役不可能为负。 关于人口计算模型的几点评注: 考察都市非兵役人口增量,如果忽略max函数的后一项,则容易得到人口流失的条件是非兵役人口/总非兵役人口民心/总民心,即当一个城市的人口所占比例太大时,就会流失。因此,即便是民心1000,也有可能出现人口流失。假定所有都市民心一样,那么人口流动的最终结果将是所有都市非兵役人口都一样; 考察都市的增加兵役,由于总增加兵役可能会是一个很大的数,又因为32bit数的限制,因此实际上前面两项的乘积可能已经溢出了,这意味着总增加兵役越多,都市的增加兵役未必就越多。假定所有都市民心为1000,那么不溢出的条件是总增加兵役不超过430万左右; 总非兵役人口的增长率是固定数字,即5%。虽然程序中并未对总非兵役人口作限制,但由于每个都市非兵役人口最多为100万,因此总非兵役人口最多为5000万。还有一个隐性限制来自于32bit数; 总增加兵役由总非兵役人口和总兵力共同决定。当总非兵役人口很大而总兵力很少时,总增加兵役可能很大,极限情况下,总增加兵役=(总非兵役人口/10000)2;而当总兵力超过总非兵役人口时,总增加兵役为0。 2、内政执行 总共有8个内政指令:巡查、商业、开垦、修筑、徽兵、训练、买进、卖出。其中前面四个指令采用统一的公式模型计算: 其中最大值为都市相关属性的上限,而总能力值为所有执行武将相关能力的综合,特定系数巡查为9/5,其他为2。由于武将人数越多,则总能力值越大,因此效果越显著,除非执行武将中废柴太多。 徽兵的计算公式较简单: 训练的计算公式较复杂,首先要对武将的统率值进行规范化处理: 稍微研究一下就可发现,此规范公式其实是武将统率的档次拉开了,小于60的部分按照系数2/3加权,60~80之间的部分按照系数1加权,而高于80的部分则按照系数2加权,因此高统率武将与低统率武将的差距经过此规范公式处理后差距就会更鲜明。后面的兵法计算公式及其他公式中也常将武将的能力值进行类似的规范处理,以划分出能力的档次。绘制成曲线更能看出档次的差距: 训练的效果大致如下(有些细节记不清了): 3、计略部分 同样,共有8种计略指令。计略的成功与否也采用确定的公式计算,不存在概率问题;外交等策略指令也采用确定公式计算,具体略去。 二、单挑部分 主要分析了单挑触发、单挑攻击力的计算代码,又以后者为重点。 相关代码地址:单挑攻击力计算:RVA = 100650。 1、单挑攻击力的计算 单挑时是一刀一刀地计算的,直到某一方的HP点数变为0分出胜负为止。以下先给出计算流程,后文再给出相关公式。 对于每一刀的伤害力,主要计算步骤如下: 1) 如果防守方看破攻击方的招数,则伤害力为0,本刀结束;否则转2); 2) 如果攻击方发动动画必杀,则伤害力取动画必杀的伤害力;否则转3); 3) 如果攻击方发动双倍必杀,则伤害力取双倍必杀的伤害力;否则转4); 4) 取普通攻击的伤害力,本刀结束。 下面给出计算公式。 变量符号: PA

文档评论(0)

youshen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档