2009-10-27 4 views
7

una vita più semplicencurses novizio - partendo con GNU C

Sto tornando a C per contribuire a rinvigorire il mio lobo di programmazione. L'ultima volta che ho imparato a programmare ero al college lavorando con Turbo C su MSDOS. Le semplici animazioni ASCII sono diventate un'ossessione quando ho trovato l'amichevole <conio.h> di Borland. Si è divertito molto con le funzioni gotoxy e textcolor e non passò molto tempo prima che scrivessi giochi come snake e pong. È stato un modo molto gratificante per imparare una lingua, e ogni partita mi ha spinto ulteriormente, diventando più ambizioso.

ncurses

che mi piacerebbe iniziare con simili progetti di tipo di gioco. Oggi però, sono su un mac con una macchina linux polverosa nell'angolo. Potrei lanciare il mio amato Turbo C in dosbox (una piattaforma abbastanza onnipresente) ma voglio imparare C in modo tale da poter sviluppare qualcosa che compili in modo naturale su qualsiasi piattaforma BSD o Unix. Mi è stato detto che ncurses è la via da seguire, ma il sito GNU mi ha in gran parte superato la testa. Nel corso della giornata ho avuto la mia funzione amichevole textmode ed ero un'espressione print lontano dal pong. ncurses sembra molto più potente.

fruscio

Ci devono essere molte persone che sono già stati in questa situazione. Sto cercando un tutorial o una risorsa pertinente che mi aiuterà a confrontarmi con ciò che è ncurses e su come lavorarci. Qualsiasi suggerimento o storia simile sarebbe di grande interesse anche!

+0

ho aggiunto alla mia risposta, anwering i suoi commenti su ncurses finestre. La tua domanda è cambiata sostanzialmente da quando ho risposto per la prima volta, però - Non so di un tutorial su ncurses da consigliare. – caf

risposta

5

Yup, ncurses è la libreria che stai cercando. Come esempio, ecco la (n) curses equivalente di gotoxy:

NOME

mossa, wmove - spostarsi maledice finestra cursore

RIEPILOGO

#include <curses.h> 

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

DESCRIZIONE

Queste routine spostano il cursore associato alla finestra su linea y e colonna x. Questa routine non sposta il cursore fisico del terminale finché non viene chiamato l'aggiornamento. La posizione specificata è relativa all'angolo in alto a sinistra della finestra, che corrisponde a (0,0).

Addendum:

nel tuo commento interroghi su maledizioni finestre - non penso che posso veramente migliorare ciò che la pagina ncurses uomo dice su questo, quindi mi limiterò a citare esso:

La libreria ncurses permessi manipolazione delle strutture dati, chiamati finestre, che possono essere pensati come matrici bidimensionali di caratteri rappresentano tutto o in parte una schermata CRT. Viene fornita una finestra predefinita denominata stdscr, che corrisponde alle dimensioni dello schermo del terminale . Altri possono essere creati con newwin.

Nota che le maledizioni non gestiscono le finestre sovrapposte , operazione eseguita da nella libreria panel (3CURSES). Questo significa che è possibile utilizzare stdscr o dividere lo schermo in finestre affiancate e non utilizzare affatto stdscr. Il missaggio dei due comporterà effetti imprevedibili e indesiderati, .

Le finestre sono definite dalle variabili dichiarate come FINESTRA *. Queste strutture vengono manipolate con le routine descritte qui e altrove nelle pagine di manuale di ncurses. Tra quelli , le routine più semplici sono move e addch. Altre versioni generali di queste routine sono incluse con nomi che iniziano con w, che consentono all'utente di specificare una finestra. Le routine che non iniziano con w influiscono su stdscr.

Dopo aver utilizzato di routine per manipolare una finestra , aggiornamento si chiama, dicendo maledizioni per rendere lo schermo CRT sguardo dell'utente come stdscr. I caratteri in una finestra sono in realtà di tipo chtype, (dati di caratteri e attributi) in modo che altre informazioni sul carattere possono essere archiviate anche con ogni carattere .

Quindi, in breve, puoi tranquillamente ignorare l'intera finestra e utilizzare semplicemente la finestra stdscr.

+1

grazie, sottolineando l'aspetto della finestra mi ha aiutato a capire quale dovrebbe essere la domanda. Cos'è una finestra?È simile a una pagina virtuale che viene commutata o trasmessa in streaming alla console? Ne sono sconcertato. – deau

+0

Nota: potresti usare '#include ' per assicurarti che stai effettivamente ricevendo infermieri, invece di una versione antiquata di curses, ma poi di nuovo, uno dei file include potrebbe essere un alias. Non si sa mai. – Xenon

2

Bene, su sistemi simili a UNIX come BSD e Linux si desidera sicuramente utilizzare ncurses in quanto gli emulatori di terminale rendono la vita davvero infelice se non lo si fa.

Probabilmente dovresti scrivere un semplice wrapper, contenente le funzionalità necessarie e implementarlo in modo diverso per i diversi SO. Su Windows ci sono alcuni console functions che puoi usare in modo che la parte non sia troppo difficile.

1

Ecco un piccolo programma per iniziare.

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

Ricordarsi di indicare al linker di aggiungere la libreria libcurses.

gcc ... -lcurses 
+0

ben giocato! Un programma molto utile! – deau

1

C'è una biblioteca che fornisce Turbo C come console IO a Linux: TurboC Anche in relazione: CONIO for DevC++

+0

carino, grazie molte – deau