では、具体的にはどうすればよいのでしょうか。文字を 左の隅から、右の隅まで動かす方法を考えてみましょう。
これで、動いて見えるはずです。 あまりに速く動いてしまう場合は、途中で 意味のないループを作って時間稼ぎをしましょう。 文字を特定の場所に表示するには 第26章を参照してください。 では、早速プログラムを作ってみましょう。手順 (1)右隅に文字を表示(文字列でもよい) (2)空白の文字で(1)の文字を消す (3)(1)で書いた文字のすぐ右隣に同じ文字を表示 (4)この文字を空白で消す 以下繰り返し
#include <stdio.h> #define clear_text() printf("\x1b[2J") int set_position(int, int); int main(void) { int i, j; char *str = "粂井"; char *cls = " "; clear_text(); for (i = 1; i <= 76; i++) { set_position(i, 1); printf(str); for (j = 0; j <= 200; j++) { set_position(1, 2); printf("*"); } set_position(i, 1); printf(cls); } return 0; } int set_position(int x, int y) { printf("\x1b[%d;%dH", y, x); return 0; }
上のプログラムは、たいして難しくはないですね。
最近のマシンはすごく速いので普通に?時間稼ぎを
しても、あっという間に終了してしまいます。
そこで、上のプログラムではprintf("*");を
同じ場所に200回表示させています。
仕事をさせずに空ループだけ回しても、ループ回数を
ムチャクチャ多くしないと速すぎます。
ただし、こういった時間稼ぎのプログラムでは
DOSの場合だけにしておいてください。DOSでは、
原則的に一度に1つのアプリケーションしか動きません。
それで、時間稼ぎをしようが何をしようが他の
アプリケーションに迷惑をかけません。
ところが、Windowsのようなマルチタスク環境では
自分のアプリケーションのほかに、人様の
アプリケーションも動いています。
公衆道徳を守りましょう
と、いうことです。
さて、上のプログラムでは「粂井」という文字が
横にさっと動くだけですね。今度は、右はじまで行ったら
下向きに動いて、一番下まで行ったら斜めにあがって・・・
というふうに少し複雑な動きをするようにプログラムを
書き直してみてください。
では、グラフィックを動かすにはどうしたらよいのでしょうか。
原理は文字の時と同じです。しかし、もう少し知識が必要です。
大昔のBASIC(インタプリタの時代の)の時にはGET@とかPUT@とかいう命令
がありました。これは、画面の特定部分を記憶したり、あるいは記憶した
画像を表示したりする命令です。文字の時と同じ要領で
これらの命令を使ってグラフィックスを動かすことができます。
Cの場合は、グラフィックス関係
の関数はANSIで認められていないので処理系特有の関数を使うことになります。
ちなみに、マイクロソフトの製品では_getimage()とか_putimage()という
関数が用意されています。みなさんのコンパイラではどんな関数が
使えるのかヘルプ等で調べてみてください。また、画像を表示するとき
背景の画像とどのように合成するかという問題も起こってきます。
しかし、そんなに難しいことはありません。この章まで理解された
方にとってはびしびし動き回るアニメーションも比較的簡単に
作れるでしょう。
Update Dec/02/1996 By Y.Kumei