标题: 三国孔明传物理伤害分析
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-26 22:56 资料 个人空间 短消息 看全部作者 QQ
好像只字不提“攻击速度”这个属性。那么攻击速度只是用来决定连击率的?

-------------------------------------------------------------------------------------------------------

QUOTE:
2、伤害A计算:

A、如果Random%(攻方攻击力x攻方所在地形因素/10)<防御方防御力x防御方地形因素/10/10
并且防御方没有混乱,那么伤害A=0,(猜测:那敌人是不会来打的,他会实现有个模拟运算攻击工程,见下边程序注释处)
B、如果Random%(攻方攻击力x攻方所在地形因素/10)>=防御方防御力x防御方地形因素/10/10
又分为:

B、1:如果(防御力x地形因素/10+1)/2>攻击方攻击力x攻击方所在地形因素/10
那么伤害A=1;
B、2:如果(防御力x地形因素/10+1)/2<=攻击方攻击力x攻击方所在地形因素/10
那么伤害A=防御力x地形因素/10-攻击力x地形因素/10/2
C、判断防御方兵种:
C、1:如果兵种代号为09,0A、0B时,伤害A=Ax75%;
C、2:如果兵种代号为1B、1C、1D时,伤害A=Ax150%;
C、3:如果兵种代号1E、1F时,伤害A=Ax50%;
C、4:如果兵种代号为22时,伤害A=1;

红字部分有问题,最好是:

A、如果Random%(攻方攻击力x攻方所在地形因素/10)>=防御方防御力x防御方地形因素/10/10
或者对方混乱了,那么又分为:

[ 本帖最后由 阿尔法孝直 于 2010-7-26 23:05 编辑 ]


精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-26 23:48 资料 个人空间 短消息 看全部作者 QQ


QUOTE:
3、判断是炮车类中心伤害还是反击,如果不是炮车类中心,或者为反击,则上边计算的A=A/2;

还有虎兵的直线攻击以及蛇兵的四面和象兵的八面攻击?

QUOTE:
2;如果有策略减伤buffer,给2次赌博机会

两次赌博全部附加上的时候才附加上?

[ 本帖最后由 阿尔法孝直 于 2010-7-26 23:59 编辑 ]


精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-27 00:17 资料 个人空间 短消息 看全部作者 QQ
暴击出来了,现在就差连击判定了
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-27 01:04 资料 个人空间 短消息 看全部作者 QQ
回复 #12 ctermiii 的帖子

嗯,按照流程,攻击完了之后就是计算经验值了。
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-27 02:51 资料 个人空间 短消息 看全部作者 QQ


QUOTE:
原帖由 ctermiii 于 2010-7-26 22:44 发表
游戏内容不熟悉,第3种伤害不明白是哪个计策或者兵种或者道具造成的,它的特性是伤害比较固定有3个不同等级:
伤害为:
1、50+0~15的随机值
2、75+0~25的随机值
3、150+0~50的随机值
跟兵种、等级、智力完 ...

应该是是焦热书(落石书)/火龙书(山崩书)/猛火书(山洪书)
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-27 15:01 资料 个人空间 短消息 看全部作者 QQ
回复 #18 lewulezo 的帖子

应该是笔误,把攻击力和防御力对调一下。
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-27 15:18 资料 个人空间 短消息 看全部作者 QQ
回复 #21 godtype 的帖子

孔明传里面,当伤害>0时,经验值算法和英杰传完全一样。但是攻击不中时的经验值算法还未知。

注:敌人不能获得经验值。
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-29 00:52 资料 个人空间 短消息 看全部作者 QQ
个人觉得,算出物理攻击命中率并不是一件不可能的事,每一步都能得到各个结果自有的发生概率,之后把所有可能枚举出来即可。
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-29 13:14 资料 个人空间 短消息 看全部作者 QQ
回复 #28 ctermiii 的帖子

伤害为0远不止以上几种可能,例如伤害为1,但是反击/2,也会变0;再如伤害为1,但是战车系衰减为75%,也会变0。

目前正在写一个计算器,计算一次攻击所有可能的结果出现的概率。

[ 本帖最后由 阿尔法孝直 于 2010-7-29 13:16 编辑 ]
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-29 18:02 资料 个人空间 短消息 看全部作者 QQ
写了一个,发现算法不好,如果攻方双方等级都很高,那么计算一次消耗的时间可能要半个甚至一个小时甚至还要多。
每次计算随机数时都做成循环,为了计算随机数取任何一个值时的结果,那么循环次数最高为:


(255+32)*3\2*13\10*99^4=53,697,316,959
这个……
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-29 18:16 资料 个人空间 短消息 看全部作者 QQ
刚刚发现有逻辑错误:

QUOTE:
2、伤害A计算:
A、1 如果Random%(攻方攻击力x攻方所在地形因素/10)<防御方防御力x防御方地形因素/10/10
并且防御方没有混乱,那么伤害A=0,(猜测:攻击方如果是敌人,那敌人是不会来打的,他似乎会实现有个模拟运算攻击过程,见下边程序注释处)

A、2 如果Random%(攻方攻击力x攻方所在地形因素/10)>=防御方防御力x防御方地形因素/10/10
那么又分为:
A、2-1:如果(防御力x地形因素/10+1)/2>攻击方攻击力x攻击方所在地形因素/10
那么伤害A=1;
A、2-2:如果(防御力x地形因素/10+1)/2<=攻击方攻击力x攻击方所在地形因素/10
那么伤害A=攻击力x地形因素/10-防御力x地形因素/10/2
B、判断防御方兵种:
B、1:如果兵种代号为09,0A、0B时,伤害A=Ax75%;
B、2:如果兵种代号为1B、1C、1D时,伤害A=Ax150%;
B、3:如果兵种代号1E、1F时,伤害A=Ax50%;
B、4:如果兵种代号为22时,伤害A=1;

一旦红字部分判定成功,伤害=0,那么后面的 第2-B步 和 第6步 应该不再计算(其他步骤因为只乘系数不做加减法,所以不会动摇0伤害)。否则就会出现本应该有很大伤害的攻击,结果出现只扣1~5的HP。

[ 本帖最后由 阿尔法孝直 于 2010-7-29 18:17 编辑 ]
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-29 23:17 资料 个人空间 短消息 看全部作者 QQ


QUOTE:
A、2-1:如果(防御力x地形因素/10+1)/2>攻击方攻击力x攻击方所在地形因素/10
那么伤害A=1;
A、2-2:如果(防御力x地形因素/10+1)/2<=攻击方攻击力x攻击方所在地形因素/10
那么伤害A=攻击力x地形因素/10-防御力x地形因素/10/2

又发现算法的一个问题:

当(防御力x地形因素/10+1)/2 与 攻击方攻击力x攻击方所在地形因素/10 恰好相等时,伤害=攻击力x地形因素/10-防御力x地形因素/10/2,等于0
本来这步应该是为了保证伤害至少为1,结果……

QUOTE:
0042A5B7   .  C1E8 01       SHR EAX,1                                                  ;  (防御力x地形因素/10+1)/2
0042A5BA   .  3B45 FC       CMP EAX,DWORD PTR SS:[EBP-4]
0042A5BD   .  0F82 0C000000 JB EKD2Win.0042A5CF
0042A5C3   .  C745 F0 01000>MOV DWORD PTR SS:[EBP-10],1         ;(防御力x地形因素/10+1)/2大于攻击方攻击力x攻击方所在地形因素/10,只受1点伤害
0042A5CA   .  E9 0E000000   JMP EKD2Win.0042A5DD
0042A5CF   >  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0042A5D2   .  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]
0042A5D5   .  C1E9 01       SHR ECX,1
0042A5D8   .  2BC1          SUB EAX,ECX                                                ;  
0042A5DA   .  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX               ; 小于的话,伤害为:攻击力x地形因素/10-防御力x地形因素/10/2
0042A5DD   >  8B4D E4       MOV ECX,DWORD PTR SS:[EBP-1C]

原来你把JB看成JBE了……

---------------------------------------------------------------------------------------

另外还有一个需要确认一下,就是间接攻击(反击、炮车虎兵等的非第一人攻击)对0x22号兵种(就是藤甲兵)的伤害是否永远为0,无论攻击力多少。

关于这个,我仔细看了一下IDA:

signed int __thiscall sub_4238AF(int this, unsigned int a2)
{
  signed int result; // eax@26
  unsigned int v3; // ebx@6
  int v4; // eax@10
  int v5; // eax@12
  unsigned __int8 v6; // al@14
  unsigned int v7; // ebx@14
  unsigned __int8 v8; // al@14
  unsigned __int8 v9; // al@16
  unsigned __int8 v10; // al@17
  unsigned int v11; // eax@17
  int v12; // [sp+Ch] [bp-14h]@1
  char *v13; // [sp+14h] [bp-Ch]@1
  int v14; // [sp+18h] [bp-8h]@1
  signed int v15; // [sp+1Ch] [bp-4h]@1
  signed int v16; // [sp+10h] [bp-10h]@1

  v12 = this;
  v13 = (char *)&dword_4556E8 + 54 * sub_409130();
  v14 = (int)((char *)&dword_4556E8 + 54 * sub_409130());
  v15 = 0;
  v16 = 0;
  switch ( *(_BYTE *)(v12 + 18) )
  {
    case 1:
      v15 = sub_42A4AD(*(_DWORD *)(v12 + 4 * *(_BYTE *)(v12 + 16)), v14, 1);
      if ( a2 >= 1 || *(_BYTE *)(v12 + 19) == 1 )
        v15 /= 2;
      sub_423769(v12);
      if ( v15 > 0 )
      {
        v3 = (unsigned __int8)sub_42A396(*(_DWORD *)(v12 + 4 * *(_BYTE *)(v12 + 16)));
        if ( v3 > sub_447328(100) )
        {
          v15 = 3 * v15 / 2;
          v16 = 1;
        }
      }
      break;
    case 2:
      v4 = v12;
      LOBYTE(v4) = *(_BYTE *)(v12 + 19);
      v15 = sub_4087E1(v14, v4);
      break;
    case 3:
      v5 = v12;
      LOBYTE(v5) = *(_BYTE *)(v12 + 19);
      v15 = sub_408907(v14, v5);
      break;
  }
  if ( v15 > 0 )
  {
    v6 = sub_409280();
    v7 = sub_447328(v6);
    v8 = sub_409280();
    if ( v7 >= sub_447328(v8) && v16 != 1 )
    {
      v10 = sub_409280();
      v11 = sub_447328(v10);
      v15 = sub_4472CB(v15, v11 % 6);
    }
    else
    {
      v9 = sub_409280();
      v15 += sub_447328(v9) % 6u;
    }
  }
  if ( sub_409220() == 1 )
  {
    if ( !sub_40BAB0() )
      v15 = 8 * v15 / 10;
    if ( sub_40BAB0() == 2 )
      v15 = 12 * v15 / 10;
  }
  if ( v16 == 1 )
  {
    if ( v15 > 0 )
    {
      sub_409580();
      sub_438F35(0, (char)(char *)dword_45181C);
    }
  }
  result = *(_DWORD *)(v12 + 4 * *(_BYTE *)(v12 + 17) + 26);
  if ( result >= v15 )
    result = v15;
  *(_DWORD *)(v12 + 42) = result;
  return result;
}

就是说,要等反击除以2算完之后才判断是否为零,若等于零则不再算下面的。

[ 本帖最后由 阿尔法孝直 于 2010-7-29 23:51 编辑 ]
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-30 17:04 资料 个人空间 短消息 看全部作者 QQ
写了一个计算工具,大家看看有没问题。

[ 本帖最后由 阿尔法孝直 于 2010-8-1 19:08 编辑 ]


附件: 物理伤害计算.rar (2010-8-1 19:08, 585.48 K)
该附件被下载次数 187
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-7-30 18:58 资料 个人空间 短消息 看全部作者 QQ
我的错,缺了一个文件,已经在原帖换好了。

[ 本帖最后由 阿尔法孝直 于 2010-7-30 20:58 编辑 ]
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-8-1 15:35 资料 个人空间 短消息 看全部作者 QQ
再度泪奔,又改了一下,如果还不行那我要跳楼了。
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-8-1 15:39 资料 个人空间 短消息 看全部作者 QQ


QUOTE:
原帖由 ctermiii 于 2010-8-1 15:18 发表
伤害为0的话,会越过等级相关的计算,但对是否我军还是敌军,是不会越过的,第一帖已经改了;

但你这个文件还是打不开。

我直接模拟了一次伤害计算来显示,

其他因素都是不变的,只有随机数变化,所以 ...

是否会越过我军还是敌军对结果无任何影响,反正结果都是0,判定敌我也就是乘个系数,0乘任何数都是0。
精华帖
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-8-1 19:08 资料 个人空间 短消息 看全部作者 QQ


QUOTE:
原帖由 ctermiii 于 2010-8-1 18:17 发表
恭喜,这下不用跳楼了
不过连击只跟速度有关,你的计算器算出来,比如88大武术家级对5运粮队级,竟然100%连击
奇怪,就算速度最慢的武将被减速,最高也只有(10-2/2+1)/15=67%的概率啊
判断是否我军跟伤害没关 ...

重新改了一下,再看看行不行了。
精华帖
顶部

正在浏览此帖的会员 - 共 18 人在线




当前时区 GMT+8, 现在时间是 2024-11-20 14:33
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.013365 second(s), 10 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP