AI News HubLIVE
站内改写

地牢与桌面:使用 GitHub Copilot CLI 构建程序生成的地牢爬行游戏

一位开发者利用 GitHub Copilot CLI 构建了一款终端地牢游戏,该游戏能将任意代码库转化为独特的 rogue-like 地牢。文章详细介绍了如何使用 BSP 算法进行程序化生成、Copilot CLI 的 /delegate 命令如何协助开发,以及如何安装和游玩这个有趣的项目。

文章情报

工程师中级

要点

  • GitHub Dungeons 是一款基于代码库提交哈希生成地牢的终端游戏,每个仓库产生不同的地图。
  • 使用 BSP(二叉空间分割)算法生成结构化且可重现的地牢布局。
  • Copilot CLI 的 /delegate 功能可异步处理任务,让开发者专注于游戏设计。
  • 游戏包含五层、迷雾、自动攻击等特性,并有一个危险的预提交钩子选项。

为什么重要

这条新闻值得关注,因为GitHub Dungeons 是一款基于代码库提交哈希生成地牢的终端游戏,每个仓库产生不同的地图。

技术影响

可能影响 Agent 架构、工具调用、工作流自动化和产品集成。

一位 GitHub 用户(Lee Reilly)在 Copilot CLI 挑战赛中受到启发,决定将代码库变成一个 rogue-like 地牢游戏。结果就是 GitHub Dungeons——一款在终端中运行的程序化生成地牢游戏。

游戏从简单的提示开始:用 Go 语言构建一个 GitHub CLI 扩展,将当前仓库变成可玩的地牢,使用 BSP(二叉空间分割)生成地牢。最终,GitHub Dungeons 诞生了,它根据仓库的提交哈希生成地牢布局,玩家使用方向键导航,与怪物战斗,寻找出口。每个仓库产生不同的地图,每次提交都会改变地牢结构,生命值归零则游戏结束。

rogue-like 游戏起源于 1980 年代的《Rogue》,以程序化生成、永久死亡和文本界面为特征。GitHub Dungeons 继承了这一传统,使用 Go 语言编写,而 Copilot 帮助开发者专注于行为而非语法。

**程序化生成**

程序化生成(或“procgen”)是通过算法而非手工设计来创建内容。在游戏中,通常意味着关卡、地图、敌人等在运行时根据规则和随机性生成。rogue-like 游戏的可重玩性正源于此:每次运行都不同,布局不断变化,而 GitHub Dungeons 的生成系统与仓库绑定,布局由最新提交的哈希播种,相同代码产生相同地牢,每次变更都重塑地牢。

**仓库如何变成地牢?**

GitHub Dungeons 使用 BSP 算法生成布局,由仓库的最新提交 SHA 播种。同一提交总是生成相同地图,不同仓库产生结构截然不同的布局,代码变化时地牢也随之进化。

**使用 Copilot CLI 构建**

与 Copilot CLI 合作意味着用自然语言描述行为,而非从头编写代码。/delegate 命令让开发者将任务交给 GitHub 的 Copilot 编码代理(云端运行),代理独立工作并最终发起拉取请求。开发者可以先喝茶放松(但不会真的去喝茶),然后审查和调整结果。例如,/delegate 让每个关卡逐渐变难,Copilot 生成了初步版本,开发者在平衡性上做调整。此外,还让 Copilot 生成了一个“地牢抄写员”代理,负责文档和 ASCII 艺术图解。

Copilot CLI 让开发者专注于游戏设计,而非边缘情况和样板代码。

**BSP 算法简介**

BSP 听起来复杂,但核心思想简单:不断将空间分割成更小的区域,直到得到一组可连接的房间。它为 rogue-like 提供结构感、可重玩性和可导航性。步骤包括:从一个大的空白空间开始;递归地水平或垂直分割;直到区域太小无法容纳房间;每个叶子区域变成一个房间,位置和大小略有随机;最后通过 L 形走廊连接房间。结果就是有组织的混乱——房间看似有意设计,走廊确保连通,每次运行不同但可重现。

**如何安装和游玩**

如果你已安装 GitHub Copilot CLI,可以运行 gh extension install leereilly/gh-dungeons 安装扩展,然后运行 gh dungeons 将当前仓库变为地牢。使用 WASD、方向键或 Vim 键控制角色,目标是找到隐藏门并逃出地牢,同时攻击敌人,共五层。游戏包含迷雾、自动攻击、击杀统计等功能。

此外,还有一个“疯狂模式”:设置预提交钩子,如果玩家未能通关,则自动暂存并丢弃未提交的更改。但文章强烈警告不要这样做,以免丢失工作。

**总结**

这个实验性的项目改变了开发者对 Copilot CLI 的看法。快速实现了 MVP,迭代核心玩法,让 Copilot 处理繁重任务(如 BSP 生成、怪物和移动定义)。Copilot 就像一群非玩家角色(NPC),随时待命执行开发者的指令。