この 1 週間、私は友人と一緒に C++ でローグライクゲームに取り組んでいました。ほとんどの場合、言語も学びます。
私は使用しています:
- pdcurses
- ウィンドウズ7
- ビジュアル スタジオ C++
wchar_t
コンソールの好きな場所に出力します。\u263B (☻) などの一部の Unicode 文字の出力には成功しましたが、\u2638 (☸) などの他の文字はクエスチョン マーク (?) になってしまいます。
出力に使用する関連コードを次に示します。
// Container of room information
struct RoomInfo
{
wchar_t * layout;
int width;
int height;
};
// The following function builds RoomInfo
RoomInfo Room::examine(IActor * examinor)
{
RoomInfo ri;
ri.width = this->width;
ri.height = this->height;
ri.layout = new wchar_t[height * width];
for(unsigned int y = 0; y < height; y++)
{
for(unsigned int x = 0; x < width; x++)
{
ri.layout[y*width + x] = L'\u263B'; // works
//ri.layout[y*width + x] = L'\u2638'; // will not work
}
}
}
// The following function outputs RoomInfo
void CursesConsole::printRoom(RoomInfo room)
{
int w = room.width;
int h = room.height;
WINDOW * mapw = newwin(h, w, 1, 0);
for(int y = 0; y < h; y++)
{
wmove(mapw, y, 0);
for(int x = 0; x < w; x++)
{
int c = y*w + x;
waddch(mapw, room.layout[c]);
}
}
wrefresh(mapw);
delwin(mapw);
}
もちろん、退屈な ANSI 文字に頼ることもできます。しかし、完全な Unicode セットの文字で遊べるというのは本当にすばらしいことです。
要約すると、Unicode 文字が正しく出力されるようにするにはどうすればよいでしょうか?
編集:
わかりました。エンコーディングが正しく機能していることを確認しました。問題は、端末を強制的に Unicode リッチの font face に切り替える必要があることです。これを行うクロスプラットフォームの方法はありますか? これを行うためのWindows固有の方法さえありますか?