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

在一篇文章中,我更多的是从游戏理论的角度,讨论了战斗的系统的设计。这篇文章中,我将从程序的角度,以一款航海类游戏为例,实现战斗系统。

在航海类游戏中,战斗角色是出海的船只,一次出海的船只的数量有限定,船只可以装配火炮,护甲,船帆等装备,船只还可以通过装配船长来获取技能。技能的发动是有概率的。战斗规则是,在20个回合内,如果把对方所有的船只击沉,即赢得战斗胜利,否则未平局。

战斗流程大致是这样:


这个开炮的具体的算法,我会在后面详细的贴出代码。

当我们了解了战斗的大致情况,并把所有的准备工作做好之后 (选择了参战的船只, 船只搭配了装备,选择了船长),还需要考虑的事情有如下几点:

对手:在航海类游戏中,对手有几种:常规玩家,常规NPC,  世界BOSS,海盗等。不同的对手有某些细微的差别,例如,和玩家对战的时候,需要检测玩家的参战条件,和NPC对战的时候不需要。

技能:技能的类型可能有多种,每一种技能都需要考虑到技能的释放对象,技能的影响,判断技能是否发动成功等。

战斗的核心行为:设置攻击者,防御者,执行伤害程序等。

战斗的辅助操作:寻找舰队中目前存活的第一艘船,获取舰队中现在还存活船只的数目等。

战斗奖赏:处理每次战斗的奖赏。

战斗结算:不同的对手,结算的方式不同,最后提示的信息也不同。

单次战斗记录:需要记录战斗的信息,便于前端解析这些信息,呈现战斗动画

战斗观察员:记录整场战斗的信息,便于战斗的回放。

前端表现:解析战斗信息,播放战斗动画。

针对以上的需要考虑的事情,我们可以做出多个类,每个类都有特定的职责,实现这些类中方法的思维过程就是把一个复杂的战斗动作拆分成各种小动作。这是一种组合类的设计方式。由于这个类图画的过于大,无法贴图,只有做出链接。

战斗系统类图

在战斗模型父类里面,主要实现的战斗的初始化工作和战斗的具体实现流程。

    /**
     * 战斗进行(外观模式)
     *
     * @return const
     */
    public function process()
    {
        // 悬赏战初始化
        if ($this->_inBounty) {
            $this->_initBounty();
        }

        // 创建战斗记录器
        $th
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity5.6回合制战斗卡牌游戏源码是一套基于Unity引擎开发的回合制战斗卡牌游戏的源代码。 这套源码提供了游戏的基本框架和核心功能,包括战斗系统、卡牌系统、回合制机制等。 在这个游戏中,玩家可以通过收集和选择不同的卡牌来进行战斗。每个卡牌代表着不同的角色、技能或道具。玩家可以根据自己的策略和需求选择不同的卡牌组合来应对不同的战斗场景。 战斗系统采用回合制机制,玩家和敌人轮流进行行动。每个回合,玩家可以使用卡牌来进行攻击、防御、恢复生命值等操作。玩家和敌人的行动顺序可以根据速度、优先级、技能等进行调整。战斗结果可以通过计算伤害、技能效果、属性相克等来决定。 卡牌系统是游戏的核心机制之一,玩家可以通过游戏内的方式获得、合成和升级卡牌。每个卡牌都有自己的属性、技能和战斗效果。玩家可以根据自己的战术和需求来不断调整自己的卡牌组合,以应对不同的挑战。 该源码基于Unity5.6版本开发,使用C#语言编写。它提供了游戏开发的基本框架和良好的可扩展性,开发者可以根据自己的需求和创意来进行次开发和定制。此外,Unity5.6作为一款强大的游戏引擎,还提供了丰富的资源和工具,方便开发者进行游戏的美术、音效和动画等方面的创作。 总之,Unity5.6回合制战斗卡牌游戏源码是一套功能完善、可定制性强的游戏源代码,适合开发者用于创建自己的回合制战斗卡牌游戏

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值