你可以在这里找到一个游戏概念大图集:页面仓库

特点:

  1. 目录:所有包含的游戏设计概念的卡片视图
  2. 语言网:概念和它们之间关系的可视化
  3. 设计游戏:逐步运行概念并选择您想要在游戏中包含的内容;保存和加载任意时刻
  4. LLM 指导:玩玩的乐趣,您可以使用 OpenAI 兼容的完成 API 在设计向导中填充步骤
  5. 设计特性:当前只是镜像“设计游戏”;需要重新设计,但想法是您可以在同一游戏中有不同的模式和迷你游戏,每个游戏都可能与主游戏设计有很大不同(Junimo Kart,任何人?)
    6.灵感:选择标签以获取随机创意灵感的单词,来自约半个英语词典(12dicts, 2of12)

背景和技术

我已经建立了各种列表,如游戏类型等,并希望扩大它们的广度和深度,同时将它们编码为可用的应用程序。您可能还会注意到一些概念比其他概念更具体。这是因为我提供的一个输入基本上是 City of Heroes 等游戏中特征的分解,并且我希望有更多具体的概念,但我缺乏精力来完成。 我一直认为 crowdsourcing 数据将在这种情况下工作得更好,LLMs 目前对数据枚举只有一点帮助。它们确实更擅长收集而不是rote 回忆,正如人类一样。大部分人类工作是通用方法、数据生产、重复检查和测试,而我写了……10 行代码。剩下的都是(所有免费等级)Claude Sonnet 5、Gemini 3.1 Pro、Gemini 3.5 Flash、(本地) Qwen3.6-27B 和 (本地) Gemma4-26B-A4B。 我认为 Gemma 做了一个不错的工作将词典标记为相关;一眼看去,看到的最糟糕的事情是它在某些时候会混淆词语是否应该是实体还是特征。 这花了我大约2小时的时间(~1kWh)在我的RX 7900 XTX上使用 llama.cpp,具有较低的推理预算。 我在 Qwen3.6-27B 上使用 4 个并发请求来生成一些难度数字和关系,当时它有 351 个概念。 我基本上将原始数据作为 JavaScript 代码加上以下提示前缀:<Instructions> 1. 在思考时,考虑 CurrentConcept 相对于其他概念在同一类别中的开发难度 (diff)。在思考时,考虑 CurrentConcept 和所有其他概念之间的关系: a. 它是否严格要求它已经说过的内容?(deps) b. 它是否要求它尚未指定的内容?(deps) c. 它是否与它没有链接的内容密切相关?(rel) 3. 对于您的最终输出,请只写替换行(C() 调用)和任何需要添加或更改的新行(COMBO_DIFFICULTY)。您应该始终指定 'diff',即使它是 0(以显示我们已经考虑了它)。</Instructions> <CurrentConcept> 然后附加一个概念 ID 和 </CurrentConcept>。 我可以更具体一些,因为它确实输出了一些评论,另外 12 次重写了整个 COMBO_DIFFICULTY 块。 由于 Qwen3.6-27B 和 Gemini 3.1 Pro 都无法有效地过滤 Claude 和 Qwen 生成的废话,所以我自己做了大量工作。 例如: 1. 它说“PvP”需要“netcode”而不是“多人” 2. 它说“beat-'em-up”需要“side-scrolling”(反例:Yakuza,Batman Arkham)

为了产生“灵感”标签的单词列表,我做了以下事情(可能比任何人都想要的更详细):

  1. 写了一个提示前缀:将以下标签应用于以下单词,如适用。写出单词,一个制表符,然后所有适用的标签,分隔符。重复此过程以列出所有列出的单词,一个单词一行,并且不要排除任何单词,即使它们没有匹配的标签。专注于单词,而不是指令。不要重复示例。 <tags> 职业 工具(不穿着) 设备(不手持使用,不穿着,不足以进入结构) 结构(足以进入) 位置(不是结构) 属性(非动植物对象的属性) 特征(动植物实体的特征,不是职业,不适用于非动植物对象) 食物(任何已知的非小说实体) 材料(任何材料也将是属性,因为物体可以是“由”任何东西制成的,并且任何食物都可能是材料) 实体(动植物实体,不是职业) 事件(不是位置,不是结构) </tags> <example> 计算机|职业|设备 程序员|职业|设备 芯片|工具|设备|食物|材料 橙色|食物|属性|材料 金属|属性|材料 </example> 标记这些单词:(Reddit 取消了制表符,所以我用垂直管道替换了它们。实际上并不重要。) 2. 将词典分成小文件,以免 LLM 的注意力和思考力过度拉长: $i = 1; Get-Content "2of12.txt" -ReadCount 20 | ForEach-Object { $pad=$i.ToString("0000"); $_ | Out-File "words$pad.txt"; $i++ } 3. 运行 llama-server 并使用批处理运行器以 8 次并发执行提示: vulkan\llama-server -np 8 -c 16384 --temp 0.1 -m gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf --reasoning-budget 1024 --reasoning-budget-message "Thinking budget reached. Stop thinking and answer directly." (理想情况下,我会测量提示前缀长度并将 llama.cpp 上下文检查点令牌计数设置为该值作为一个小优化,但有人改变了 checkpoint-every-n-tokenscheckpoint-min-step,我还没有尝试。 以前,我使用 LlamaSharp 并记录了最佳检查点本身作为过程的一部分;请参见 https://github.com/dpmm99/Faxtract 为例。) 4. 使用 Powershell 将文本合并为一个文件: Get-Content words*.txt | Set-Content combined.txt 5. 删除 Gemma 决定我意味着包含括号部分的标签的括号部分 - 使用正则表达式替换 \(.* 为空白。 6. 将其转换为 JavaScript 可以更方便地处理的格式 - 使用更多正则表达式替换,尽管我考虑过让 JS 直接解析制表符分隔的值。 啊,所以尝试脑力激荡所有可能的概念并为自己建立工具来帮助自己建立可能只我会使用的工具的乐趣。:)(0% LLM 写的帖子...除非您认为代码片段算作之一。)