GNU/Linux >> Tutoriales Linux >  >> Linux

Escribe un juego de adivinanzas en ncurses en Linux

En mi último artículo, di una breve introducción al uso de ncurses biblioteca para escribir aplicaciones interactivas en modo texto en C. Con ncurses , podemos controlar dónde y cómo se muestra el texto en el terminal. Si exploras las ncurses funciones de la biblioteca al leer las páginas del manual, encontrará que hay un montón de formas diferentes de mostrar texto, incluido texto en negrita, colores, texto parpadeante, ventanas, bordes, caracteres gráficos y otras características para que su aplicación se destaque.

Programación y desarrollo

  • Blog de desarrolladores de Red Hat
  • Hojas de trucos de programación
  • Pruébelo gratis:Red Hat Learning Subscription
  • eBook:Una introducción a la programación con Bash
  • Hoja de referencia de secuencias de comandos de Bash Shell
  • Libro electrónico:Modernización de Enterprise Java

Si desea explorar un programa más avanzado que demuestre algunas de estas características interesantes, aquí tiene un juego simple de "adivina el número", actualizado para usar ncurses . El programa elige un número aleatorio en un rango, luego le pide al usuario que haga suposiciones repetidas hasta que encuentre el número secreto. A medida que el usuario hace su suposición, el programa le permite saber si la suposición fue demasiado baja o demasiado alta.

Tenga en cuenta que este programa limita los números posibles de 0 a 7. Mantener los valores en un rango limitado de números de un solo dígito facilita el uso de getch() para leer un solo número del usuario. También usé el getrandom llamada al sistema del kernel para generar bits aleatorios, enmascarados con el número 7 para elegir un número aleatorio de 0 (0000 binario) a 7 (0111 binario).

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

Mediante el uso de ncurses , podemos agregar algo de interés visual. Agreguemos funciones para mostrar texto importante en la parte superior de la pantalla y una línea de mensaje para mostrar información de estado en la parte inferior de la pantalla.

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 estas funciones, podemos construir la parte principal de nuestro juego de adivinanzas. Primero, el programa configura la terminal para ncurses , luego elige un número aleatorio del 0 al 7. Después de mostrar una escala numérica, el programa entra en un bucle para pedirle al usuario que lo adivine.

A medida que el usuario adivina, el programa proporciona información visual. Si la suposición es demasiado baja, el programa imprime un corchete izquierdo debajo del número en la pantalla. Si la conjetura es demasiado alta, el juego imprime un corchete derecho. Esto ayuda al usuario a reducir su elección hasta que adivine el número correcto.

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

Copie este programa y compílelo usted mismo para probarlo. No olvides que debes decirle a GCC que se vincule con los ncurses biblioteca:

$ gcc -o guess guess.c -lncurses

He dejado la línea de depuración ahí, para que puedas ver el número secreto cerca de la esquina superior derecha de la pantalla:

Ponte en marcha con ncurses

Este programa utiliza muchas otras características de ncurses que puede utilizar como punto de partida. Por ejemplo, la función print_header imprime un mensaje en negrita centrado en la parte superior de la pantalla y la función print_status imprime un mensaje en texto inverso en la parte inferior izquierda de la pantalla. Use esto para ayudarlo a comenzar con ncurses programación.


Linux
  1. Cómo aumentar el número de límites de archivos abiertos en Linux

  2. ¿Qué es el número de inodo en Linux?

  3. ¿Cómo escribir un archivo con C en Linux?

  4. ¿Qué necesito para escribir un pequeño juego en Linux?

  5. probando sin espacio en disco en linux

Cómo copiar una gran cantidad de archivos en Linux

Cómo hacer ping a un número de puerto en Linux

Contar el número de archivos en un directorio en Linux

Una guía para el comando superior en Linux

Cómo escribir y ejecutar un programa C en Linux

escribir comando en Linux con ejemplos