!!!担当モジュール
*画面
**タイトル画面
**選択画面
**ゲーム画面
**クリア画面
**ゲームオーバー画面
!!!活動記録
*画面
**
ウィンドウを作った。
ボタンと画像ファイルをhboxやvboxを組み合わせることで位置を変えることが出来た。
しかし、背景画像の上にボタンを設置しようとするとボタンがウィンドウを覆ってしまいうまく表示出来なかった。
コールバック関数内のプログラムを工夫して画面が切り替わり前の画面を表示しないようにした。
*味方の出現
**
鈴木さんのBallのプログラムを参考にした。
あるキーボードを押すと味方キャラが出現するようにした。
key_press関数を使い、キーボードを押した時に返ってくる値を判別して、mikata_new関数を読むようにした。
このとき味方キャラの初期位置、体力を設定している。
初期位置は各init関数で設定している。
*敵の出現
**
ある時間(秒)で敵キャラが出現するようにした。
ivent_loop関数を使い、関数内の変数を読むたびに1ずつ増やしていき、変数の値によってteki_new関数を読むようにした。(関数への引数が1000なので1秒ごとに呼ばれる。)
このとき敵キャラの初期位置、体力を設定している。初期位置は各init関数で設定している。
*衝突の条件
**
mikata_move関数内で、敵に対してcollision関数を呼び出し、ぶつかっていたら変数に1(初期値0)を代入して止まる(速度0)。
teki_move関数内で、対応している変数が1ならば(ある味方がある敵とぶつかっているならば)止まるようにした。
この変数はキャラの体力が0になったときに0に戻るようにしている。
この変数は15個ある。
int m1_t1 = 0;
int m2_t1 = 0;
int m4_t1 = 0;
int m1_t2 = 0;
int m2_t2 = 0;
int m4_t2 = 0;
int m1_t3 = 0;
int m4_t3 = 0;
int m2_t3 = 0;
int m3_t1 = 0;
int m3_t2 = 0;
int m1_t4 = 0;
int m2_t4 = 0;
int m3_t4 = 0;
int m4_t4 = 0;
*体力が減る条件
**
各キャラが出現すると各loop関数を動かし、関数内で体力を減らすようにした。
上記の変数が1のとき(ある味方がある敵とぶつかっているならば)の組み合わせによって体力の減らし方を変えた。減らし方は各loop関数内で7つある。
3対3なので、味方1が敵1とだけぶつかっている場合、味方1が敵2とだけぶつかっている場合、味方1が敵3とだけぶつかっている場合、味方1が敵1と敵2とだけぶつかっている場合、味方1が敵1と敵3とだけぶつかっている場合、味方1が敵2と敵3とだけぶつかっている場合、味方1が敵1と敵2と敵3の全てとぶつかっている場合の計7つ。
体力が0より少なくなったらキャラ(mySprite)を消すchara_remove関数を読むようにしている。
*敵の動く条件
**各敵からみると上記の各変数全てが0の場合に動く(動き出す)ようにすると良いことに気がついた。
*味方の動く条件
**各敵キャラが止まると別の各変数に1を代入することによって、味方からみるとこの変数全てが0の場合に動く(動き出す)ようにすると良いことに気がついた。
この変数は4つある。
int t1 = 0;
int t2 = 0;
int t3 = 0;
int t4 = 0;
*エラーを出さない工夫
**
ある敵が出現していないときにcollision関数を呼び出すと関数内の値が定まらないため、ある敵が出現している時だけ呼びだすようにした。
敵が出現するときにまた別の変数に0(初期値1)を代入している。
各味方のmove関数内ではこの変数が0のときだけcollision関数を呼び出すようにしている。
この変数は敵キャラの体力が0になったときに1に戻るようにしている。
この変数は3つある。
int aa = 1;
int bb = 1;
int cc = 1;
*陣地の機能
**陣地は敵味方2つあり、陣地のloop関数内で体力を減らし0より少なくなったら陣地を消し、すぐあとにクリア画面(敵陣地の体力0)かゲームオーバー画面(味方陣地の体力0)を表示させるようにしている。
[[戻る|15::gr05]]