class Field
{
GameObject[] go; ///このフィールドにあるオブジェクト。
public void timeForward()
{
//ゲーム時間が経過した時の、フィールド内の処理(オブジェクトの衝突検知とか)を書く。
}
}
class abstract GameObject
{
public float x; ///このオブジェクトのx座標。
public float y; ///このオブジェクトのy座標。
/**
ゲーム時間が経過した時の、このオブジェクトの挙動を書く。
FieldのtimeForward()から呼び出される。
*/
public void timeForward();
/**
このオブジェクトが他のオブジェクトと衝突した時の挙動を書く。
FieldのtimeForward()から呼び出される。
Params:
go = このオブジェクトと衝突したオブジェクトが渡される。
*/
public void collideReaction(GameObject go);
/**
ダメージに対するリアクションの処理
Params:
power = 与えられた攻撃力。
Returns:
実際に与えたダメージ。
*/
public int damegeReaction(int power)
{
//基本的なリアクション。
}
/**
ふっ飛ばしに対するリアクション。
Params:
v = 吹っ飛ばす力。
Returns:
実際に吹っ飛んだ速度。
*/
public Vector blownReaction(Vector v)
{
//基本的な(ry
}
}
class Missile : GameObject
{
public int power; ///ミサイルの攻撃力。
public int speed; ///ミサイルの推進力。
public override void timeForward()
{
//前に推進する処理とか。
}
public override void collideReaction(GameObject go)
{
//爆発処理とか。
}
public override Vector blownReaction(Vector v)
{
//ミサイル固有の吹っ飛びの処理(ってなんだろう?w)。
}
}
class HomingMissile : Missile
{
public int lead; ///誘導性能。
public override void timeForward()
{
//追加で誘導処理でも。
}
//衝突処理には変更無し。
}