SRPG游戏开发(三十九)第九章 战斗系统 - 一 战斗属性(Combat Properties)

返回总目录

第九章 战斗系统(Combat System)

在SRPG中,大多数情况是指角色与角色之间的战斗。而这种战斗一般有两种模式:

  • 地图中直接战斗;

  • 有专门的战斗场景。

这两种模式的战斗在数据上没有任何区别,只有战斗动画的区别。

就像之前描述的,SRPG也是RPG,所以战斗方式和回合制RPG的战斗几乎是相同的。主要区别是RPG每个回合需要手动操作(也有自动战斗的),直到战斗结束;而SRPG是自动战斗,且多数情况只有一个回合(额外回合也是由于技能、物品或剧情需要)。且RPG多数是多人战斗,而SRPG多数是每边就一个。

我们这一章就来写一个战斗系统。



一 战斗属性(Combat Properties)

战斗中需要的属性是需要从我们的角色身上获取的。

我们在这里还是拿《FE4》来举例,在《FE4》中的基础战斗属性包含:

  • 物理攻击力(attack) = 武器攻击力 + 角色力量(STR) + 道具力量

  • 魔法攻击力(mage attack) = 武器攻击力 + 角色魔力(MAG) + 道具魔力

  • 物理防御力(defence) = 角色防御(DEF) + 道具防御

  • 魔法防御力(mage defence) = 角色魔防(MDF) + 道具魔防

  • 攻速(speed) = 角色速度(SPD) + 道具速度 - 武器重量(weight)

  • 命中(hit rate) = (角色技巧(SKL) + 道具技巧) * 2 + 武器命中(hit rate)

  • 回避(avoidance) = (角色速度 + 道具速度) * 2 + 角色幸运 + 道具幸运

  • 爆击(crit):暂不考虑

  • 攻击范围(attack range):来自武器

  • 生命值(hp)与最大生命值(max hp)

了解这些后,我们来实现它们。


1 角色战斗属性(Role Fight Properties)

经过之前的分析,我们的角色需要一些战斗属性;而属性是需要计算的。而在属性中,我们需要装备的属性(装备的武器和饰品)。

1.1 物品属性叠加(Sum of Item Properties)

我们在Role类中添加计算属性叠加方法:

        /// <summary>
        /// 物品属性叠加
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public int GetItemFightPropertySum(FightPropertyType type)
        {
   
            if (type == FightPropertyType.MaxLength)
            {
   
                return 0;
            }

            int value = 0;

            // 如果装备武器不为null,则叠加武器属性
            if (equipedWeapon != null)
            {
   
                value += equipedWeapon.uniqueInfo.fightProperties[type];
            }

            // 叠加所有饰品属性
            foreach (Item item in items)
            {
   
                if (item != null && item.itemType == ItemType.Ornament)
                {
   
                    value += (item as Ornament).uniqueInfo.fightProperties[type];
                }
            }

            return value;
        }

添加Luk叠加方法:

        /// <summary>
        /// 物品幸运叠加
        /// </summary>
        /// <returns></returns>
        public int GetItemLukSum()
        {
   
            int value = 0;

            // 如果装备武器不为null,则叠加武器幸运
            if (equipedWeapon != null)
            {
   
                value += equipedWeapon.uniqueInfo.luk;
            }

            // 叠加所有饰品幸运
            foreach (Item item in items)
            {
   
                if (item != null && item.itemType == ItemType.Ornament)
                {
   
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值