プログラミング演習 II B (11/18)


課題8:画面表示部の作成

これ以降の課題は電子情報工学科の Indy マシンでのみ可能である。

簡易 X-Window ライブラリ を使用し、ゲーム版をグラフィックで表示する。

画面の大きさはヘッダファイルで定数として宣言する。

画面の各サイズに次のような定数名をつけた。


1)ヘッダファイル lights.h に次の宣言を追加せよ。

#define SCREEN_WIDTH  300
#define SCREEN_HEIGHT 300

#define LIGHTS_XPOS  25
#define LIGHTS_YPOS  25

#define LIGHT_WIDTH   50
#define LIGHT_HEIGHT  50

#define WINDOW_NAME  "Lights Out!"

/*------------------------*/
/* functions in display.c */
/*------------------------*/

/*
 * 画面の初期化
 */
void init_display();

2)Makefile を次のように修正せよ。


# Makefile for LIGHTS OUT!

SRCS = main.c display.c
OBJS = $(SRCS:.c=.o)
HDRS = lights.h

DEBUG   = -g
LIBDIR  = -L/home/speech/nishi/lib
INCLUDE = -I. -I/home/speech/nishi/include

TARGET  = lights

.c.o:
        $(CC) -c $(DEBUG) $(INCLUDE) $*.c

$(TARGET): $(OBJS)
        $(CC) $(LIBDIR) $(OBJS) $(DEBUG) -lXp -lX11 -o $(TARGET)

# end of file

3)main.c の中の main() の最初(変数宣言のすぐ後)に 次の行を追加せよ。

init_display();

4)display.c の先頭に次の宣言を追加せよ。

#include "Xp.h"

5)display.c に init_display() 関数を追加せよ。
/*
 * 画面の初期化
 */
void init_display()
{
   ????? 自分で考えて実装すること
   ????? 自分で考えて実装すること
   ????? 自分で考えて実装すること
}

6)display.c の print_lights() 関数を変更し、 グラフィック画面に出力するようにせよ。

ただし、以前に書いた部分もまた後で使うかも知れない。 消してしまうのは不便なので、こういうときは次のようにするとよい。
(#if 0 と #else で囲まれた部分はコンパイル時に無視される)

void print_lights( int lights[5][5] )
{
#if 0
   いままで書いた部分(無視される)
   いままで書いた部分(無視される)
   いままで書いた部分(無視される)
   いままで書いた部分(無視される)
#else
   新しく書く部分
   新しく書く部分
   新しく書く部分
   新しく書く部分
#endif
}
Level 4 の表示例

6)make コマンドでコンパイルし、

% ./lights

で、UNIX シェルから操作して X-Window 上の ゲーム盤が書き変わることを確認せよ。


補足)

あらかじめ適切に関数を分割しておくと、 まあまあ苦労せずにプログラムを拡張できる、という ことに注目しましょう。 これで完璧、とは言えませんが。。
次回はマウスクリックで 操作できるようにする予定です。


Takuya NISHIMOTO
Last modified: Mon Jan 27 11:43:42 1997