シューティングゲームで使えそうな技

(動作保証なし.サポート対象外.)

ミサイル,敵機,等の消える物体...どーする?

...

// データ構造
typedef struct {
	...
	int  life;	// 状態(0:死亡中,1:活動中)
} Mobj;

// 発射関数
int Shoot(Mobj *obj, double px, double py, double vx, double vy)
{
	if (obj->life != 0) return (1);	// すでに活動中なら無視

	obj->px = px;	// 位置の初期化
	obj->py = px;
	obj->vx = vx;	// 速度の初期化
	obj->vy = vy;
	obj->life = 1;	// 状態の変更(活動開始)
	return (0);
}

// 移動関数
int Move(Mobj *obj)
{
	if (obj->life == 0) return (1);	// 死亡中なら無視

	obj->px += obj->vx;	// 位置の変更
	obj->py += obj->vy;

	return (0);
}

// 消滅関数
int Kill(Mobj *obj)
{
	if (obj->life == 0) return (1);	// 死亡中なら無視

	obj->life = 0;
	return (0);
}

// ゲームの本体
int Game()
{
	Mobj ore, teki, tama;
	int  key;
	...
	key = getch();
	if (key == ' ') Shoot(&tama, ore.px, ore.py, 0.5, 0.0);
	...
	Move(&tama)
	if (tama が画面外に出た?) Kill(&tama);
	if (tama が teki に当たった?) {
		Kill(&tama);
		Kill(&teki);
		...
	}
	...
}

...

(c) 2014, yanagawa@kushiro-ct.ac.jp