• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

C++ UTF Zeichen

HTMLooser

Neues Mitglied
Hallo,
ich versuche mir gerade ein einfaches jump 'n' run Spiel auf Konsolenbasis zu erstellen.
Dazu würde ich gerne für die Umgebung das Zeichen █ verwenden.
Ist leider im Unicode.
Ich habe ziemlich lange gegoogelt, leider ergebnislos.
Hat jemand eine möglichst einfache Lösung, es trotzdem auszugeben?
 
Werbung:
Danke, aber ... ehrlich gesagt steig ich da nicht ganz durch. Wie kann ich das anwenden?
EDIT:
Es gibt ziemlich viele, ziemlich einfach wirkende Lösungen, aber keine davon scheint zu funktionieren.
 
Zuletzt bearbeitet:
Werbung:
Ich kann es unter Windows nicht testen.

Unter Ubuntu geht es einfach so, falls das hilft:

Code:
#include <iostream>
#include <string>

void printBox(int width, int height);
std::string repeat(std::string s, int times);

int main()
{
        printBox(35, 5);
        printBox(40, 12);
        printBox(3, 3);
        return 0;
}

void printBox(int width, int height)
{
        std::string uc("\u2588");

        std::cout << repeat(uc, width) << "\n";

        std::cout << repeat(uc + repeat(" ", width - 2) + uc + "\n",
                        height - 2);

        std::cout << repeat(uc, width) << "\n";
}

std::string repeat(std::string s, int times)
{
        std::string ret;

        for (int i = 0; i < times; i++) {
                ret += s;
        }

        return ret;
}

Ausgabe:

Code:
% g++ -Wall -pedantic bla.c && ./a.out
███████████████████████████████████
█                                 █
█                                 █
█                                 █
███████████████████████████████████
████████████████████████████████████████
█                                      █
█                                      █
█                                      █
█                                      █
█                                      █
█                                      █
█                                      █
█                                      █
█                                      █
█                                      █
████████████████████████████████████████
███
█ █
███
 
Offenbar gibt es hier ein kleines Missverständnis.
Ich habe bereits die Möglichkeit, die Formen nach Belieben anzuordnen, das Problem liegt in der ausgabe dieses Zeichens.
Die Frage ist nur:
Wie kriege ich die Fehlermeldung "warning C4566: Das durch den universellen Zeichennamen "\u2588" dargestellte Zeichen kann in der aktuellen Codepage (1252) nicht dargestellt werden." weg?
nochmal der Kontext:

Code:
        void drawLine(int z)
        {
            int i=0;
            string out;
            while(i < 80)
            {
                if(x[i])
                {out = out + 'X';}

                else
                {out = out + ' ';}
                i++;
            }
            LOCATE(z+1, 1); cout << out;
        }

Das funktioniert so ganz gut, nur das X ist nicht so schön.
 
Ich habe bereits die Möglichkeit, die Formen nach Belieben anzuordnen, das Problem liegt in der ausgabe dieses Zeichens.

Habe ich schon verstanden. Ich dachte mir nur: Wenn ich mir schon mit C++ einen abbreche, kann ich auch ein wenig was basteln.

Die Warnung kann ich aber erklären. CP 1252 ist ein 1-Byte-Zeichensatz (256 Zeichen) und umfasst das hier: ISO 8859-1

Du musst irgendwie den Zeichensatz des Terminals auf so was wie UTF-8 umstellen.

- Change default code page of Windows console to UTF-8 - Super User

Testweise mal chcp 65001 ausführen, bevor du das Programm startest? Vielleicht tut das was.
 
Werbung:
Die Frage ist nur, wie...
Es bringt nichts, etwas vor jedem einzelnen Programmstart ausführen zu müssen.
Kennt denn wirklich niemand eine vertretbare Lösung für dieses Problem?
 
Es klappt jetzt tatsächlich mit
Code:
TCHAR copy = 1;
DWORD charsWritten;
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), &copy, 1, &charsWritten, 0);

Die 1 da oben stellt das jeweilige Zeichen dar.
Muss jetzt nur noch herausfinden, welches ich brauche.
 
Werbung:
Zurück
Oben