*cal_kakudoのサブルーチンを見てみます。
スペースキーを押すと敵が自機に向けて弾を発射します。
そのときの処理はどうなっているかというと・・・
弾の位置を敵の位置にセットしたあと、次の処理をします。
これにより、弾のx方向の移動量・y方向の移動量をそれぞれ算出します。
//角度計算(弾の移動方向を決める) (重要度:高)
*cal_kakudo
length_x = x - ex // X座標の差を求める
length_y = y - ey // Y座標の差を求める
rad = atan(length_y,length_x) // ターゲットとの角度を求める
dx = double (cos(rad)) * speed // x方向の移動量を計算
dy = double (sin(rad)) * speed // y方向の移動量を計算
return
以下の図のように、とりあえずlength_x・length_yを計算します。
(結果は必ずしも正になりませんがこれでちゃんと動く)

次に、アークタンジェントを計算します。

であるので、
この式から座標を使って角度を求められます。
最後に
sin、cosを使って、比率に直します。
自機と敵の距離をzとすれば、
cosθ = length_x / z
sinθ = length_y / z
であるので、敵と自機の距離が離れていても近くても適切な速さが保たれます。
そして、それに適当な速さを掛け算して速さを調節しておしまい。
後はメインループ内でex += dxなどとすれば弾がどんどん動きます。
x,yの比率がうまくいっているので、自機の方に向かって弾が飛んできます。
(自機が動かなければですが)
◆おまけ
メインループ内で毎回
*cal_kakudoを呼び出せば、
誘導弾となります。
ただし、実際ゲームにするときは、
弾が永久に追尾するようにするとプレイヤーにとってつらいので
工夫しましょう。
※このままでは
・当たり判定がない
・スペースキー連打で弾が戻ってしまう
などの問題があるのでそのままではゲームになりません。
これを改良する方法については次回以降で扱っていきます。