(C ++)Windows CMD中的Diplaying Shaded Blocks(▓,▒,░)

时间:2017-11-04 14:20:18

标签: c++ unicode cmd

我目前正在尝试使用Windows控制台创建游戏。它应该是一个光线追踪器(以Wolfenstein 3D的方式)。我需要使用称为"阴影块"的不同unicode字符来遮挡更远的物体。

问题是,这些字符似乎在Windows控制台中出错。 "完整的块"看起来应该看起来像: The walls displayed with the "FULL BLOCK" character (0x2588)

然而,当我使用" DARK SHADE"字符,控制台似乎错误并显示: The walls displayed with the "DARK SAHDE" character (0x2593)

然后我做了一些其他的测试。将角色粘贴到CMD中时,它更纤细,更高: enter image description here

然而,当进入consol属性并再次退出时,它会将块拼凑在一起,并在它们之后添加大量空格字符(我在行的末尾添加了一个点,这样你就可以看到空格的结束位置) : enter image description here

我使用了Consolas,所有这些都是16pt。

你能告诉我如何正确显示这些字符吗? 提前谢谢。

1 个答案:

答案 0 :(得分:-1)

[这不是答案。这是一个需要代码的评论。]

也许试试这个:

#define UNICODE
#define NOMINMAX
#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>

#include <iostream>
#include <string>
using namespace std;

namespace winapi {
    HANDLE const    std_output  = GetStdHandle( STD_OUTPUT_HANDLE );

    void write( wchar_t const* const s, int const n )
    {
        DWORD n_written;
        WriteConsole( std_output, s, n, &n_written, 0 );
    }

    void write( wstring const& s )
    {
        write( s.c_str(), s.length() );
    }
}

auto main()
    -> int
{
    wchar_t const   light_shade     = L'░';
    wchar_t const   medium_shade    = L'▒';
    wchar_t const   dark_shade      = L'▓';

    winapi::write( wstring( 64, dark_shade ) + L'\n' );
}