戦車から砲弾を発射してブロックを破壊します。それから前回のままでは戦車がブロックを通り抜けることができてしまうので、この問題を解消します。

まず戦車がブロックを通り抜けてしまう問題は

戦車の位置先の座標を取得して四捨五入する
その位置にブロックが存在するかどうか調べる
ブロックが存在する場合は移動できなくする

これでできそうです。

そのためにTankクラスのコンストラクタを変更します(Form1クラスのメンバーにアクセスできるようにする)。そしてその方向に動くことができるかどうかを判定するメソッドを作成します。

Tankクラスのコンストラクタを変更したため、Form1クラスも一部変更します。また壊れていないブロックを取得するためのメソッド GetNoBrokenBlocks()を追加します。

次に戦車から砲弾を発射してブロックを破壊する処理を考えます。

砲弾は処理を簡単にするため、移動中や方向転換中には発射できないことにします。すると砲弾はブロックの中心に向かって東西南北いずれかの方向から飛んでくることになります。また砲弾の速度は0.3です。

またこれまで砲弾の高度も考えてきましたが、砲弾はなにかに当たるまでまっすぐに飛びつづけるので考えないことにします。

砲弾は東西南北いずれかの方向にしか飛ばないので書き直すことにしました。砲弾の方向をしめすDirectプロパティを追加しました。

またBullet.isDeadプロパティを公開したので、戦車から発射された砲弾のリストを以下のようにプロパティに変更します(Bullet.isDead == trueであれば取得しない)。

ブロックに砲弾が命中したかどうかを判定するメソッドを作成します。砲弾が命中した方向で命中した側を消滅させます。同じ方向から2回命中させると完全に破壊することができます。90度ずれた方向からだと完全に破壊するために3発命中させる必要があります。

そしてUpdateメソッドのなかで砲弾を移動させるとともに当たり判定をおこないます。

最後のレーダーを表示させる処理は次回行ないます。

レーダーに情報を表示させる 3Dのタンクバタリアンっぽいゲーム