Frage

In der vergangenen Woche habe ich an einem gearbeitet Roguelike Spiel in C ++ zusammen mit einem Freund. Meistens zu lernen die Sprache.

Ich benutze:

Ausgabe wchar_t'S Wo immer ich in der Konsole will. Es ist mir gelungen, einige Unicode -Zeichen wie u263b (☻) zu unterteilen, aber andere wie u2638 (☸) werden nur als Fragenmarkierungen (?) Enden.

Hier ist der relevante Code, den ich für die Ausgabe verwende.

// 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);
}

Ich konnte natürlich auf langweilige Ansi-Character zurückgreifen. Aber es wäre wirklich großartig, die vollständige Unicode-Menge von Charakteren zu haben, mit denen man spielen kann.

Etwas zusammenfassen: Wie stellen Sie sicher, dass die Unicode -Zeichen richtig ausgegeben werden?


Bearbeiten:

Ok, also habe ich herausgefunden, dass meine Codierung richtig funktioniert. Das Problem ist, dass Ich muss das Terminal zwingen, auf ein unikodischeres Schriftart umzusteigen. Gibt es eine plattformübergreifende Möglichkeit, dies zu tun? Gibt es sogar einen Windows -spezifischen Weg, dies zu tun?

War es hilfreich?

Lösung

Das Problem ist, dass ich das Terminal zwingen muss, auf ein unikodischeres Schriftart umzusteigen. Gibt es eine plattformübergreifende Möglichkeit, dies zu tun? Gibt es sogar einen Windows -spezifischen Weg, dies zu tun?

Ich hatte nach dem suchen, konnte aber keinen Windows -API -Anruf finden, um dies zu tun (was vielleicht nur bedeutet, dass ich sie nicht gefunden habe). Ich würde nicht erwarten, einen plattformübergreifenden Weg zu finden, dies zu tun.

Die beste Lösung, die ich mir vorstellen kann, ist die Einführung der Konsole mit einem speziell konstruierten Shell Link (.Lnk) Datei. Wenn Sie die lesen Dateiformatdokumentation, Sie werden sehen, dass Sie eine Schriftart angeben können.

Aber deine Probleme enden dort nicht. Eine westliche Installation von Windows bietet eine Installation von Windows Lucida -Konsole, Aber diese Schrift bietet nur eine begrenzte Teilmenge von Graphemen. Ich gehe davon aus, dass Sie japanische Text in der Konsole auf einem japanischen Windows -PC ausgeben/eingeben können. Sie müssten überprüfen, was in japanischen Fenstern verfügbar ist, wenn Sie sicher sein möchten, dass es dort funktioniert.

Linux (zumindest Ubuntu) scheint hier viel bessere Unterstützung zu haben, indem sie UTF-8 verwendet und eine Schriftart mit breiter Graphem-Unterstützung bietet. Ich habe keine andere Distribos überprüft, um zu sehen, was die Geschichte da ist, und ich habe auch nicht überprüft, wie Schriftarten im Terminal gelöst werden (ob es sich um eine X -Sache, eine Gnom -Sache oder was auch immer).

Andere Tipps

Grundsätzlich werden alle Unicode -Zeichen auf der Konsole unterstützt. Die Tatsache, dass Sie Fragezeichen sehen, hat wahrscheinlich mit Schriftart für diese Charaktere zu tun. Versuchen Sie, die Konsole -Schriftart auf etwas mit sehr guter Unicode -Unterstützung zu wechseln.

Sie müssen die Codeseite ordnungsgemäß festlegen. Hier gibt es einen ziemlich guten Artikel darüber: Verknüpfung

Obwohl es sich um einen ziemlich großen Schalter handelt, können Sie versuchen, eine alternative Konsole zu verwenden, insbesondere wenn Sie ein Roguelike machen. libtcod ist eine mäßig beliebte Bibliothek, die in C mit C ++ - Bindungen geschrieben wurde und eine vollständige Farbkonsole bietet, in der Sie Ihre eigenen Schriftarten und Glyphen einrichten können. Dies sollte Ihnen viel mehr Flexibilität bieten, als an der Windows -Konsole festzuhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top