在C ++中打印国际象棋unicode字符,并使字符方形大小

时间:2015-12-06 21:29:11

标签: c++ unicode console chess

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

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

能够用国际象棋棋盘下方的普通非方形字符书写也很好,但这可能是不可能的?要在同一控制台窗口中混合使用不同的字体/格式?

好的,先谢谢! :)

1 个答案:

答案 0 :(得分: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);

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

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

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