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

玩家可以创建自定义战斗并回答问题,如“十万波斯人需要多少个斯巴达人才能击败?”,“当僵尸攻击现代城市时会发生什么?”或“国王亚瑟和索尔能否生存下来?”,而这些出laws的军队?”?

现在它已经成为一个真正的游戏,Steam 并且有一个免费的网上demo,它可以在大多数设备(桌面或移动设备)上正常工作。

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

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

在此之上是游戏本身。游戏中有许多十几种的战士类型、武器、物品、障碍、战场和特殊角色。您可以观察战斗、指挥武器、占有战士...并且当您使用武器时,它们会升级并变得更强大。它是一个沙盒,所有内容在零点就解锁了,您可以自由探索各种组合以模拟您能想象到的任何战斗。

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

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

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

• ANSI渲染器用于Steam版本在终端中的运行

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

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

输入也是标准化的:

• 键盘

• Xbox / PlayStation / Switch游戏手柄

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

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

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

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

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

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