You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏元素合成配方的图数据结构选型咨询

合成游戏配方的图数据结构设计方案

核心思路

引入配方节点作为原料与产物之间的中间层,替代直接从原料到产物的定向边。每个配方节点对应一条完整的合成规则,以此解决单一原料节点到产物节点无法记录配对原料的问题。

结构定义

节点类型

  • 元素节点:代表所有可作为原料或产物的游戏元素,比如bird、metal、egg、airplane。
  • 配方节点:代表一条具体的合成规则,每条规则对应唯一的配方节点(即使产物相同,原料组合/顺序不同也对应不同的配方节点)。

边的规则

  • 元素节点 → 配方节点:表示该元素是此配方的有序原料之一(顺序敏感,比如metal+bird和bird+metal对应不同的配方节点)。每个配方节点必须连接且仅连接两个元素节点(允许两个节点为同一元素,比如bird+bird)。
  • 配方节点 → 元素节点:表示该配方的产物是此元素(支持一个配方生成多个产物的场景)。

对应示例配方的结构

以你的示例为例:

  1. bird + bird = egg:
    bird → 配方节点R0 ← bird,R0 → egg
  2. metal + bird = airplane:
    metal → 配方节点R1 ← bird,R1 → airplane
  3. sky + bird =/= airplane:
    不存在从sky→R←bird且R→airplane的结构,因此该组合无法合成飞机。

其余生成airplane的配方(metal+air、metal+sky、bird+engine),各自对应独立的配方节点R2、R3、R4,每个节点都定向连接到airplane元素节点。

结构优势

  • 完全适配你的三条配方规则:
    1. 强制每个配方节点绑定两个原料元素(支持同种元素);
    2. 单一产物元素可连接多个配方节点,对应多种合成路径;
    3. 单一配方节点可连接多个产物元素,实现多产物合成。
  • 精确区分原料顺序:不同顺序的原料组合对应不同配方节点,解决非对称合成的问题;
  • 扩展性强:可在配方节点上附加额外属性(比如合成耗时、所需工具、解锁条件等)。

伪代码实现示例

class ElementNode:
    def __init__(self, name):
        self.name = name
        # 存储所有以该元素为原料的配方节点
        self.linked_recipes = []

class RecipeNode:
    def __init__(self, recipe_id):
        self.recipe_id = recipe_id
        # 有序存储两个原料元素节点
        self.ingredients = []
        # 存储所有产物元素节点
        self.products = []
        # 可选附加属性
        self.craft_time = 0
        self.required_tool = None

内容的提问来源于stack exchange,提问作者bit_n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:52:08