CLAWS(命令行高级战争系统)起初是一个实验。一个大规模的战斗模拟器是否可以在终端窗口中运行?仅限文本和像素艺术会不会损害体验,还是可以利用它作为艺术约束?

玩家可以创建自定义战斗并回答问题,如“10000波斯人需要多少个斯巴达人才能战胜?”、“僵尸攻击现代城市会发生什么?”或“亚瑟王和雷神能否在盗匪军中生存?”?

现在它是一个真正的游戏,在 Steam上可用,并有一个免费的网络演示可在大多数设备(台式机或移动设备)上运行。

我使用 .NET 10 / C# 从头开始构建了整个引擎。引擎包括战斗地图、碰撞检测、寻路、投射物、NPC AI、人类控制战斗机、空间音频、资源管理和渲染/输入抽象。

引擎的底层是基于我开源的文本 UI(TUI)库 klooie 构建的,提供可视树、事件、输入处理、渲染和其他终端应用程序基础设施。

在那之上是实际的游戏。我在游戏中植入了许多 dozens 个战斗机类型、武器、物品、障碍物、战斗场地和特殊人物。你可以观察战斗、命令武器、控制战斗机......并且当你使用武器时,它们会升级并变得更强大。它是一个沙盒世界,在第零天所有内容都解锁,你可以自由探索所有不同组合以模拟你想象中的任何战斗。

游戏代码从来没有引用 WebGL、浏览器 API、NAudio、ANSI 转义序列、游戏手柄、触摸控制或 JavaScript。

相反,渲染、输入、音频和资产都通过平台无关的抽象流动。

ConsoleBitmap 是一个文本/像素艺术图像。不同的渲染器消耗这个图像:

• 终端版本的 ANSI 渲染器

• 自定义 WebGL 渲染器用于浏览器

• 移动设备使用同样的 WebGL 渲染器

输入标准化了:

• 键盘

• Xbox / PlayStation / Switch 游戏手柄

• 移动设备上的虚拟触摸控制

音频遵循相同的模式。引擎暴露了一个空间感知的立体音频接口。Windows 使用 NAudio。浏览器使用一个 web 实现。游戏代码不知道哪个后端是激活的。

资产也是共享的。引擎将资源直接打包到 Windows 可执行文件中,并将其作为静态资产服务于 web 构建。

同样的模拟逻辑驱动着 Steam 发布、浏览器版本和移动版本。

结果是一个单一的 C# 代码库,它在终端、浏览器或手机上运行相同的战斗。

构建游戏很有趣。构建引擎并在所有这些环境中运行相同的模拟是最让我骄傲的部分。

AI 声明:我使用 AI 帮助完成了许多编码任务、生成音效和音乐。