2016-08-04 6 views
0

Ich programmiere ein kleines Spiel und es sollte auf der Konsole spielbar sein. Ich benutze Ncurses dafür, der Code kompiliert, aber wenn ich das Spiel starte, wird nichts auf der Konsole angezeigt. Der Spielbereich ist in einem 2D-Vektor gespeichert und die Werte sind in diesem Vektor. Ich habe es überprüft, mit dem normalen Druck und ohne Ncurses ist alles in Ordnung, aber wenn ich ncurses verwenden will, wird nichts auf der Konsole gedruckt.Verwende ich Ncurses korrekt für einen Vector?

Dies ist ein Stück Code von der Funktion, in dieser Funktion sind 6 mehr wenn Schleifen mit fast dem gleichen Code. gamearea ist mein 2d Vektor und _height und _width sind Variablen die sagen wie groß der Platz sein soll. Der Space ersetzt die #.

Was ich wissen will ist, wo ich die ncurses Funktionen falsch verwende? Ich habe den Terminal mit allem, was ich in einer anderen Funktion benötigen init:

void Play::initTerminal() { 
    initscr(); 
    cbreak(); 
    noecho(); 
    curs_set(false); 
    nodelay(stdscr, true); 
    keypad(stdscr, true); 
    start_color(); 
    use_default_colors(); 
    init_pair(1, COLOR_BLACK, COLOR_BLACK); 
    init_pair(2, COLOR_GREEN, COLOR_GREEN); 
    init_pair(3, COLOR_BLUE, COLOR_BLUE); 
    init_pair(4, COLOR_YELLOW, COLOR_YELLOW); 
    init_pair(5, COLOR_WHITE, COLOR_WHITE); 
    init_pair(6, COLOR_RED, COLOR_RED); 
    init_pair(7, COLOR_CYAN, COLOR_CYAN); 
} 

Vielleicht habe ich etwas falsch in dieser Funktion. Ich habe vorher nur ncurses benutzt und dort habe ich printf benutzt, aber diesmal möchte ich die Funktionen von ncurses richtig nutzen. Ich habe hier nichts ähnliches gefunden.

+0

Rufen Sie 'refresh()'? –

+0

Ja, ich rufe refresh() auf. Ich habe eine separate Klasse, die das Terminal und alle benötigten Funktionen zum Spielen einleitet, es gibt die Aktualisierung. Aber es zeichnet nichts auf dem Terminal, nur wenn ich printf verwende, wie der Kommentar im ersten Codestück, druckt es die Werte auf der Konsole, aber nur, wenn ich die Funktion direkt in der Main-Methode aufruft. – Lisa

+1

Ohne ein vollständiges Beispiel können wir nur raten. Zum Beispiel könnte Ihr Hauptprogramm Threads verwenden, die nicht gut funktionieren. –

Antwort

0

Ihre Farbenpaare sind falsch

init_pair (5, COLOR_WHITE, COLOR_WHITE) 

weiße Zeichen auf einem weißen Hintergrund schreiben.

+0

Das könnte ein anderes Problem beheben. Das Problem hier war, dass ich Attron und Attroff falsch benutzt habe. Ich schrieb Attron (5) anstelle von Attron (COLOR_PAIR (5)); – Lisa