SuperAPI AI 工具集

bevy-genre-card-game

编程与开发

查看项目

更新于 10-16 06:08

技能介绍

用途

本技能是一个 Bevy 卡牌游戏类型路由(genre router)。它用于在本地实现卡牌区域(zone)、手牌(hand)与回合顺序(turn order)。当需要处理本地卡牌区域、手牌和回合顺序时加载本技能。领域具体工作由下方列出的 Bevy 技能承担,本文件不命名新的引擎类型。

主要能力

  • 卡牌与区域:卡牌是实体(Entity),带有 Card 与 InZone 组件;区域类型(Deck、Hand、Board)作为普通数据存放在组件中。
  • 回合与目录:回合索引、能量以及卡牌目录通过资源(Resource)持有,卡牌定义经由 bevy-data-resources 提供。
  • 消息驱动:EndTurn 与 PlayCard 消息在同一个 .chain() 中被消费,用于结束回合、抽牌与出牌。
  • 系统调度:系统在 Update 或来自 bevy-master 的固定时间步(fixed timestep)上读取这些组件;当后续系统必须看到前一个系统的结果时,用 .chain() 排序。
  • 状态切换:游戏模式变更通过 bevy-state-machines 处理,不自行发明类型插件。

使用方式

ECS 形态:组件以普通数据持有该类型的每实体标志;资源持有回合索引、能量和卡牌目录;系统读取组件并按需用 .chain() 排序。

惯用映射:

  • 卡牌与区域 → 带 Card 和 InZone 的实体
  • 回合与目录 → 资源
  • 结束回合、抽牌、出牌 → 在同一个 .chain() 中消费的消息

路由:

  • bevy-turn-system —— 回合
  • bevy-inventory-system —— 将区域作为卡牌 id 的容器
  • bevy-ui-layout —— 手牌布局
  • bevy-data-resources —— 卡牌定义

范围:卡牌是实体,其区域是组件,回合索引与定义表是资源。本地对局使用 rand 洗牌;在线对局仍归网络相关技能处理。

示例要点(资料提供的代码):

  • 依赖:bevy = "0.20",rand = "0.9"
  • 区域与当前座位是普通数据。结束回合会推进座位,然后向该座位的手牌抽一张牌。
  • 洗牌使用 rand::rng 写入新的牌库顺序,在首次抽牌前从 Startup 运行。
  • 定义存放在一个资源中,实体只存储 id。
  • 出牌时检查区域是否为 Hand、能量是否足够,然后扣除能量并把区域改为 Board。

专家知识要点:目标为 Bevy 0.20+。核心 ECS 类型包括 Component、Resource、Query、Commands、Startup、Update、Fixed / FixedMain(bevy::time)、.chain()、Plugin、DefaultPlugins、MinimalPlugins。消息与观察者属于所有权槽位,其 API 见 bevy-events-messaging。除非用 .chain() 排序冲突的系统,否则系统并行运行。

状态所有权:

  • 单个实体上的数据 → Component,由某个系统通过 Query 修改,运行于 Update 或 FixedMain
  • 整个应用的一个值 → Resource,由某个系统修改,Startup 插入,之后由读取它的调度使用
  • 生成 → Commands,由生成系统负责,Startup 用于初始世界,后续调度用于运行时生成
  • 不能竞态的顺序 → .chain(),仅作用于被链式连接的系统,同一调度内
  • 插件边界 → Plugin,build 注册系统与资源,在应用运行前

借用规则:两个都可变查询同一组件的系统必须排序(.chain())或拆分,使只有一个写入;不相关的系统保持并行。

决策表:

  • 需要每实体数据 → 用 Component + Query,不要用 actor 上的场景树脚本
  • 需要应用级配置或时钟 → 用 Resource,不要把值复制到每个实体
  • 需要稳定仿真步 → 用 FixedMain 和 Fixed 时钟,不要把仿真绑定到原始帧 Update
  • 需要启动生成 → 在 Startup 中用 Commands,不要从渲染系统生成
  • 需要非共享状态的跨系统通知 → 用 bevy-events-messaging 中的 Message 或观察者槽位,不要在本文件中发明新事件类型
  • 需要文档集之外的 API → 阅读下方链接的官方手册,不要使用编造的 crate 或 API

适用场景

适用于在 Bevy 中构建本地卡牌游戏逻辑,包括手牌、牌库、场上区域、回合推进、抽牌、出牌与能量消耗等。在线对局不在本技能范围内,应使用网络相关技能。

限制

  • 不要在文档 URL 中固定 /0.20.0/;链接保持指向最新,0.20 目标只在正文中说明一次。
  • 不要从两个未排序的系统可变查询同一组件。
  • 不要在此发明物理、导航、网络或 XR crate;本技能只命名有文档的 Bevy crate 与模块。
  • 本路由中不使用场景树节点或信号总线;Bevy 代码保持惯用 ECS,只使用有文档的 Bevy API。
  • 不发明类型 API;不在此选择物理或网络 crate。
  • bevy-master 上的库固定版本保持 0.20。

相关技能

前置:bevy-master(ECS 所有权与调度)、bevy-ecs-composition(生成与查询形态)。 补充:bevy-turn-system(回合)、bevy-inventory-system(区域作为卡牌 id 容器)、bevy-ui-layout(手牌布局)、bevy-data-resources(卡牌定义)。 下游/消费者:无。本路由不拥有第二个实现。 主技能:bevy-master(Bevy 路由)。

官方文档参考:Assets(官方资源目录,未选择第三方 crate)、Examples(最新分支上的示例树)、ECS(Component、systems、Query、Startup、Update 与 .chain())、Plugins(Plugin、DefaultPlugins、MinimalPlugins 与 add_plugins)。