Field Notes是一款填字游戏,它通过Prompt API来构建谜题。游戏首先选择一个主题,然后生成单词,最后为这些单词创建提示线索——所有步骤均在浏览器内完成。随后,一个本地打包程序会以尽量增加交叉点的方式构建网格。

我出于好奇开始了这个演示项目,主要是想看看Prompt API模型如何融入游戏中。到目前为止,我的体验是:对于关卡生成来说,它的速度足够快,但在处理复杂指令(如生成一个关卡的完整网格及关联描述)时,模型还不够成熟。

如果你让模型“做一个9×9的填字游戏”,会得到:

  • 单词在应该共享字母的位置却不共享;
  • 单词长度与格子不匹配;
  • 类似“与树木相关的概念”这样的线索。

我尝试通过初始提示来解决这个问题,但总是遇到类似的情况。于是我转而采用算法方案,分别生成单词和答案。

循环流程:

  1. 从固定列表中选择一个主题。
  2. 向Prompt API请求比网格实际所需更多的单词,并混合打包程序实际需要的长度(小网格为3-5个字母,9×9或13×13网格则更长)。
  3. 剔除任何不符合以下条件的词:仅包含A-Z字母、长度正确、唯一、且具有真实线索。此阶段会过滤掉含糊的“与……相关/与……关联/是一种概念”等短语。
  4. 运行贪婪打包程序:先放置两个交叉的单词,然后持续插入必须与现有字母交叉的单词。将剩余空白位置设置为背景色。
  5. 如果单词数量不足,则向模型请求同一主题下的另一批单词(提示“已有:OAK, RAIN, …”),并重试。总共尝试三次,若最终仍无法获取足够单词,则关卡生成失败。在已进行的10多局游戏中,这种情况尚未发生。

一个5×5的网格只需要大约10条线索,因此算法会请求22个词条来确保成功。这样既保证了生成结果的独特性,又具有确定性,使你能生成可解的填字游戏。

该项目已开源,并可在GitHub Pages上访问:https://steven-moss-notebook.github.io/FieldNoteCrossword/

希望你喜欢!非常期待收到反馈!