文章目录
基本概念
统计
统计数据是 CCG Kit 中的一个基本概念。它们表示在游戏过程中可能会发生变化的整数值,并在玩家和卡片中使用。例如,玩家可能拥有生命和法力值,而生物卡可能具有成本、攻击和防御属性。统计数据是通过网络传输的,这意味着您只应使用它们来表示在游戏过程中实际可能发生变化的值,以节省带宽。
统计信息具有以下属性:
- 基值:统计信息的初始值。
- 原始值:统计信息初始值的副本(由于基础值可能会随时间而变化,因此很有用)。
- 最小值:统计信息的最小值。
- 最大值:统计信息的最大值。
- 修饰符:影响当前值的修饰符(+3、-1 等)。它们可以是永久性的,也可以是临时的(即,持续时间为 X 回合)。修饰符绝不会以使其低于其最小值或高于其最大值的方式更改统计信息的有效值。持续时间为 0 的修饰符表示它是永久性的。
- 有效值:应用了所有修饰符的统计信息的当前值。游戏代码主要使用它来检索给定时刻的统计数据的实际值。
统计信息由 Stat 类实现,您可以在 Core/Scripts/Foundation 文件夹中找到该类。
关键字
您可以将关键字视为类似枚举的统计信息。如果您需要卡片具有具有特定可能值子集的字段(例如静态技能,它可能采用“嘲讽”或“hexproof”等值),则它们特别有用。就像统计数据一样,关键字是通过网络传输的。
关键字由 Keyword 类实现,您可以在 Core/Scripts/Foundation 文件夹中找到该类。
属性
属性是恒定的卡片值。因为它们永远不会改变,所以它们永远不会通过网络传输(这有助于节省带宽)。CCG 中常见的属性示例包括卡的名称、图片、收集者编号等。
属性由 Property 类实现,您可以在 Core/Scripts/Foundation 文件夹中找到该类。
编辑器
CCG Kit 诞生时就考虑到了可扩展性。这个想法的核心是 CCG Kit 编辑器,它允许轻松操作存储游戏及其卡片基本属性的游戏配置文件。我们将以随附的演示游戏的配置作为参考,向您介绍 CCG 套件编辑器中的可用选项。要打开编辑器,请选择 Tools/CCG Kit Editor 菜单选项:
您可以通过单击“打开”按钮来打开现有的游戏配置(为方便起见,您的选择将在以后的会话中被记住)。随附的演示游戏的配置位于 CCGKit/Demo/Resources 文件夹中。
Game configuration(游戏配置)选修卡
游戏配置选项卡允许您修改游戏的以下常规设置:
- 转弯持续时间:转弯的持续时间(以秒为单位)。
- 最小牌组大小:一副牌必须具有的最小牌数。
- 最大牌组大小:一副牌必须具有的最大牌数。
- 游戏开始操作:游戏开始时自动发生的操作。
- 回合启动操作:回合开始时自动发生的操作。
- 回合结束操作:回合结束时自动发生的操作。
- 结束游戏条件:导致游戏结束的条件。
游戏/回合操作和结束游戏条件是一种无需编程即可为游戏编写自动行为脚本的便捷方法。例如,随附的演示游戏使用以下操作:
- 游戏开始:玩家牌组被洗牌,并从中抽出 5 张牌形成他们的手牌。
- 回合开始:法力值设置为回合数,并从牌组中抽出 1 张牌到活跃玩家的手中。
以及以下结束游戏条件:
- 如果玩家的生命达到 0,他将自动输掉游戏。
- 如果玩家的牌组上有 0 张牌,他将自动输掉游戏。
这些操作的执行顺序与它们在编辑器中的顺序相同(从上到下)。
Game zones(游戏区域)选项卡
游戏区域选项卡允许您定义游戏中可用的游戏区域及其设置:
- 名称:游戏区域的名称。
- 所有者:游戏区域的所有者(对于个人区域,可能的值为 Player,对于共享区域,可能的值为 Shared)。
- 类型:游戏区域的类型(对于静态区域,可能的值为 Static,对于动态区域,可能的值为 Dynamic)。静态区域是一个包含属性永远不会改变的卡片的区域(例如,一副牌中的卡片通常永远不会改变,因此我们可以在内部存储它们的唯一标识符)。动态区域是一个包含卡牌的区域,这些卡牌的属性可能会发生变化(例如,棋盘上的卡牌通常会随着游戏的进行而变化,因此我们需要在内部存储它们的完整、最新的状态)。
- 所有者可见性:游戏区域对其所有者玩家的可见性(可见区域的可能值为 Visible 和隐藏区域的可能值为 Hidden )。
- 对手可见性:对手玩家的游戏区域的可见性(可见区域的可能值为 Visible 和隐藏区域的可能值为 Hidden )。
- 具有最大大小/最大大小:此游戏区域可以包含的最大卡片数量(如果有)。
**请注意,自定义区域仍然需要您进行额外的自定义编程工作。**需要附带网络代码来复制服务器和客户端之间的区域更改。
Player(玩家)选项卡
通过玩家选项卡,您可以定义游戏中的玩家将拥有的统计信息:
- 名称:玩家统计信息的名称。
- 基础值:玩家统计数据的初始值。
- 最小值:玩家统计数据的最小值。
- 最大值:玩家统计数据的最大值。
Card types(卡牌类型)选项卡
卡牌类型选项卡允许您定义游戏中卡牌将具有的统计数据、属性和销毁条件。
卡片统计信息具有以下属性:
- 名称:卡片统计信息的名称。
- 基值:卡牌属性的初始值。
- 最小值:卡片统计信息的最小值。
- 最大值:卡牌统计信息的最大值。
卡片属性具有以下属性:
- 名称:卡属性的名称。
- 默认值:卡属性的初始值。
Keywords(关键字)选项卡
通过关键字选项卡,您可以定义游戏中可用的关键字及其值。
Card collection(卡片收集)选项卡
卡牌收集选项卡允许您定义游戏中可用的卡牌及其设置:
- 名称:卡的名称。
- 通常是一个或多个统计信息和属性:这些统计信息和属性基于您之前在卡片类型选项卡中定义的统计信息和属性。
- 费用:打这张牌的费用。
- 关键字:此卡片的关键字。
- 能力:这张卡的能力。
有两种类型的能力:
- 触发技能:它们是在发生相关触发时被解决的能力(例如,“当卡牌进入棋盘时”、“在回合开始时”等)。
- 激活的能力。它们是在支付相关成本时解决的能力(例如,“当玩家支付 2 点魔法值时”)。
这些技能总是有效果的,那就是技能的实际游戏玩法(“对敌方玩家造成 1 点伤害”、“治疗所有玩家生物”等)。
此外,您可以使用关键字来实现静态能力。静态技能需要额外的定制编程来实现其特定的游戏玩法(例如,在随附的演示中查看 Thrusts 和 Provoke 关键字)。
请注意,许多在编辑器中以可视化方式轻松定义的卡片效果仍然需要您进行额外的自定义编程工作。 这特别适用于“在区域之间移动卡片”类型的效果,因为需要附带网络代码来复制服务器和客户端之间的更改。
请注意,随附的演示游戏目前没有任何具有激活能力的卡牌示例。这是我们可能会在将来的更新中解决的问题(因为它需要额外的 UI 工作);同时,您还可以实现自己的系统,因为底层代码存在并且正常运行。为了激活已激活的能力,您只需在 Player 类中使用适当的参数(卡片的区域、卡片的实例标识符和要激活的能力的索引)调用 ActivateAbility 方法。最有可能的是,你会希望从 DemoHumanPlayer 类中执行此操作(如果您将演示游戏作为参考)。
效果的目标可以是玩家或卡片。通过目标条件列表,您可以指定一个或多个条件,这些条件必须为目标为真才能触发效果。如果指定了多个条件,则所有条件都必须为 true。
卡组只是按某种对您有意义的概念分组的卡牌集合(某种类型的卡牌、某种已发布的卡组的卡牌等)。