Domanda

Durante la scorsa settimana ho lavorato su un roguelike gioco in C ++ con un amico. Per lo più anche imparare la lingua.

sto usando:

Per di dove voglio nella console wchar_t uscita. Sono riuscito a otuputting alcuni caratteri unicode come \ u263B (☻), ma altri, come \ u2638 (☸) limiterò a finire come punti interrogativi (?).

Ecco il relativo codice che uso per l'uscita.

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

ho potuto naturalmente ripiegare su noioso ANSI-caratteri. Ma sarebbe davvero impressionante di avere la completa unicode-set di caratteri con cui giocare.

Per riassumere:? Come si fa a fare in modo che i caratteri Unicode vengono emessi correttamente


Modifica:

Ok, così ho capito la mia codifica funziona correttamente. Il problema è che Ho bisogno di forzare il terminale di passare ad una più ricco di unicode font face . C'è un modo cross-platform per fare questo? c'è anche un modo specifico di Windows per fare questo?

È stato utile?

Soluzione

  

Il problema è che ho bisogno di forzare il terminale di passare ad una più ricco di unicode font face. C'è un modo cross-platform per fare questo? c'è anche un modo specifico di Windows per fare questo?

Ho dato un'occhiata per questo, ma non ho trovato una chiamata API di Windows per farlo (che può significare solo non ho trovato, ovviamente). Non mi aspetto di trovare un modo cross-platform per farlo.

La soluzione migliore che viene in mente è quello di avviare la console utilizzando un appositamente costruito Shell link file "nofollow noreferrer" (.LNK). Se leggete la file di documentazione in formato , vedrai che permette di specificare un tipo di carattere.

Ma i vostri problemi non finiscono qui. Un locale occidentale installazione di Windows fornisce Lucida Console , ma che carattere fornisce solo un sottoinsieme limitato di grafemi. Suppongo che è possibile uscita / ingresso testo giapponese nella console su un PC Windows giapponese. Avresti bisogno di controllare ciò che è disponibile su un Windows giapponese, se si voleva essere sicuro che avrebbe funzionato lì.

Linux (Ubuntu, almeno) sembra avere un supporto molto migliore qui, usando UTF-8 e fornendo un font con ampio sostegno grafema. Non ho controllato altre distro per vedere ciò che la storia è lì, né ho controllato come i font vengono risolti nel terminale (se si tratta di una cosa X, una cosa Gnome o qualsiasi altra cosa).

Altri suggerimenti

In linea di principio, tutti i caratteri Unicode sono supportati sulla console. Il fatto che si sta vedendo punti interrogativi probabilmente ha a che fare con il supporto per i caratteri del font. Provare a cambiare il font della console a qualcosa con molto buon supporto unicode.

È necessario impostare la pagina di codice corretto. C'è un buon articolo su che qui: collegamento

Anche se è una abbastanza grande interruttore, si potrebbe provare a utilizzare una console alternativa, soprattutto se si sta facendo un roguelike. libtcod è una libreria moderatamente popolare, scritto in C con attacchi C ++, che fornisce una console completa colore che può impostare il proprio font e glifi in. Questo dovrebbe dare molta più flessibilità che essere bloccato con ciò che la console di Windows ti dà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top