Previous: 配列の利用
Up: Xウィンドウ実習
第3回 多数のウィンドウを使う
Previous Page: 配列の利用
Next Page: Xウィンドウ・プログラミング
第4回 GC構造体とグラフィック関数
もう少し複雑な例を調べてみましょう。
トランプのゲームの元になるプログラムです。
トランプのカードの1枚1枚を独立したウィンドウにします。
最初は8枚のカードが互いに重なり合って配置されます。
次にウィンドウの位置を変更する関数 XMoveWindow() を使って
カードが並び変わるようにします。
プログラムを完成させてください。ソース・ファイル名は win10.c とします。
win10.c
#include<stdio.h> #include<X11/Xlib.h> #include "moyou" /* ビットマップデータ */ main() { Display *dsp; /* ディスプレイ構造体の宣言 */ Window win, card[8]; /* ウィンドウ構造体の宣言 */ Pixmap pix; /* ピクスマップの宣言 */ Colormap cmap; /* カラーマップの宣言 */ XColor iro1, iro2, dummy; /* カラー構造体の宣言 */ int i;dsp = XOpenDisplay( NULL ); /* ディスプレイのオープン */
cmap = DefaultColormap( dsp, 0 ); /* カラーマップを得る */
/* カラーマップから色を得る */ XAllocNamedColor( dsp, cmap, "green4", &iro1, &dummy ); XAllocNamedColor( dsp, cmap, "DarkSeaGreen2", &iro2, &dummy );
/* ウィンドウの生成 */ win = XCreateSimpleWindow( dsp, DefaultRootWindow(dsp), 0, 0, 640, 400, 1, BlackPixel(dsp,0), WhitePixel(dsp,0) );
/* ピクスマップの生成 */ pix = XCreatePixmapFromBitmapData( dsp, win, moyou_bits, moyou_width, moyou_height, iro1.pixel, iro2.pixel, 8 );
/* サブウィンドウの生成 */ for( i=0 ; i<8 ; i++ ) { card[i] = XCreateSimpleWindow( dsp , win, 80-3*i, 80-3*i, 72, 128, 2, BlackPixel(dsp,0), WhitePixel(dsp,0) );
XSetWindowBackgroundPixmap( dsp, card[i], pix ); }
XStoreName( dsp, win, "トランプ" ); /* タイトルの設定 */
XMapWindow( dsp, win ); /* ウィンドウの表示 */ XMapSubwindows( dsp, win ); /* サブウィンドウの表示 */ XFlush( dsp ); getchar(); /* リターンキーの入力まで停止する */
for( i=7 ; i>=0 ; i-- ) { XMoveWindow( dsp, card[i], 2+80*i, 250 ); /* i番目のウィンドウを移動 */ XFlush( dsp ); getchar(); /* リターンキーの入力まで停止する */ }
XCloseDisplay( dsp ); /* ディスプレイのクローズ */ }
プログラムができたら、コンパイルして実行してみましょう。
うまくいきましたか? うまくいったら、さらに下の課題に挑んでください。