ncurses Anfänger - ausgehend mit GNU C
Frage
Ein einfacheres Leben
ich zu C kehre zurück, um meine Programmierlappens neu zu beleben. Das letzte Mal, ich habe mich gelernt, zu programmieren, war auf dem College mit Turbo C auf MS-DOS arbeiten. Einfache ASCII-Animationen wurde eine Obsession, wenn ich Borland freundliche <conio.h>
ein gehören entfernt gefunden. Viel Spaß mit den gotoxy
und textcolor
Funktionen hatte und es dauerte nicht lange, bevor ich Spiele wie Schlange und Pong zu schreiben. Es war ein sehr lohnender Weg, eine Sprache, und jedes Spiel schob mich weiter zu lernen, wie ich ehrgeizigere bekam.
ncurses
würde Ich mag mit ähnlichen Projekten Spielart starten. Heute aber, ich bin auf einem Mac mit einer staubigen Linux-Maschine in der Ecke. Ich konnte meinen geliebten Turbo C in dosbox (eine allgegenwärtigen genug Plattform) starten, aber ich mag C so lernen, dass ich etwas entwickeln kann, die natürlich auf jedem BSD oder Unix-Plattform kompiliert. Ich habe gesagt, dass ncurses ist der richtige Weg, aber der GNU-Website hat sich über meinen Kopf weitgehend verschwunden. Zurück in den Tag hatte ich meine freundliche textmode
Funktion und ich war weg aprint
Ausdruck von pong. ncurses scheint viel mächtiger.
zack
Es muß viele Menschen, die in dieser Situation sind. Ich suche nach einer entsprechenden Tutorial oder Ressource, die mir helfen ringe mit dem, was ncurses ist und wie es funktioniert. Irgendwelche Tipps oder ähnliche Geschichten würden auch von großen Interesse sein!
Lösung
Yup, ncurses
ist die Bibliothek, die Sie suchen. Als Beispiel ist hier der (n) Flüche Äquivalent gotoxy
:
NAME
bewegen, wmove - move Flüche Fenster Cursor
SYNTAX
#include <curses.h> int move(int y, int x); int wmove(WINDOW *win, int y, int x);
Beschreibung
Diese Routinen bewegen Sie den Cursor mit dem Fenster zugeordnet Zeile y und Spalte x. Diese Routine nicht den physischen Cursor bewegen des Terminals bis refresh aufgerufen. Die angegebene Position ist relativ zu der oberen linken Ecke des Fensters, das ist (0,0).
Nachtrag:
In Ihrem Kommentar, den Sie fragen über 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 erlaubt Manipulation von Datenstrukturen, Fenster genannt, die gedacht werden kann die als zweidimensionale Arrays von Zeichen repräsentieren ganz oder teilweise ein CRT-Bildschirm. Ein Standard-Fenster aufgerufen stdscr, die die Größe der IS Terminalbildschirm, zugeführt wird. Andere kann mit newwin erstellt werden.
Beachten Sie, dass nicht verarbeitet Flüche überlappende Fenster, ist das geschehen durch die Platte (3CURSES) Bibliothek. Diese entweder bedeutet, dass Sie stdscr verwenden können oder teilen den Bildschirm in gekachelten Fenster und schon gar nicht mit stdscr. Mischen der beiden führt in unvorhersehbar, und unerwünschte, Effekte.
Fenster werden durch Variablen bezeichnet als FENSTER * erklärt. Diese Daten Strukturen manipuliert mit Routinen hier und an anderer Stelle beschrieben in den ncurses Handbuchseiten. Unter diejenigen, die grundlegendsten Routinen bewegen und addch. Allgemeiner Versionen dieser Routinen sind mit Namen enthalten die mit w beginnen, dem Benutzer ermöglicht, ein Fenster zu spezifizieren. Die Routinen beginnen nicht mit w beeinflussen stdscr.
Nach Routinen zu manipulieren ein Fenster wird refresh genannt, zu sagen Flüche des Benutzers CRT-Bildschirm zu machen aussehen stdscr. Die Zeichen in ein Fenster ist tatsächlich vom Typ CHTYPE, (Zeichen und Attributdaten), so dass weitere Informationen über den Charakter kann auch mit jedem gespeichert werden Charakter.
So in der Zusammenfassung, können Sie sicher die gesamte Fenster Sache ignorieren und nur das stdscr Fenster verwenden.
Andere Tipps
Nun, auf UNIX-ähnlichen Systemen wie BSD und Linux Sie wollen auf jeden Fall ncurses
verwenden, da die Terminalemulatoren Ihr Leben wirklich unglücklich machen, wenn Sie dies nicht tun.
Sie sollten wahrscheinlich selbst einen einfachen Wrapper schreiben, die Funktionalität enthalten, die Sie benötigen und implementieren es anders für verschiedene Betriebssysteme. Unter Windows gibt es ein paar Konsolenfunktionen Sie können, so dass ein Teil sein wird, nicht zu hart verwenden.
Hier ist ein kleines Programm, um Ihnen den Einstieg.
#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
Es gibt eine Bibliothek, die Turbo C wie Konsole IO Linux: TurboC Auch bezogen werden: conio für DEVC ++