0

我开发了一个小控制台 C++ 游戏,它使用 ASCII 图形,目前使用 cout。但是因为我想让事情变得更好,我必须使用 pdcurses。问题是像 printw() 或 mvprintw() 这样的诅咒函数不使用常规的 ascii 代码,对于这个游戏,我真的需要使用笑脸字符、心形、黑桃等。

有没有办法让诅咒与常规的 ascii 代码一起工作?

4

1 回答 1

1

您不应该将笑脸之类的字符视为“常规 ASCII 代码”,因为它们实际上根本不是 ASCII。(ASCII 仅涵盖字符 32-127,以及一些低于 32 的控制代码。)它们是一种特殊情况,您能够在(我假设?)您的 Windows CMD shell 中看到它们的唯一原因是它是保持与古代 DOS 系统的 IBM Code Page 437(或类似)的向后兼容性。同时,在 DOS 框之外,Windows 使用完全不同的映射,Windows-1252(ISO-8859-1 的修改版本)或类似的映射,用于其 8 位,即所谓的“ANSI”字符集。但与 Unicode 相比,这两种类型的字符集都已过时。迷茫了吗?:)

使用 curses,最好的办法是尽可能使用纯 ASCII 和定义的 ACS_* 宏。那将是便携式的。但它不会给你一个笑脸。使用 PDCurses,有几种方法可以获得笑脸:如果您可以安全地假设您的控制台正在使用适当的代码页,那么您可以将A_ALTCHARSET属性或与字符一起传递给addch(); 或者你可以使用addrawch();或者您可以raw_output(TRUE)在打印字符之前调用。(这些都是大致等价的。)或者,您可以使用 PDCurses 的“宽”版本,找出 CP437 字符的 Unicode 等价物,然后打印它们。(这种方法也是可移植的,尽管这些字符是否会出现在非 PC 上是个问题。)

于 2014-03-01T21:52:12.940 回答