2009-10-27 11 views
7

Ein einfacheres Lebenncurses Anfänger - mit GNU C

I C zurückkehre meine Programmierkeule zu helfen, neu zu beleben ausgehend. Das letzte Mal, als ich das Programmieren lernte, war ich auf dem College und arbeitete mit Turbo C an MSDOS. Einfache ASCII-Animationen wurden zu einer Obsession, als ich Borlands freundliches <conio.h> One-Include gefunden habe. Viel Spaß hatte ich mit den Funktionen gotoxy und textcolor und es dauerte nicht lange, bis ich Spiele wie Snake und Pong schrieb. Es war eine sehr lohnende Art, eine Sprache zu lernen, und jedes Spiel trieb mich weiter voran, als ich ehrgeiziger wurde.

ncurses

Ich beginne mit Projekten ähnlicher Spielart möchten. Heute bin ich auf einem Mac mit einer staubigen Linux-Maschine in der Ecke. Ich könnte meinen geliebten Turbo C in Dosbox (eine allgegenwärtige Plattform) starten, aber ich möchte C lernen, so dass ich etwas entwickeln kann, das sich natürlich auf jeder BSD- oder Unix-Plattform zusammensetzt. Mir wurde gesagt, dass Ncurses der Weg nach vorne ist, aber die GNU-Site ist mir größtenteils über den Kopf gegangen. Zurück in dem Tag hatte ich meine freundliche textmode Funktion und ich war ein print Ausdruck weg von Pong. Ncurses scheint viel mächtiger.

Zischen

Es müssen viele Menschen, die in dieser Situation waren. Ich suche nach einem relevanten Tutorial oder einer Ressource, die mir helfen wird, mit dem, was ncurses ist, und wie man damit arbeitet, zu kämpfen. Irgendwelche Tipps oder ähnliche Geschichten wären auch von großem Interesse!

+0

Ich habe auf meine Antwort hinzugefügt, Umleiteziels Ihre Kommentare über ncurses Fenster. Ihre Frage hat sich seit meiner ersten Antwort erheblich geändert - ich kenne kein ncurses-Tutorial, das ich empfehlen könnte. – caf

Antwort

5

Yup, ncurses ist die Bibliothek, die Sie suchen. Als Beispiel ist hier der (n) Flüche Äquivalent gotoxy:

BEZEICHNUNG

bewegen, wmove - move

SYNOPSE

#include <curses.h> 

    int move(int y, int x); 
    int wmove(WINDOW *win, int y, int x); 

Beschreibungsfenster Cursor

Flüche Diese Routinen verschieben den Cursor, der dem Fenster zugeordnet ist, auf Zeile y und Spalte x. Diese Routine verschiebt den physischen Cursor des Terminals nicht, bis Refresh aufgerufen wird. Die angegebene Position ist relativ zur oberen linken Ecke des Fensters, die (0,0) ist.

Nachtrag:

In Ihrem Kommentar fragen Sie Flüche Fenster - Ich glaube nicht, dass ich wirklich auf verbessern, was die ncurses Manpage sagt dazu, also werde ich es nur zitieren:

Die ncurses Bibliothek ermöglicht Manipulation von Datenstrukturen, genannt Fenster, die von als zweidimensionale Arrays von Zeichen gedacht werden kann ganz oder teilweise darstellt, ein CRT-Bildschirm. Ein Standardfenster namens stdscr, das die Größe des Terminalbildschirms aufweist, wird geliefert. Andere können mit newwin erstellt werden.

Beachten Sie, dass flures nicht überlappende Fenster behandelt, die von der Panel (3CURSES) -Bibliothek getan wird. Diese bedeutet, dass Sie entweder stdscr oder teilen Sie den Bildschirm in gekachelte Windows und nicht mit stdscr überhaupt. Mischen der beiden führt zu unvorhersehbare und unerwünschte, Effekte.

Windows wird mit den Variablen als WINDOW * bezeichnet. Diese Daten Strukturen werden mit Routinen manipuliert, die hier und anderswo in den ncurses Handbuchseiten beschrieben werden. Unter diejenigen, die grundlegenden Routinen sind bewegen und addch. Allgemeinere Versionen dieser Routinen sind enthalten mit Namen beginnend mit w, , so dass der Benutzer ein Fenster angeben kann. Die Routinen, die nicht mit w beginnen, beeinflussen stdscr.

Nach Routinen mit einem Fenster zu manipulieren, wird refresh genannt, erzählt Flüche des Benutzers CRT-Bildschirm aussehen wie stdscr zu machen. Die Zeichen in ein Fenster sind tatsächlich vom Typ chtype, (Zeichen und Attributdaten), so dass andere Informationen über das Zeichen auch mit jedem Zeichen gespeichert werden können.

Also, zusammenfassend können Sie die ganze Fenster Sache ignorieren und einfach das Stdscr-Fenster verwenden.

+1

danke, wies auf den Fenster Aspekt half mir zu erkennen, was die Frage "sollte" sein. Was ist ein Fenster?Ähnelt es einer virtuellen Seite, die auf die Konsole geschaltet oder gestreamt wird? Ich bin davon verblüfft. – deau

+0

Hinweis: Sie können '#include ' verwenden, um sicherzustellen, dass Sie tatsächlich Krankenschwestern anstelle einer antiquierten Version von Curses erhalten, aber wiederum kann eine der Include-Dateien ein Alias ​​sein. Man weiß nie. – Xenon

2

Nun, auf UNIX-ähnlichen Systemen wie BSD und Linux möchten Sie definitiv ncurses verwenden, da die Terminalemulatoren Ihr Leben wirklich miserabel machen, wenn Sie das nicht tun.

Sie sollten sich wahrscheinlich einen einfachen Wrapper mit den von Ihnen benötigten Funktionen schreiben und ihn für verschiedene Betriebssysteme anders implementieren. Unter Windows gibt es ein paar console functions die man verwenden kann damit das Teil nicht zu schwer wird.

1

Hier ist ein kleines Programm, um loszulegen.

#include <curses.h> 

int main(void) { 
    int ch; 

    /* The whole program needs error-checking */ 
    initscr(); 
    noecho(); 
    cbreak(); 
    printw("Hit Ctrl+C to exit ...\n\n"); 
    for (;;) { 
    ch = getch(); 
    printw("Value of char: %d (%02x)\n", ch, ch); 
    } 
    endwin(); 
    return 0; 
} 

Denken Sie daran, den Linker zu sagen, die libcurses Bibliothek hinzuzufügen.

gcc ... -lcurses 
+0

gut gespielt! Ein sehr hilfreiches Programm! – deau

1

Es gibt eine Bibliothek, die Turbo C wie Konsole IO Linux: TurboC Auch bezogen werden: CONIO for DevC++

+0

nett, vielen Dank – deau