Re5:50歳から始めるラズベリーパイ-12
Re5:50歳から始めるラズベリーパイ
簡単なゲームで学ぶVBAプログラミング入門
amazon kindle版を出版しました。
3.7 ブロック崩しゲームの作成-2
(3)ボールの動作
・ボールの基本動作
ボールの動作について考えてみましょう。ボールはある速度と方向を持ち、一定の方向に進んでいます。
図のように、x軸方向に角度θをもってx-y平面上を移動します。ボールを画面上に描画するには、位置(x,y)を知る必要があります。
位置(x,y)は次式で計算できます。
$x=x_0+v \cos \theta$
$y=y_0+v \sin \theta$
よって、ボールの移動は次のようになります。
bx = bx + bv * Cos(th / 180 * pi)
by = by + bv * Sin(th / 180 * pi)
※y軸は下方向が正なので注意が必要です。また、ラジアン表記なので度°をラジアンに変換してください。
・ボールの反射
次にボールがラケットやブロック、壁に当たったときの反射について考えてみます。
この図に示すように、上側、下側に当たった場合の角度は
-θとなります。
次に、横の壁にあった場合について考えると、図のようになり、180°-θとなります。
よって、プログラムは次のようになります。
thがθです。
'反射する
'左右反射は180-θ
If (bx < 1 Or bx > 20) Then
th = 180 - th
End If
'上下反射は-θ
If (by < 1) Then '一番上
th = -th
End If
'ラケットがあったら反射-θ
If (by > 19 And rx <= Int(bx) And rx + 3 >= Int(bx)) Then
th = -th
End If
・ブロックにボールが当たったとき
これは、1マスが1ドットとドットが荒いので、動きがおかしくなりますが、次に進んだときにブロックがあれば、そのブロックを消して、反射するということにしました。
'進行方向にブロックがあったら反射&ブロックを消す
i = int(bx + bv * Cos(th / 180 * pi))
ii = int(by + bv * Sin(th / 180 * pi))-2
If (ii <= 6 And ii >= 0) Then
If (block(ii, i) = 1) Then
block(ii, i) = 0
th = -th
End If
End If
※横から、ブロックにボールが当たることは考えません。