自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過 ncurses 在 Linux 上寫一個(gè)猜謎游戲

系統(tǒng) Linux
使用 ncurses 的靈活性和強(qiáng)大功能在 Linux 上創(chuàng)建一個(gè)猜數(shù)字游戲。

使用 ncurses 的靈活性和強(qiáng)大功能在 Linux 上創(chuàng)建一個(gè)猜數(shù)字游戲。

在我的 上一篇文章,我簡要介紹了使用 ncurses 庫通過 C 語言編寫文本模式交互式應(yīng)用程序。使用 ncurses,我們可以控制文本在終端上的顯示位置和方式。如果你通過閱讀手冊頁探索 ncurses 庫函數(shù),你會(huì)發(fā)現(xiàn)顯示文本有很多不同的方式,包括粗體文本、顏色、閃爍文本、窗口、邊框、圖形字符和其它功能,這些都可以使你的應(yīng)用脫穎而出。

如果你想探索一個(gè)更高級的程序來演示其中一些有趣的功能,有一個(gè)簡單的“猜數(shù)字”游戲,我已更新為使用 ncurses 編寫的了。該程序在一個(gè)范圍內(nèi)選擇一個(gè)隨機(jī)數(shù),然后要求用戶進(jìn)行重復(fù)猜測,直到他們猜到這個(gè)秘密數(shù)字。當(dāng)用戶進(jìn)行猜測時(shí),程序會(huì)告知他們猜測的數(shù)字是太低還是太高。

請注意,程序限定可能的數(shù)字范圍是 0 到 7。將值保持在有限的個(gè)位數(shù)數(shù)字范圍內(nèi),可以更輕松的使用 getch() 函數(shù)從用戶讀取單個(gè)數(shù)字。我還使用了 getrandom 內(nèi)核系統(tǒng)調(diào)用來生成隨機(jī)數(shù),設(shè)定數(shù)字最大值為 7,以從 0 (二進(jìn)制 0000)到 7 (二進(jìn)制 0111)中選擇一個(gè)隨機(jī)數(shù)。

  1. #include <curses.h>;
  2. #include <string.h>;          /* for strlen */
  3. #include <sys/random.h>;      /* for getrandom */
  4.  
  5. int
  6. random0_7()
  7. {
  8.    int num;
  9.    getrandom(&num, sizeof(int), GRND_NONBLOCK);
  10.    return (num & 7); /* from 0000 to 0111 */
  11. }
  12.  
  13. int
  14. read_guess()
  15. {
  16.   int ch;
  17.  
  18.   do {
  19.     ch = getch();
  20.   } while ((ch < '0') || (ch > '7'));
  21.  
  22.   return (ch - '0'); /* turn into a number */
  23. }

通過使用 ncurses,我們可以增加一些有趣的視覺體驗(yàn)。通過添加函數(shù),我們可以在屏幕頂部顯示重要的文本信息,在屏幕底部顯示狀態(tài)消息行:

  1. void
  2. print_header(const char *text)
  3. {
  4.   move(0, 0);
  5.   clrtoeol();
  6.  
  7.   attron(A_BOLD);
  8.   mvaddstr(0, (COLS / 2) - (strlen(text) / 2), text);
  9.   attroff(A_BOLD);
  10.   refresh();
  11. }
  12.  
  13. void
  14. print_status(const char *text)
  15. {
  16.   move(LINES - 1, 0);
  17.   clrtoeol();
  18.  
  19.   attron(A_REVERSE);
  20.   mvaddstr(LINES - 1, 0, text);
  21.   attroff(A_REVERSE);
  22.   refresh();
  23. }

通過這些函數(shù),我們就可以構(gòu)建猜數(shù)字游戲的主要部分。首先,程序?yàn)?ncurses 設(shè)置終端,然后從 0 到 7 中選擇一個(gè)隨機(jī)數(shù)。顯示數(shù)字刻度后,程序啟動(dòng)一個(gè)循環(huán),詢問用戶的猜測。

當(dāng)用戶進(jìn)行猜測時(shí),程序會(huì)在屏幕上提供反饋。如果猜測太低,程序會(huì)在屏幕上的數(shù)字下方打印一個(gè)左方括號。如果猜測太高,程序會(huì)在屏幕上的數(shù)字下方打印一個(gè)右方括號。這有助于用戶縮小他們的選擇范圍,直到他們猜出正確的數(shù)字。

  1. int
  2. main()
  3. {
  4.   int number, guess;
  5.  
  6.   initscr();
  7.   cbreak();
  8.   noecho();
  9.  
  10.   number = random0_7();
  11.   mvprintw(1, COLS - 1, "%d", number); /* debugging */
  12.  
  13.   print_header("Guess the number 0-7");
  14.  
  15.   mvaddstr(9, (COLS / 2) - 7, "0 1 2 3 4 5 6 7");
  16.  
  17.   print_status("Make a guess...");
  18.  
  19.   do {
  20.     guess = read_guess();
  21.  
  22.     move(10, (COLS / 2) - 7 + (guess * 2));
  23.  
  24.     if (guess < number) {
  25.       addch('[');
  26.       print_status("Too low");
  27.     }
  28.  
  29.     else if (guess > number) {
  30.       addch(']');
  31.       print_status("Too high");
  32.     }
  33.  
  34.     else {
  35.       addch('^');
  36.     }
  37.   } while (guess != number);
  38.  
  39.   print_header("That's right!");
  40.   print_status("Press any key to quit");
  41.   getch();
  42.  
  43.   endwin();
  44.  
  45.   return 0;
  46. }

復(fù)制這個(gè)程序,自己嘗試編譯它。不要忘記你需要告訴 GCC 編譯器鏈接到 ncurses 庫:

  1. $ gcc -o guess guess.c -lncurses

我留下了一個(gè)調(diào)試行,所以你可以看到屏幕右上角附近的秘密數(shù)字:

 

圖1:猜數(shù)字游戲。注意右上角的秘密數(shù)字。

開始使用 ncurses 

該程序使用了 ncurses 的許多其它函數(shù),你可以從這些函數(shù)開始。例如,print_header 函數(shù)在屏幕頂部居中以粗體文本打印消息,print_status 函數(shù)在屏幕左下角以反向文本打印消息。使用它來幫助你開始使用 ncurses 編程。

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2021-06-26 16:24:21

Linux命令系統(tǒng)

2019-05-23 14:36:24

LinuxSOSReportxsos

2015-12-17 11:04:00

云開支云計(jì)算

2019-03-31 08:50:44

LinuxWine游戲

2012-01-04 13:55:23

Canvas

2015-06-29 11:30:07

JavaScript小烏龜推箱子

2021-04-14 15:25:39

Linux加密文件保險(xiǎn)庫

2011-09-08 10:46:12

Widget

2022-10-11 15:15:31

應(yīng)用開發(fā)鴻蒙

2015-06-02 04:13:23

Python乒乓球類游戲

2021-09-06 09:10:31

Linuxncurses定位文本

2021-01-03 16:30:34

Rust編程語言

2021-01-14 08:55:20

C語言編程

2018-01-19 12:56:19

Linux進(jìn)程

2022-07-01 15:33:53

LinuxBash

2018-07-16 08:40:08

Linux段錯(cuò)誤C++

2022-08-10 18:14:49

國際象棋游戲位字段C語言

2018-11-06 09:24:55

LinuxLutries命令

2023-11-29 08:10:36

javascriptH5游戲

2021-11-01 12:13:53

Linux僵尸進(jìn)程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號