有没有一种方法可以编写一个可以在 Windows 和 Linux 上运行的命令行游戏?

Posted

技术标签:

【中文标题】有没有一种方法可以编写一个可以在 Windows 和 Linux 上运行的命令行游戏?【英文标题】:Is there a way that I can program a command line game that would work on both Windows and Linux? 【发布时间】:2018-09-24 23:40:15 【问题描述】:

我目前正在使用 C++ 开发一款太空入侵者游戏。我正在尝试找出一种仅使用标准库来创建此游戏的方法,以便我可以在 Windows 和 Linux 上运行它并获得相同的结果。

所以我的问题是,您能否仅使用标准库在 C++ 中编写控制台游戏,该标准库在编译后可在 Windows 和 Linux 上运行?

【问题讨论】:

你可以做的是基于操作系统的图形逻辑分支。例如,您可以根据操作系统类型创建图形对象。 #ifdef _linux_ gfx=LinuxGfx() #elif _WIN32 gfx = Win32Gfx() 或类似的东西 Is there a way that I can program a command line game that would work on both Windows and Linux? 是的。 using only the standard library没有。 是的,你可以。但这取决于您希望游戏的复杂程度。越复杂,就越不可能找到仅使用标准库的可移植解决方案。 @devdoesit 你确定要忽略跨平台可用的库吗? @Swordfish 我必须参加我的软件设计课。我说了同样的话 【参考方案1】:

很容易,不会。

有终端控制代码,其中一些在Windows和UNIX下都支持。

窗口:https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences UNIX(ish): http://wiki.bash-hackers.org/scripting/terminalcodes

两者之间有一些共性和交叉。这将是很多工作,虽然我是第一个欣赏这样一部作品的人,但我怀疑它是否会奏效。

您最好花时间使用SDL library 之类的东西来获得跨平台支持。如果这是核心要求,也许可以使用 SDL 使其看起来像一个终端。

即使在各种 UNIX 风格(和终端)下,转义码也各不相同。 ncurses 库隐藏了很多这种复杂性。

【讨论】:

@Joshua - 我很确定在旧版本的 Windows 中曾经有某种转义序列支持(可能不是全套?)......我有一些模糊的记忆使用它们。 BSD Unix 在 1980 年代有一个基于终端的 Space Invaders 游戏。低于 9600 bps 并不是很有挑战性,但现在这应该不是问题。您不妨坚持使用 ANSI 转义序列,任何人将 VT52 连接到现代系统的可能性都非常低。 @Kingsley ANSI.SYS 也许?不过,我不认为它是默认启用的。【参考方案2】:

没有。 C 和 C++ 标准库不包含执行以下任何任务的任何函数,这些任务对于图形控制台应用程序都是至关重要的:

清除终端 获取终端的大小(以行和列为单位) 将终端光标移动到特定位置

在 Windows 系统上,这些函数作为 Console API 的一部分提供。此 API 是特定于 Windows 的,不能在非 Windows 系统上使用。

在 Linux 和其他 UNIX 系统上,这些功能在终端仿真器中实现,并且通常使用 ncurses 库进行访问。此库在非本地环境(如 Cygwin)之外的 Windows 上不可用。

【讨论】:

OP 可以使用复杂的 ANSI 转义码系统。 Windows 和 UNIX 终端都支持这些。 比 ncurses 更好地推荐 PDCurses。 @Kingsley 也许吧?我记得有一些限制,尽管 Windows 10 可能有所改进。 @Swordfish 这开始进入非标准库的领域,这不是 OP 所要求的。虽然 ncurses 也不是 C / C++ 标准库的一部分,但至少在大多数 UNIX 系统上都提供了它。

以上是关于有没有一种方法可以编写一个可以在 Windows 和 Linux 上运行的命令行游戏?的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种干净的方法可以在 Python 中编写多行字符串? [复制]

有没有一种简单的方法可以在 WinForms 中实现 Checked Combobox [重复]

有没有一种方法可以在不使用大量分支语句的情况下为无符号整数编写 qsort 比较函数?

windows后台服务程序编写

有没有一种方法可以自动链接 OpenGL 程序需要的所有库,而无需在编译时显式编写它们的标志?

有没有一种方法可以更简洁地编写?