【问题标题】:Print chess unicode characters in C++, and make characters square sized在 C++ 中打印国际象棋 unicode 字符,并使字符大小为正方形
【发布时间】:2015-12-06 21:29:10
【问题描述】:

我想问在 C++ 的控制台窗口中编写国际象棋 unicode 字符的最简单方法是什么? (♙♘♗♖♕♔♟♞♝♜♛♚)它们是 unicode 中“杂项符号”块的一部分。 https://en.wikipedia.org/wiki/Chess_symbols_in_Unicode

我也想打印正方形的字符,现在我的棋盘不是正方形的,因为每个字符都是矩形而不是正方形。

能在棋盘下方用普通的非方字写字也不错,但那可能是不可能的吧?在同一个控制台窗口中混合不同的字体/格式?

好的,提前谢谢! :)

【问题讨论】:

  • 很常见的问题,在搜索框中输入“棋盘”。选择与您的操作系统匹配的那个。把它摆正,嗯,不要指望它。
  • 您需要选择具有所需字符尺寸的字体。这无法在您的代码中进行控制(用于控制台输出)。

标签: c++ unicode console chess


【解决方案1】:

您问题的第一部分,输出这些字符,取决于平台。 Linux 控制台通常使用 UTF-8,如果是这种情况,您可以将字符编码为 UTF-8 并将它们写入标准输出。在 Windows 上,您可以使用 Console API(WriteConsole 函数):

HANDLE handle = GetStandardHandle(STD_OUTPUT_HANDLE);
DWORD written = 0;
// explicitly call the wide version (which always accepts UTF-16)
WriteConsoleW(handle, L"\u2658", 1, &written, NULL);

一个难以解决的问题是您需要一个包含这些字符的控制台字体。

要获得方形单元格,这取决于控制台呈现文本方式的许多细节。如果它使用字体替换,那么文本实际上可能不是等宽的。

现在,if 你有一个带有这些字符的控制台字体,并且 if 该字体是等宽的,那么你可以通过添加一些间距来绘制一个方形板人物之间。您可以使用像 U+258C — LEFT HALF BLOCK 这样的块元素来绘制棋盘:▌♘▐█▌ ▐

【讨论】:

  • 感谢您的回答!是的,我使用的是 Windows。关于正方形大小,是的,这可能会起作用,我会尝试!我是菜鸟,所以我不知道如何使用控制台 API 来完成这项工作。我试过用谷歌搜索答案,但不幸的是我无法让它工作......因此,如果你有一个代码示例,那么获取一个代码示例会很有帮助! :)
  • @user1066278 好的,我可以更新我的答案。这些是您应该在问题中提出的细节。
  • 谢谢 :) 好吧,我得到了一个方形字符,所以我可能需要安装新的控制台字体...无论如何,谢谢你的帮助 :)
猜你喜欢
  • 2019-10-01
  • 2010-11-27
  • 2013-02-03
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2014-08-23
相关资源
最近更新 更多