cursesライブラリを使ったプログラミング(1)

9月になってずっと、Unix/Linuxプログラミングを読んでいる。7.4節のsleepまできた。
7章でcursesライブラリの使い方を学んだことで、端末画面でカーソルを動かしたり、文字を表示するしくみが少しはわかった。Linuxコマンドで、lsと打つのを間違えてslとすると、画面上をSLの絵が走るものが昔あった(今もあるが。http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/)が、その類のプログラムが作れそうだなと思った。

そこでちょっと作ってみる。

/* mona.c
 *                       ver.0.1
 *                    2008 09/13
 * compile:  cc mona.c -lcurses -o mona
 */

#include <curses.h>

#define LEFTEDGE 10
#define RIGHTEDGE 50
#define ROW 10

main()
{
  char fig[][38] = {"       ∧_∧   / ̄ ̄ ̄ ̄ ̄",
                    "    ( ´∀`)< オマエモナー",
                    "    (    )  \_____ ",
                    "    | | |                  ",
                    "   (__)_)                "};
  char blank[]  =   "                               ";
  int i;
  int dir = +1;
  int pos = RIGHTEDGE;

  initscr();
    clear();
    while(1){
      for (i=0; i<5; i++){
        move(ROW+i, pos);
        addstr(fig[i]);
      }
      move(LINES-1, COLS-1);
      refresh();
      sleep(1);

      for( i=0; i<5; i++){
        move(ROW+i, pos);
        addstr(blank);
      }
      pos -= dir;
    }
}

% cc mona.c -lcurses -o mona.c
コンパイルして、
% ./mona
で動作する。いまのところ、端末画面上で絵が右から左へ移動していくだけ。

  • 今後の方針
    • 移動速度を速くする。sleep(1)では遅い(7.5節以降を参考に)。
    • 画面の端まで到達した際の処理を入れる。