GNU/Linux >> Linux の 問題 >  >> Linux

Linuxのncursesで推測ゲームを書く

前回の記事では、 ncursesの使用について簡単に紹介しました。 Cでテキストモードのインタラクティブアプリケーションを作成するためのライブラリ。ncurses 、端末のどこにどのようにテキストを表示するかを制御できます。 ncursesを探索する場合 マニュアルページを読むことでライブラリ機能を実行すると、太字のテキスト、色、点滅するテキスト、ウィンドウ、境界線、グラフィック文字、およびアプリケーションを目立たせるその他の機能など、テキストを表示するさまざまな方法がたくさんあることがわかります。

プログラミングと開発

  • RedHat開発者ブログ
  • チートシートのプログラミング
  • 無料でお試しください:RedHatLearningサブスクリプション
  • eBook:Bashを使用したプログラミングの概要
  • Bashシェルスクリプトのチートシート
  • eBook:エンタープライズJavaの最新化

これらの興味深い機能のいくつかを示すより高度なプログラムを探索したい場合は、 ncursesを使用するように更新された単純な「数を推測する」ゲームを次に示します。 。プログラムは範囲内の乱数を選択し、秘密の番号が見つかるまで繰り返し推測するようにユーザーに求めます。ユーザーが推測すると、プログラムは推測が低すぎるか高すぎるかをユーザーに知らせます。

このプログラムは、可能な数値を0から7に制限することに注意してください。値を1桁の数値の限られた範囲に保つと、 getch()を使いやすくなります。 ユーザーから単一の番号を読み取ります。 getrandomも使用しました 0(バイナリ0000)から7(バイナリ0111)までの乱数を選択するために数値7でマスクされた、ランダムビットを生成するカーネルシステムコール。

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

ncursesを使用する 、視覚的な興味を追加することができます。画面上部に重要なテキストを表示する機能と、画面下部にステータス情報を表示するメッセージ行を追加しましょう。

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

これらの関数を使用して、数を推測するゲームの主要部分を構築できます。まず、プログラムは ncursesの端末を設定します 、次に0から7までの乱数を選択します。数値スケールを表示した後、プログラムはループに入り、ユーザーに推測を求めます。

ユーザーが推測すると、プログラムは視覚的なフィードバックを提供します。推測が低すぎる場合、プログラムは画面上の数字の下に左角括弧を印刷します。推測が高すぎる場合、ゲームは右角括弧を印刷します。これにより、ユーザーは正しい番号を推測するまで選択肢を絞り込むことができます。

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

このプログラムをコピーして、自分でコンパイルして試してみてください。 ncursesとリンクするようにGCCに指示する必要があることを忘れないでください ライブラリ:

$ gcc -o guess guess.c -lncurses

そこにデバッグ行を残したので、画面の右上隅の近くに秘密の番号が表示されます:

ncursesを使い始めましょう

このプログラムは、 ncursesの他の多くの機能を使用します 出発点として使用できます。たとえば、print_header関数は画面の上部中央に太字のテキストでメッセージを印刷し、print_status関数は画面の左下に逆のテキストでメッセージを印刷します。これを使用して、 ncursesを使い始めるのに役立ててください プログラミング。


Linux
  1. LinuxでCでファイルを書く方法は?

  2. Linux でのファイル/ディレクトリの最大数は?

  3. Linux /proc/loadavg

  1. Linuxで開くファイルの数の制限を増やす方法

  2. LinuxにNcursesライブラリをインストールする方法

  3. Linux メール キューのメッセージ数を表示する

  1. Linuxのiノード番号とは何ですか?

  2. Linux のファイル権限 – 読み取り/書き込み/実行

  3. CでのLinuxクリップボードの読み取り/書き込み