2009-10-27 31 views
7

Una vida más simplencurses novatos - comenzando con GNU C

vuelvo a C para ayudar a revitalizar el lóbulo de mi programación. La última vez que aprendí a programar estuve en la universidad trabajando con Turbo C en MSDOS. Las simples animaciones ASCII se convirtieron en una obsesión una vez que encontré el amigable amigo <conio.h> de Borland. Se tuvo mucha diversión con las funciones gotoxy y textcolor y no pasó mucho tiempo antes de que escribiera juegos como snake y pong. Fue una forma muy gratificante de aprender un idioma, y ​​cada juego me empujó más lejos a medida que fui más ambicioso.

ncurses

que me gustaría empezar con proyectos tipo de juego similares. Hoy, sin embargo, estoy en un Mac con una máquina de linux polvorienta en la esquina. Podría lanzar mi amado Turbo C en dosbox (una plataforma bastante ubicua), pero quiero aprender C de manera que pueda desarrollar algo que compile de forma natural en cualquier plataforma BSD o Unix. Me han dicho que ncurses es el camino a seguir, pero el sitio de GNU ha pasado por alto en gran medida. De vuelta en el día tuve mi amigable función textmode y tenía una expresión print lejos de pong. ncurses parece mucho más poderoso.

zas

Debe haber muchas personas que han estado en esta situación. Estoy buscando un tutorial o recurso relevante que me ayude a lidiar con lo que es ncurses y cómo trabajar con él. ¡Cualquier consejo o historia similar sería de gran interés también!

+0

he añadido a mi respuesta, anwering tu comentario sobre las ventanas de ncurses. Sin embargo, su pregunta ha cambiado sustancialmente desde la primera vez que respondí: no conozco un tutorial de ncurses para recomendar. – caf

Respuesta

5

Yup, ncurses es la biblioteca que está buscando. Como un ejemplo, aquí es la (n) maldice equivalente de gotoxy:

NOMBRE

movimiento, wmove - movimiento maldice cursor ventana

SINOPSIS

#include <curses.h> 

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

DESCRIPCIÓN

Estas rutinas mueven el cursor asociado a la ventana al línea y y columna x. Esta rutina no mueve el cursor físico del terminal hasta que se llame a la actualización. La posición especificada es con respecto a la esquina superior izquierda de la ventana, que es (0,0).

Adición:

En su comentario de preguntar acerca de maldiciones ventanas - No creo que realmente puede mejorar lo que la página ncurses hombre dice en esto, así que sólo cito:

La librería ncurses permite manipulación de estructuras de datos, llamadas ventanas, que pueden ser considerados como de matrices bidimensionales de caracteres que representan la totalidad o parte de una pantalla CRT. Se suministra una ventana predeterminada llamada stdscr, que es el tamaño de la pantalla del terminal . Otros se pueden crear con newwin.

Tenga en cuenta que curses no maneja ventanas superpuestas, eso se hace por la biblioteca del panel (3CURSOS). Esto significa que puede usar stdscr o dividir la pantalla en ventanas de mosaico y no usar stdscr en absoluto. Mezclar los dos dará como resultado efectos impredecibles y no deseados, .

Las ventanas se denominan variables declaradas como WINDOW *. Estas estructuras de datos se manipulan con las rutinas descritas aquí y en otras partes en las páginas de manual de ncurses. Entre ésos, las rutinas más básicas son move y addch. Las versiones más generales de de estas rutinas son incluidas con nombres que comienzan con w, , lo que permite al usuario especificar una ventana. Las rutinas que no comienzan con w afectan a stdscr.

Después de usar las rutinas para manipular una ventana , actualización se llama, diciendo maldiciones para hacer la pantalla CRT mirada del usuario como stdscr. Los caracteres en una ventana son en realidad del tipo chtype, (datos de caracteres y atributos) para que otra información sobre el carácter también se pueda almacenar con cada carácter .

Por lo tanto, en resumen, puede pasar por alto la ventana entera y simplemente usar la ventana stdscr.

+1

gracias, señalando el aspecto de la ventana me ayudó a darme cuenta de cuál debería ser la pregunta. ¿Qué es una ventana?¿Es similar a una página virtual que se cambia o transmite a la consola? Estoy desconcertado por eso. – deau

+0

Nota: Es posible que desee utilizar '#include ' para asegurarse de que realmente está recibiendo enfermeras, en lugar de una versión anticuada de maldiciones, pero una vez más, uno de los archivos incluidos podría ser un alias. Nunca sabes. – Xenon

2

Bueno, en sistemas tipo UNIX como BSD y Linux, definitivamente quiere usar ncurses ya que los emuladores de terminal hacen su vida realmente miserable si no lo hace.

Probablemente deba escribirse usted mismo un envoltorio simple, que contenga la funcionalidad que necesita e implementarlo de manera diferente para diferentes sistemas operativos. En Windows hay unos pocos console functions que puede usar para que esa parte no sea demasiado difícil.

1

Aquí hay un pequeño programa para comenzar.

#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; 
} 

Recuerde indicarle al vinculador que agregue la librería libcurses.

gcc ... -lcurses 
+0

¡bien jugado! ¡Un programa muy útil! – deau

1

Hay una biblioteca que proporciona Turbo C IO como consola de Linux: TurboC También relacionado: CONIO for DevC++

+0

agradable, muchas gracias – deau