GNU/Linux >> Linux Esercitazione >  >> Linux

Scrivi un gioco di indovinelli in ncurses su Linux

Nel mio ultimo articolo, ho fornito una breve introduzione all'uso di ncurses libreria per scrivere applicazioni interattive in modalità testo in C. Con ncurses , possiamo controllare dove e come il testo viene visualizzato sul terminale. Se esplori le ncurses funzioni della libreria leggendo le pagine del manuale, scoprirai che ci sono molti modi diversi per visualizzare il testo, inclusi testo in grassetto, colori, testo lampeggiante, finestre, bordi, caratteri grafici e altre funzionalità per far risaltare la tua applicazione.

Programmazione e sviluppo

  • Blog degli sviluppatori Red Hat
  • Programmazione cheat sheet
  • Prova gratuitamente:Red Hat Learning Subscription
  • eBook:un'introduzione alla programmazione con Bash
  • Cheat sheet per gli script di Bash Shell
  • eBook:modernizzare Enterprise Java

Se desideri esplorare un programma più avanzato che dimostri alcune di queste interessanti funzionalità, ecco un semplice gioco "indovina il numero", aggiornato per utilizzare ncurses . Il programma seleziona un numero casuale in un intervallo, quindi chiede all'utente di fare ipotesi ripetute finché non trova il numero segreto. Quando l'utente fa la sua ipotesi, il programma gli fa sapere se l'ipotesi era troppo bassa o troppo alta.

Tieni presente che questo programma limita i numeri possibili da 0 a 7. Mantenere i valori in un intervallo limitato di numeri a una cifra semplifica l'uso di getch() per leggere un singolo numero dall'utente. Ho anche usato getrandom chiamata di sistema del kernel per generare bit casuali, mascherati con il numero 7 per selezionare un numero casuale da 0 (binario 0000) a 7 (binario 0111).

#include <curses.h>
#include <string.h>          /* for strlen */
#include <sys/random.h>      /* for getrandom */

int
random0_7()
{
   int num;
   getrandom(&num, sizeof(int), GRND_NONBLOCK);
   return (num & 7); /* from 0000 to 0111 */
}

int
read_guess()
{
  int ch;

  do {
    ch = getch();
  } while ((ch < '0') || (ch > '7'));

  return (ch - '0'); /* turn into a number */
}

Utilizzando ncurses , possiamo aggiungere un po' di interesse visivo. Aggiungiamo funzioni per visualizzare il testo importante nella parte superiore dello schermo e una riga di messaggio per visualizzare le informazioni sullo stato nella parte inferiore dello schermo.

void
print_header(const char *text)
{
  move(0, 0);
  clrtoeol();

  attron(A_BOLD);
  mvaddstr(0, (COLS / 2) - (strlen(text) / 2), text);
  attroff(A_BOLD);
  refresh();
}

void
print_status(const char *text)
{
  move(LINES - 1, 0);
  clrtoeol();
 
  attron(A_REVERSE);
  mvaddstr(LINES - 1, 0, text);
  attroff(A_REVERSE);
  refresh();
}

Con queste funzioni, possiamo costruire la parte principale del nostro gioco di indovinare i numeri. Innanzitutto, il programma configura il terminale per ncurses , quindi seleziona un numero casuale da 0 a 7. Dopo aver visualizzato una scala numerica, il programma entra in un ciclo per chiedere all'utente la sua ipotesi.

Quando l'utente fa la sua ipotesi, il programma fornisce un feedback visivo. Se l'ipotesi è troppo bassa, il programma stampa una parentesi quadra sinistra sotto il numero sullo schermo. Se l'ipotesi è troppo alta, il gioco stampa una parentesi quadra destra. Questo aiuta l'utente a restringere la propria scelta finché non indovina il numero corretto.

int
main()
{
  int number, guess;

  initscr();
  cbreak();
  noecho();

  number = random0_7();
  mvprintw(1, COLS - 1, "%d", number); /* debugging */

  print_header("Guess the number 0-7");

  mvaddstr(9, (COLS / 2) - 7, "0 1 2 3 4 5 6 7");

  print_status("Make a guess...");

  do {
    guess = read_guess();

    move(10, (COLS / 2) - 7 + (guess * 2));

    if (guess < number) {
      addch('[');
      print_status("Too low");
    }

    else if (guess > number) {
      addch(']');
      print_status("Too high");
    }

    else {
      addch('^');
    }
  } while (guess != number);

  print_header("That's right!");
  print_status("Press any key to quit");
  getch();

  endwin();

  return 0;
}

Copia questo programma e compilalo tu stesso per provarlo. Non dimenticare che devi dire a GCC di collegarsi con le ncurses biblioteca:

$ gcc -o guess guess.c -lncurses

Ho lasciato la riga di debug lì, quindi puoi vedere il numero segreto nell'angolo in alto a destra dello schermo:

Fai partire con ncurses

Questo programma utilizza un sacco di altre funzionalità di ncurses che puoi usare come punto di partenza. Ad esempio, la funzione print_header stampa un messaggio in grassetto centrato nella parte superiore dello schermo e la funzione print_status stampa un messaggio in testo inverso nella parte inferiore sinistra dello schermo. Usa questo per aiutarti a iniziare con ncurses programmazione.


Linux
  1. Come scrivere un file con C in Linux?

  2. Di cosa ho bisogno per scrivere un piccolo gioco su Linux?

  3. Numero massimo di file/directory su Linux?

  4. linux /proc/loadavg

  5. testare lo spazio su disco in Linux

Come copiare un gran numero di file in Linux

Come eseguire il ping di un numero di porta in Linux

Conta il numero di file in una directory in Linux

Una guida al comando atop in Linux

Come scrivere ed eseguire un programma C in Linux

scrivi comando in Linux con esempi