评论

微信小游戏制作工具——随心设计(4)

伤害结果判定 与 暗箱式格斗处理

前文说到“伤害结果判定”这个函数的命中/回避攻击/防御 计算公式,实际上该函数在处理 星舰-星舰、编队-星舰 的攻击上,线性结构很简单。从选中我方单位的战术武器、到点击射程内的敌舰发动攻击过程中,有两个函数“显示目标数据”和“被攻击舰机详情”是先手处理的,处理结果是将攻击方的一些关键属性赋值给“主动方”对象,将被攻击方参与运算的关键属性赋值给“被动方”对象,之后才是到了“伤害结果判定”这一块。所说的“简单”是因为对舰攻击上,只需要处理单体目标就可以了,但如果对编队发动战术攻击,那可是要将编队的所有机甲成员分别做一次命中和攻防判定,怎么着也不应该简单地把一次攻击无差别的作用到每个机甲目标身上。即使平均分摊伤害也不合理,必须要有概率上的差异:有的被命中、有的侥幸规避、有的伤害轻些、有的伤害重些......这一切都需要在运算中遍历 被攻击编队 每个成员的耐久防御回避属性,关于编队成员的属性建立是在“”对象数据中,大致以:作战对象-N--n号(耐久、防御、回避...)形式存放,N取值是1~60范围、n取值是1~8(刚好是一个编队最大成员数)。参看下图:

伤害结果判定 函数的脚本代码就不贴出来了,贴出也看不全。这里只是把处理步骤逐一列出来:

  1. 根据主动方被动方对象数据先行计算出命中概率威力值(纯伤害数值)与基础伤害值(经过攻防数据换算后的值,可能大于威力值、也可能小于威力值)
  2. 如果是对舰攻击则判定是否命中,如果是,取威力值与基础伤害值之间的随机数,并判定改舰受伤害结果(未命中、轻伤、重伤、垂危、击沉)
  3. 如果是对编队攻击则顺序遍历耐久值大于0(即存活中)的编队成员,进行命中和伤害判定后根据全体累计总伤害与 单体最大耐久×8 的比值来总结伤害结果,除了上述对舰伤害的几种结果外,还有 n机命中 n机坠毁 等详细描述。
  4. 判定主动方是否为我方(包括可操作的联军,但不包括盟军)、同时被动方是否为敌军(灰星侵略军团或太空海盗部队),如果都是,则根据击落数、击落机型以及关卡难度来调用“战斗获利”函数来概率获取战利品。
  5. 按一定的延迟次序播放武器音效,显示攻击画面的渲染效果、主动方对话与被动方对话等“给生活带来仪式感”的东西。
  6. 如果目标被摧毁(星舰坠毁、编队团灭),调用“清理对象数据”函数并传参被动方的“”数据标签,当该单位的“”对象数据被设为“空置”后,将其ID赋值给爆炸点对象,然后通知其克隆体“目标摧毁”消息,克隆体接到消息后将该单位的“”类数据项删除,最后通知爆炸动画造型后自身也删除。
  7. 最后一步就是调用“胜负判定”函数来检查是否符合其中的条件。空域战场敌军消失、或敌BOSS旗舰被击沉都属于胜利条件;而我方母舰被击沉则是失败条件。 虽然这些情况每场战役只有一次出现的机会,但谁又敢保证这次伤害判定后就不会发生呢?所以老老实实地一把一算莫要漏掉才稳妥!

空域战场中大部分攻击伤害(普通战术武器与终极主炮武器)都是由“伤害结果判定”函数来处理的,但是战斗编队与战斗编队的近身格斗不在此列,当两只不同阵营的机甲编队抵近遭遇时可能发生近身格斗。于我方需主动选择、于AI(包括敌军与盟军)则是被动选择,但是近身格斗有两种表现形式,有我方参与的近身格斗会拖入格斗战场来对决,此时切换到格斗战场的场景中;于敌军不同阵营间(灰星与海盗)或敌军与盟军间则是在“暗箱式格斗处理”函数中来完成的,这里先了解下“暗箱式格斗处理”函数。

还是东西太多难以显示全面,依旧逐步解析:

  1. 首先格斗双方的“”对象数据标签传参给暗箱式格斗处理”函数,按发动方和被动方赋值给局部变量甲方乙方,此时双方作战单位在屏幕下方导航栏先进行下“沟通”——作为“斗殴”参与者打架前对骂几句也是合情合理的吧!^_^
  2. 将甲乙双方的攻防命中回避等属性分别从各自的“”对象数据中取出,再将两队中耐久值大于0的成员分别添加到两个列表格斗号池中,因为甲方为先手,所以先从顺序遍历甲方格斗号池中的成员,然后随机抽取乙方格斗号池的一名成员,用甲方攻击命中属性参数与乙方防御回避属性参数进行运算后处理一次.......遍历完成后删除乙方格斗号池中的阵亡者,此时若乙方格斗号池项目数依旧大于0,则顺序遍历乙方格斗号池中的成员,来随机抽取甲方成员进行攻击伤害运算......直到其中一方格斗号池项目数为0。 这种有来有回循环攻击也并非不死不休的争斗,它的回合次数限制是50次,然而目前为止还没有出现过50回合后双方皆有幸存者的情况,还真是“既分高下,亦决生死”。
  3. 当其中一方的格斗号池清空、或50回合过后(这种局面多半以后也不会有),根据是否存在失败方来决定最终结果,是的话则最后双方做个“告别感言”后将失败方的“”数据清理空置、继而“”数据删除、战斗单位克隆体消失并呈现爆炸效果。系统处理这个过程其实是很快的,于是其中还要添加一些武器音效与延迟效果来模仿编队混战、厮打狗斗的乱像。

在空域战场上,战斗编队虽然火力不及星舰威猛,但因其机动性强、遭战术武器攻击时存活率高(8个成员全部被命中的概率、毕竟要远低于星舰的单体),往往最先威胁到对方星舰的自身安全,况且星舰本身就有概率再释放派遣编队,所以这些“牛皮糖”消灭的越早越好,想要一发入魂选择近身格斗是个好办法!前面说过:有我方编队参与的近身格斗需要在格斗战场的场景中来解决,之所以额外调用个新场景来解决,是为玩家能更好地发挥战术手段。举个例子来说:田忌赛马般的战术手段在“暗箱式格斗处理”中是做不到的,更有新的画面表现效果——也就是所谓“生活的仪式感”——无法呈现。

下一篇我们来了解下格斗战场场景的具体设计方案吧!






最后一次编辑于  2022-06-23  
点赞 1
收藏
评论

1 个评论

  • 小蚂蚁
    小蚂蚁
    2022-06-23

    游戏的内容很丰富,厉害~

    2022-06-23
    赞同
    回复 1
    • 小圣贤庄主
      小圣贤庄主
      2022-06-23
      承蒙谬赞! 但这也有可能是种强迫症的心态,差不多就行~实属敷衍了事。倒是您所提过的:在游戏设计中的每一分用心,玩家都会感知到......非常让人有认同感!
      2022-06-23
      回复
登录 后发表内容