GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Schreiben Sie ein Ratespiel in ncurses unter Linux

In meinem letzten Artikel habe ich eine kurze Einführung in die Verwendung der ncurses gegeben Bibliothek, um interaktive Anwendungen im Textmodus in C zu schreiben. Mit ncurses können wir steuern, wo und wie Text auf dem Terminal angezeigt wird. Wenn Sie die ncurses erkunden Bibliotheksfunktionen Wenn Sie die Handbuchseiten lesen, werden Sie feststellen, dass es eine Menge verschiedener Möglichkeiten gibt, Text anzuzeigen, darunter fetter Text, Farben, blinkender Text, Fenster, Rahmen, grafische Zeichen und andere Funktionen, die Ihre Anwendung hervorheben.

Programmierung und Entwicklung

  • Red Hat Entwickler-Blog
  • Spickzettel programmieren
  • Kostenlos testen:Red Hat Learning Subscription
  • eBook:Eine Einführung in die Programmierung mit Bash
  • Bash-Shell-Scripting-Spickzettel
  • eBook:Modernisierung von Enterprise Java

Wenn Sie ein fortgeschritteneres Programm ausprobieren möchten, das einige dieser interessanten Funktionen demonstriert, finden Sie hier ein einfaches „Rate die Zahl“-Spiel, das für die Verwendung von ncurses aktualisiert wurde . Das Programm wählt eine Zufallszahl aus einem Bereich aus und fordert den Benutzer auf, wiederholt zu raten, bis er die Geheimzahl gefunden hat. Während der Benutzer seine Schätzung abgibt, teilt ihm das Programm mit, ob die Schätzung zu niedrig oder zu hoch war.

Beachten Sie, dass dieses Programm die möglichen Zahlen von 0 bis 7 begrenzt. Wenn Sie die Werte auf einen begrenzten Bereich einstelliger Zahlen beschränken, wird die Verwendung von getch() einfacher um eine einzelne Zahl vom Benutzer zu lesen. Ich habe auch getrandom verwendet Kernel-Systemaufruf zum Generieren zufälliger Bits, maskiert mit der Zahl 7, um eine Zufallszahl von 0 (binär 0000) bis 7 (binär 0111) auszuwählen.

#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 */
}

Durch die Verwendung von ncurses , können wir etwas visuelles Interesse hinzufügen. Lassen Sie uns Funktionen hinzufügen, um wichtigen Text oben auf dem Bildschirm anzuzeigen, und eine Nachrichtenzeile, um Statusinformationen unten auf dem Bildschirm anzuzeigen.

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();
}

Mit diesen Funktionen können wir den Hauptteil unseres Zahlenratespiels konstruieren. Zuerst richtet das Programm das Terminal für ncurses ein , wählt dann eine Zufallszahl von 0 bis 7. Nach der Anzeige einer Zahlenskala tritt das Programm in eine Schleife ein, um den Benutzer nach seiner Vermutung zu fragen.

Während der Benutzer seine Vermutung anstellt, gibt das Programm visuelles Feedback. Wenn der Schätzwert zu niedrig ist, gibt das Programm eine linke eckige Klammer unter der Zahl auf dem Bildschirm aus. Wenn der Schätzwert zu hoch ist, gibt das Spiel eine rechte eckige Klammer aus. Dies hilft dem Benutzer, seine Auswahl einzuschränken, bis er die richtige Zahl errät.

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

Kopieren Sie dieses Programm und kompilieren Sie es selbst, um es auszuprobieren. Vergessen Sie nicht, dass Sie GCC mitteilen müssen, dass es sich mit den ncurses verbinden soll Bibliothek:

$ gcc -o guess guess.c -lncurses

Ich habe die Debugging-Zeile dort gelassen, sodass Sie die Geheimzahl in der Nähe der oberen rechten Ecke des Bildschirms sehen können:

Gehen Sie mit ncurses in Schwung

Dieses Programm verwendet eine Reihe anderer Funktionen von ncurses die Sie als Ausgangspunkt verwenden können. Beispielsweise druckt die Funktion print_header eine Nachricht in fettem Text zentriert oben auf dem Bildschirm, und die Funktion print_status druckt eine Nachricht in umgekehrtem Text unten links auf dem Bildschirm. Verwenden Sie dies, um Ihnen den Einstieg in ncurses zu erleichtern Programmierung.


Linux
  1. So installieren Sie die Ncurses-Bibliothek unter Linux

  2. Was ist die Inode-Nummer unter Linux?

  3. Dateiberechtigungen unter Linux – Lesen/Schreiben/Ausführen

  4. Linux-Zwischenablage lesen/schreiben in C

  5. Maximale Anzahl von Dateien/Verzeichnissen unter Linux?

So kopieren Sie eine große Anzahl von Dateien unter Linux

So pingen Sie eine Portnummer in Linux an

Zählen Sie die Anzahl der Dateien in einem Verzeichnis in Linux

Eine Anleitung zum Atop-Befehl in Linux

Wie man ein C-Programm unter Linux schreibt und ausführt

Schreibbefehl in Linux mit Beispielen