第8回 筋道を立てよう − フローチャート − 「4.ボールを動かす その2」

8−4 ボールを動かす その2

さて、ボールの移動では「壁に当たって跳ね返る処理」が必要ですね。
壁、といっても画面の端ですが、この位置を超えたら跳ね返れば良いわけです。
ボールが斜めに動いているいっても内部的には縦と横は個別の処理になっていますので、これも、跳ね返る処理も縦と横に分けて考えればOKです。

例えば、縦方向を見ていきましょう。
下のほうに移動している場合、[移動量]>0である場合、

    [座標]=[座標]+[移動量]

ですね。これで、下へ移動します。
一方、上に移動する場合は、同じ条件なら、

    [座標]=[座標]−[移動量]

ですが、このままプログラムすると、
  If 方向=上 Then
    [座標]=[座標]−[移動量]
  Else
    [座標]=[座標]+[移動量]
  End If
と、方向によって式を切り替える必要があり、あまり良い方法とは言えません。
そこで、

    [座標]=[座標]+[方向]*[移動量]

として、方向は +1 か -1 どちらかの値が入るようにします。
そうすれば、
  If 壁にぶつかった Then
    [方向]= -[方向]
  End if
のように、方向の符号を逆転させれば、方向転換することが出来ます。

一方、移動量を加えたら「ボールは画面の外」という状態も起こり得ることです。

    

その場合は、移動量を加える前の座標に戻さないといけません。ちょうど、ボールを消去するために、表示した座標の値を保存していますから、その値を戻してあげれば良いですね。

ということで、壁にぶつかった時の[跳ね返り処理]は、[座標を戻す]ことと、[方向を変える」ことの2つの処理で実現できます。
もちろん、壁にぶつからなかったら、これらの処理は不要です。
これらの処理は、横方向の跳ね返りも、縦と同様ですので、フローはこんな感じでしょうか。

    

やれやれ、長い道のりでしたが、これで、ボールの移動に関する処理はおおよそ揃ったことになります。

前へ     目次へ     次へ

第8回 筋道を立てよう − フローチャート − 「4.ボールを動かす その2」