GNU/Linux >> Belajar Linux >  >> Linux

Tulis game tebak-tebakan di ncurses di Linux

Dalam artikel terakhir saya, saya memberikan pengantar singkat untuk menggunakan ncurses library untuk menulis aplikasi interaktif mode teks dalam C. Dengan ncurses , kita dapat mengontrol di mana dan bagaimana teks ditampilkan di terminal. Jika Anda menjelajahi ncurses perpustakaan berfungsi dengan membaca halaman manual, Anda akan menemukan banyak cara berbeda untuk menampilkan teks, termasuk teks tebal, warna, teks berkedip, jendela, batas, karakter grafik, dan fitur lain untuk membuat aplikasi Anda menonjol.

Pemrograman dan pengembangan

  • Blog Pengembang Topi Merah
  • Pemrograman lembar contekan
  • Coba gratis:Langganan Pembelajaran Red Hat
  • eBook:Pengantar pemrograman dengan Bash
  • Lembar Curang Skrip Bash Shell
  • eBook:Modernisasi Enterprise Java

Jika Anda ingin menjelajahi program yang lebih canggih yang menunjukkan beberapa fitur menarik ini, berikut adalah permainan “tebak angka” sederhana, yang diperbarui untuk menggunakan ncurses . Program memilih nomor acak dalam rentang, kemudian meminta pengguna untuk membuat tebakan berulang sampai mereka menemukan nomor rahasia. Saat pengguna membuat tebakan, program akan memberi tahu mereka jika tebakannya terlalu rendah atau terlalu tinggi.

Perhatikan bahwa program ini membatasi kemungkinan angka dari 0 hingga 7. Menjaga nilai pada kisaran terbatas angka satu digit mempermudah penggunaan getch() untuk membaca satu nomor dari pengguna. Saya juga menggunakan getrandom panggilan sistem kernel untuk menghasilkan bit acak, ditutupi dengan nomor 7 untuk memilih nomor acak dari 0 (biner 0000) hingga 7 (biner 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 */
}

Dengan menggunakan ncurses , kita dapat menambahkan beberapa minat visual. Mari tambahkan fungsi untuk menampilkan teks penting di bagian atas layar dan baris pesan untuk menampilkan informasi status di bagian bawah layar.

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

Dengan fungsi-fungsi ini, kita dapat membangun bagian utama dari permainan menebak angka kita. Pertama, program menyiapkan terminal untuk ncurses , kemudian memilih angka acak dari 0 hingga 7. Setelah menampilkan skala angka, program kemudian memasuki loop untuk meminta tebakan pengguna.

Saat pengguna membuat tebakan, program memberikan umpan balik visual. Jika tebakannya terlalu rendah, program akan mencetak tanda kurung siku kiri di bawah angka di layar. Jika tebakannya terlalu tinggi, permainan mencetak tanda kurung siku kanan. Ini membantu pengguna untuk mempersempit pilihan mereka sampai mereka menebak angka yang benar.

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

Salin program ini dan kompilasi sendiri untuk mencobanya. Jangan lupa bahwa Anda perlu memberi tahu GCC untuk menautkan dengan ncurses perpustakaan:

$ gcc -o guess guess.c -lncurses

Saya telah meninggalkan baris debug di sana, sehingga Anda dapat melihat nomor rahasia di dekat sudut kanan atas layar:

Mulailah dengan ncurses

Program ini menggunakan banyak fitur lain dari ncurses yang dapat Anda gunakan sebagai titik awal. Misalnya, fungsi print_header mencetak pesan dalam teks tebal yang berpusat di bagian atas layar, dan fungsi print_status mencetak pesan dalam teks terbalik di kiri bawah layar. Gunakan ini untuk membantu Anda memulai ncurses pemrograman.


Linux
  1. Cara Meningkatkan Jumlah Batas File Terbuka di Linux

  2. Cara Memasang Pustaka Ncurses Di Linux

  3. papan klip linux baca/tulis dalam C

  1. Jumlah maksimum file/direktori di Linux?

  2. linux /proc/loadavg

  3. menguji ruang disk di linux

  1. Apa nomor inode di Linux?

  2. Izin File di Linux – Baca/Tulis/Jalankan

  3. Tampilkan jumlah pesan dalam antrian email linux