卡牌游戏战斗系统的设计和实现(三)

上一篇文章,我主要是从全局的一个角度,架构了战斗系统,这里我将详细分析具体的实现细节。

这场战斗中,我们需要关注的点:战斗前期准备,单次战斗结算, 技能释放,战斗结算。

战斗前期

在航海类游戏中,参战的首要条件是,你必须是出海状态,然后检测你的参战资格,例如你的生命值不能低于25HP,然后初始化玩家对象,玩家的舰队,玩家的船长等。
具体的流程图如下:

这里需要注意的的有如下几点:
1 验证formHash,同时要把对方的ID加密,这样做都是为了恶意攻击。如果加密和验证,我记住了你的ID,我就不断的可以攻击你。最简单的外挂就是这样做的。
2 初始化舰队的时候,船只的实力是装备过装备的实力。
3 初始化战斗类型的时候,可以使用工厂模式。

战斗技能

技能发动是有某个装配了船长的船发动的,而且是有概率的。当船发动攻击的时候,我们会做出一个判断技能是否发动成功:
        // 如果攻船正处于“封印”状态,则不能发动技能
        if (Model_Battle_InSkill::isSealed($attackerShip)) {
            $skillId = 0;
        }
        // 否则可以触发攻船的战斗内技能
        else {
            // 返回0表示触发失败,触发成功则返回技能Id
            $skillId = Model_Battle_InSkill::triggerSkill($attacker, $attackerShip);
        }

如果技能触发成功了后,我就会实例化这个技能:
	// 创建本次技能实例
        $skill = Model_Battle_InSkill::factory($skillId);
创建了技能之后,我们就要明白技能到底是如何工作的。
作用对象:我的的舰队,或者敌方的舰队。
效果:
该buff持续回合数
该buff是良性or恶性
 影响比例(小于100%表示减少,大于表示增加)
可能有这样的一个技能:
火爆出击: 把对方的任意三艘船的战斗力减少为50%,持续2回合。

技能的数据库设计:

需要的动作:
初始化双方的舰队,便于寻找作用对象

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值