杀戮尖塔(Slay the Spire)如何实现Buff效果

/ 0评 / 1

本文只整理与游戏逻辑有关的内容,忽略了UI,动画效果,画面渲染,音效等内容的相关实现。

人物/怪物身上的增益状态/异常状态在尖塔源码中被表述为Power(能力)。尖塔中每一个[能力]都由一个类规定其属性和行为,这些类继承一个共同的抽象类AbstractPower。

基础概念/基础类结构

此处只列举和[能力]有关的概念。

Action(行为): 即尖塔中存在的需要执行的特殊动作,例如抽牌[行为]、牌堆洗牌[行为]、伤害[行为]等。所有表示[行为]的具体类均继承抽象类AbstractGameAction。[行为]被创建后会进入行为队列中,由行为队列依次调用update()方法以执行这些[行为]。[能力]的创建、消灭属于一种[行为],[能力]在发挥作用时可能创建各种类型的新[行为]。

Dungeon(楼层): 即尖塔中的楼层,存在塔底、城市、深处、终局四个具体类,它们继承抽象类AbstractDungeon。[楼层]类中的变量和方法基本可以视为本局游戏的全局变量,全局方法。行为队列是[楼层]实例中的一个元素。

Creature(生物): 即尖塔中存在的生物,存在[角色]和[怪物]两个抽象类,它们继承抽象类AbstractCreature。在游戏中,[能力]实例总是存在于[角色]或[怪物]实例下的能力列表中。

Player(角色): 即玩家角色,存在战士,猎手,机宝,观者四个具体类,它们继承抽象类AbstractPlayer,间接继承抽象类AbstractCreature。角色类中包含大量游戏基础信息,含血量、金币、卡组列表、遗物列表等。在游戏中,[角色]实例总是[楼层]实例中的元素。

Monster(怪物): 即敌方角色。所有表示[怪物]的具体类均继承抽象类AbstractPlayer,间接继承抽象类AbstractCreature。在游戏中,[怪物]实例总是存在于[房间]实例下的怪物列表中。

Card(卡牌): 即尖塔中存在的卡牌。所有表示[卡牌]的具体类均继承抽象类AbstractCard。在游戏中,[卡牌]实例通常存在于[角色]实例下的数个卡牌列表中。[卡牌]与[能力]存在多种交互关系,这些交互通常以[行为]作为中介。

Relic(遗物): 即尖塔中存在的遗物。所有表示[遗物]的具体类均继承抽象类AbstractRelic。在游戏中,[遗物]实例通常存在于[角色]实例下的遗物列表中。[遗物]可以创建新的[能力],这种交互通常以[行为]作为中介。

Potion(药水): 即尖塔中存在的药水。所有表示[药水]的具体类均继承抽象类AbstractPotion。在游戏中,[药水]实例通常存在于[角色]实例下的药水列表中。[药水]可以创建新的[能力],这种交互通常以[行为]作为中介。

能力的基础属性

ID: [能力]的唯一标识,通常与[能力]的英文名称一致。

名称: [能力]的展示名称,受国际化模块影响。

所有者: 拥有该[能力]的[生物]。

能力的创建或叠加

[卡牌]的使用、[遗物]的生效、[能力]的生效、[怪物]的创建等事件可能会在某一时刻导致新[能力]的创建。此时发生的过程如下文所述。

ApplyPowerAction是一个表示“创建[能力]”这个[行为]的具体类。当需要创建[能力]时,尖塔创建一个新的ApplyPowerAction实例,并将该实例加入行为队列,由行为队列择机执行该[行为]。

ApplyPowerAction的实例创建需要提供以下的参数:

ApplyPowerAction实例被执行时,检测行为目标当前已有的状态列表。若列表中存在与新[状态]相同的[状态],向列表中的[状态]添加N层能力。否则,向列表中添加一个层数为N的新[状态]。

能力的减少

[能力]的生效(触发效果时,回合结束时)、[怪物]的行动(如乐嘉)等事件可能会导致[能力]层数的降低。此时发生的过程如下文所述。

ReducePowerAction是一个表示“降低[能力]层数”这个[行为]的具体类。当需要降低[能力]层数时,游戏创建一个新的ReducePowerAction实例,并将该实例加入行为队列,由行为队列择机执行该[行为]。

ReducePowerAction的实例创建需要与ApplyPowerAction相同的参数。特殊的,能力参数可以只提供[能力]的ID,而非能力实例本身。

ReducePowerAction被执行时,将目标能力层数降低K。如果K大于当前的能力层数,且此能力不为力量/敏捷/集中/幽魂形态时,向行为队列的顶端新增一个“消灭[能力]”的[行为]。

能力的消灭

能力的效果执行

(待完善)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注