以下、実際にEGGXを使った簡単なプログラムを書いてゆく。 プログラム例を実際に入力して、実行してみること。
グラフィクスを描くには、まずそのためのウィンドウを開く。 それにはeggx_gopen(x,y)命令を使う。 整数型変数x,yはウィンドウの縦横のサイズをドット数単で指定する。 複数のウィンドウを管理するために各ウィンドウには番号がつけられる。 下のプログラムは100ドット×100ドットのウィンドウをひとつ開いて終了する (終了時にウィンドウは自動的に閉じられるので、ウィンドウは一瞬見えるだけ)。
#include<stdio.h> #include<eggxlib.h> main(){ int w; w=eggx_gopen(100,100); } |
ウィンドウの番号を格納するために整数変数wを用意し、
w=eggx_gopen(100,100); |
プログラム終了後にすぐウィンドウが閉じてしまうのはあんまりなので、しばらくそのままにしておく命令も覚えておこう。eggx_msleep(ms)は整数変数msで指定した時間(ミリ秒単位)だけ、なにもせずに待つ。この命令はプログラムの最後に限らず、いつでも使用できる。 次のプログラムはサイズの違うふたつのウィンドウを開いて、そのまま5秒間待って終了する(ウィンドウが重なってしまうようなら、マウスで位置を動かせばよい)
#include<stdio.h> #include<eggxlib.h> main(){ int w1,w2; w1=eggx_gopen(100,100); w2=eggx_gopen(300,200); eggx_msleep(5000); } |
初期状態ではウィンドウの背景は黒塗りになっている。この色の設定を変更するにはeggx_gsetbgcolor命令を使う。ただし、背景の色はウィンドウを”クリア”した時点で初めて反映される。”クリア”というのは要するにウィンドウに描かれているグラフィクスをすべて消去することである。それにはgclr命令を使う。 次のプログラムは1番目のウィンドウの背景を赤、2番目を黄色に設定して、両方 ウィンドウをクリアする。
#include<stdio.h> #include<eggxlib.h> main(){ int w1,w2; w1=eggx_gopen(100,100); w2=eggx_gopen(300,200); eggx_gsetbgcolor(w1,"red"); eggx_gsetbgcolor(w2,"yellow"); eggx_gclr(w1); eggx_gclr(w2); eggx_msleep(5000); } |
eggx_gsetbgcolorではウィンドウの番号と色を指定する。色は非常に細かく指定できるのだが、ここでは色の名前による指定だけをおぼえておけばいいだろう。色の名前として、white,black,red,blue,green,yellow,purple,pinkなど常識的なものはだいたい使えると思ってよい(実際には数百種の名前が使用できる)。名前を二重引用符(double quotation mark つまり"")で囲むことを忘れないように
eggx_gclrにはウィンドウの番号を指定する
矩形の輪郭を描くにはeggx_drawrect命令、矩形を塗りつぶすにはeggx_fillrect命令を使う。どちらもウィンドウ番号と矩形を指定する四つの数(初めの二つが矩形の左下隅の座標、次の二つが矩形の横幅と高さ)を与える。たとえば
#include<stdio.h> #include<eggxlib.h> main(){ int w1; w1=eggx_gopen(100,100); eggx_gsetbgcolor(w1,"red"); eggx_gclr(w1); eggx_drawrect(w1,50,10,20,30); eggx_fillrect(w1,50,60,30,20); eggx_msleep(5000); } |
eggx_drawrect(w1,50,10,20,30); |
矩形の位置とサイズは一般には実数変数で指定する(本当はfloatつまり"単精度実数"という型の変数にするべきなのだが、gccではいつものdoubleつまり倍精度実数変数でもうまくいくようなので、ここではそれでいいことにしておく。実は整数型変数でもできてしまったりする。どちらも本来はできないはずだと思うので、gccだけの特例だろう。ちゃんとやるにはキャストと呼ばれる方法で変数をfloatに変換する。キャストについてはC言語の本を参照)。 たとえば
#include<stdio.h> #include<eggxlib.h> main(){ int w1; int i; double x,y; w1=eggx_gopen(100,100); eggx_gsetbgcolor(w1,"red"); eggx_gclr(w1); for(i=1; i<6; ++i){ x = 10*i; y = 12*i; eggx_drawrect(w1,x,y,20,30); } eggx_msleep(5000); } |
これを利用すると、アニメーションを作ることができる。 たとえば、次のプログラムは矩形が右方向に2ドットずつ進んでゆく。
#include<stdio.h> #include<eggxlib.h> main(){ int w1,w2; int i; double x,y; w1=eggx_gopen(100,100); eggx_gsetbgcolor(w1,"red"); for(i=1; i<40; ++i){ x = 2*i; eggx_gclr(w1); eggx_fillrect(w1,x,30,10,30); eggx_msleep(100); } eggx_msleep(2000); } |
矩形以外の図形としては円弧や多角形などが用意されている。 詳細はマニュアル参照のこと。たとえば
#include<stdio.h> #include<eggxlib.h> main(){ int w1,w2; int i; double x,y; w1=eggx_gopen(100,100); eggx_gsetbgcolor(w1,"red"); for(i=1; i<40; ++i){ x = 2*i; eggx_gclr(w1); eggx_fillarc(w1,x,30,20,20,0,360,1); eggx_msleep(100); } eggx_msleep(2000); } |