AI游戏关卡生成:用Python和提示词模板批量产出关卡配置

AI游戏关卡生成最简单的落地方式,是先用 Python 脚本把关卡参数和提示词模板拼起来,调用大模型接口批量拿到结构化 JSON,再交给引擎或关卡编辑器使用。
这条路不依赖特定引擎插件,适合先验证生成质量,再决定是否接入 Unity、Godot 或自研工具链。

先明确你要生成哪种关卡

不同游戏类型对关卡数据的要求差别很大。
平台跳跃需要平台坐标、敌人位置和通关点;
塔防需要路径节点、刷怪波次和资源点;
解谜关卡则更依赖机关状态和触发条件。
动手前先写一份最小关卡字段表,例如:

  • level_id:关卡唯一编号
  • difficulty:1 到 5 的难度等级
  • platforms:平台列表,每项含 x、y、width
  • enemies:敌人列表,每项含 type、x、y
  • goal:通关点坐标

字段表就是后续提示词和校验脚本的依据,字段越少越容易跑通第一版。

准备运行环境和接口参数

在本地或测试服务器上安装 Python 3.9 以上版本,并装好 requests:

python3 -m venv venv
source venv/bin/activate
pip install requests

把模型接口地址、API Key 和模型名称放进环境变量,不要硬编码在脚本里:

export AI_API_BASE="你的接口地址"
export AI_API_KEY="你的密钥"
export AI_MODEL="模型名称"

接口地址和模型名称以你实际使用的服务为准,不同平台的请求路径和参数名可能不同,先拿一条最小请求确认能通,再继续批量生成。

用提示词模板约束输出结构

关卡生成最容易出问题的地方是模型返回自由文本,导致脚本解析失败。
提示词里要明确要求只输出 JSON,并给出字段示例:

你是游戏关卡设计师。请根据以下参数生成一个关卡,只输出 JSON,不要输出解释文字。
参数:难度={difficulty},主题={theme},平台数量={platform_count}。
输出格式示例:
{"level_id":"level_001","difficulty":3,"platforms":[{"x":0,"y":0,"width":4}],"enemies":[{"type":"slime","x":8,"y":2}],"goal":{"x":20,"y":0}}

把这段模板存成 prompt_template.txt,脚本里用 str.format 填入参数。
模板中保留一个完整示例比只写字段名更有效,模型更容易照着结构输出。

批量生成与结果校验

下面是一个可运行的最小脚本,读取参数列表,逐条请求并保存结果:

import json, os, requests

API_BASE = os.environ["AI_API_BASE"]
API_KEY = os.environ["AI_API_KEY"]
MODEL = os.environ["AI_MODEL"]

with open("prompt_template.txt", encoding="utf-8") as f:
    template = f.read()

params = [
    {"difficulty": 1, "theme": "森林", "platform_count": 6},
    {"difficulty": 3, "theme": "洞穴", "platform_count": 10},
]

for i, p in enumerate(params, start=1):
    prompt = template.format(**p)
    resp = requests.post(
        f"{API_BASE}/chat/completions",
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={"model": MODEL, "messages": [{"role": "user", "content": prompt}], "temperature": 0.7},
        timeout=60,
    )
    resp.raise_for_status()
    text = resp.json()["choices"][0]["message"]["content"]
    level = json.loads(text)
    level["level_id"] = f"level_{i:03d}"
    with open(f"levels/level_{i:03d}.json", "w", encoding="utf-8") as out:
        json.dump(level, out, ensure_ascii=False, indent=2)
    print("saved", level["level_id"])

运行前先创建 levels 目录。
如果模型返回内容带 Markdown 代码围栏,json.loads 会直接报错,可以在解析前做一次清理:去掉首尾的 `json 和 ` 标记。
每生成一批,至少抽查两个文件,确认坐标在合理范围内、敌人没有悬空、通关点可达。

常见报错和避坑

  • 返回内容不是合法 JSON:先检查提示词是否明确禁止解释文字,再在脚本里加清理逻辑;仍然失败时降低 temperature 或换更稳定的模型。
  • 接口返回 401 或 403:检查 AI_API_KEY 是否带多余空格,请求头格式是否为 Bearer 密钥。
  • 请求超时:关卡字段多时输出较长,适当调大 timeout,并考虑分批生成。
  • 字段缺失:脚本里加一个必填字段检查,缺少 platforms 或 goal 时记录日志并重新生成,不要直接写入关卡目录。
  • 坐标越界:生成后按你的关卡尺寸做一次范围过滤,超出边界的对象直接丢弃或重新请求。

AI游戏关卡生成的价值在于把重复的配置工作变成可批量执行的流程,但模型输出不能直接当成品用。
保留人工抽查和字段校验这两步,才能稳定产出可导入引擎的关卡数据。

验证生成结果是否可用

先确认每个 JSON 文件都能被解析,再检查关键字段类型:difficulty 是数字,platforms 和 enemies 是数组,goal 包含 x 和 y。
把生成文件导入关卡编辑器或写一个简单渲染脚本,观察平台是否重叠、敌人是否落在可行走区域。
如果只是做原型验证,可以先人工调整一两个关卡,确认数据结构没问题后再扩大生成数量。

分享到:
上一篇
AI游戏剧情生成:用Python脚本把事件与提示词串成可复用流程
下一篇
AI游戏美术生成:用ComfyUI工作流批量产出角色立绘
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意