今回は前回とは逆のボスとプレイヤーのショットとの当たり判定を実装します。これも基本的には敵との当たり判定の時とあまり変わりません。弾があたったらそのHPを減らし、HPが0になったら消滅させる必要があります。そのHPを設定する関数が必要になりますね。プレイヤーのショットの方ですが、プレイヤーのショットには追跡弾(ホーミング弾)を実装していたと思いますが、これは通常の敵に対して動作するようにしかコードを書いてないので、ボスの時にも動作させるようにコードを書き加える必要があります。それに伴ってPLAYERクラスからもボスの座標を取得する必要がありますので、CONTROLクラスにボス座標取得用の関数を作成します。hp;}これがボスのHP取得用の関数です。ボスクラスにはhpという変数を定義して初期値を500に設定してます。この関数では引数に渡されたダメージ数をhpから引き、そのhpを戻り値として返しているだけです。次にCONTROLクラスにボス座標取得用の関数を作成します。bx,by;boss.GetPosition(&bx,&by);*x=bx;*y=by;}特に説明は不要ですね。ボスクラスのGetPosition関数で座標を取得し、それを引数のポインタ経由で値を返してるだけです。先に当たり判定部分のコードをお見せします。i=0;i&lt;PSHOT_NUM;++i){if(player-&gt;GetShotPosition(i,&px,&py)){boss.GetPosition(&bx,&by);//当たり判定if(CircleCollision(PSHOT_COLLISION,BOSS_COLLISION,px,bx,py,by)){//当たっていれば、hpを減らすbhp=boss.HpSet(1);//当たった弾のフラグを戻すplayer-&gt;SetShotFlag(i,false);//得点を加えるscore-&gt;SetScore(CURRENT_SCORE,10);//もしボスのHPが0以下ならif(bhp&lt;=0){//フラグを戻すboss.SetFlag(false);//消滅エフェクトを出すEnemyDeadEffect(bx,by);//消滅音を鳴らすedead_flag=true;//さらに得点を加えるscore-&gt;SetScore(CURRENT_SCORE,10000);//アイテムを出す。z=0;z&lt;ITEM_NUM;++z){if(!item[z]-&gt;GetFlag()){//アイテムの初期座標をばらけさせる。z=0;z&lt;GRAZE_NUM;++z){if(!graze[z]-&gt;GetFlag()){graze[z]-&gt;SetFlag(px,py);break;}}//スコアを加算score-&gt;SetScore(GRAZE_SCORE,1);score-&gt;SetScore(CURRENT_SCORE,20);graze_flag=true;}//次の弾のグレイズをチェックするためフラグを戻す。gflag=false;}if(hflag){//操作キャラのdamageflagを立てるplayer-&gt;SetDamageFlag();//弾を消すboss.SetShotFlag(i,false);//プレイヤー消滅音フラグを立てるpdead_flag=true;//一時フラグを元に戻す。hflag=false;//一つでも当たっていたらプレイヤーは消滅するので、//他の弾をチェックする必要ないのでループを抜ける。1:player-&gt;SetPower(1);score-&gt;SetScore(POWER_SCORE,player-&gt;GetPower());//パワーを増やすbreak;}item[i]-&gt;Delete();//アイテム取得音をセットitem_flag=true;}}}//ライフは毎回取得score-&gt;SetScore(LIFE_SCORE,player-&gt;GetLife());}先ほどのボスのショットとプレイヤーの当たり判定のコードは無視してください。プレイヤーの弾数分だけループさせて、弾の座標を取得し、ボスの座標を取得した後、BossCollisionAll関数で当たり判定を行っています。BOSS_COLLISIONという定数はdefine.hで以下のように定義しています。6060なのでボスの画像の約半分ですね。弾がボスに当たったら、先ほどのHpSet関数を使ってHPを1減らしています。当たった弾のフラグを戻して弾を消し、スコアに得点を加算しています。その下のif文を見てください。bhpという変数はHpSet関数の戻り値であるボスのHPが入った変数です。それが0以下、つまり倒したときにこのif文内の処理が実行されるわけです。消滅エフェクト、消滅音、得点の設定などを行っています。最後にアイテムも出現させていますが、ボスなので少し多めにアイテムを出現させようと思います。ばらけて出現させたほうがよいので、初期座標をすこしずらしています。(rand()%100-51)の計算をするだけで、-50~50までのランダムな値が取得できます。これにbx,byつまりボスの座標を足すことで、ボスの座標から-50~50の範囲でかつランダムにアイテムの初期座標が設定されることになります。アイテムの、SetFlag関数の第三引数はアイテムの種類を表していますが、0と1の2種類しかないので、rand()%2の計算だけで、0か1のランダムな値を設定することができます。その下のif文でitemnumという変数、これはアイテムを何個出現させたかを表す変数ですが、これが10個に達したらループを抜けるようにしています。これで、ボスの座標から-50~50の範囲で、かつランダムに、10個のアイテムを出現させることができるようになりました。当たり判定の部分の説明は以上です。次にプレイヤーの追跡弾部分のコードです。追加した部分は、「ボスがいる場合はボスとの角度を取得」と書かれている、3行のif文だけです。controlクラスのGetBossFlagを実行して、ボスのフラグを取得し、ボスフラグが立っていれば、ボスが出現していることになるので、その場合は、先ほど作成したGetBossPosition関数を使って、ボスの座標を取得しています。atan2関数を使って、ボスの座標とプレイヤーのショットがなす角度を求め、trad変数に代入してます。弾構造体の実際の角度radに代入しているので、これが実際の弾の角度になるわけです。通常の敵とのなす角度が代入されることになります。以下の動画のようにプレイヤーのショットとボスとの当たり判定を実装できます。音とかエフェクトが弱いせいでかなりしょぼく見えますが、その辺はご了承下さい。ボス撃破時に画面を揺らしたり、もっと音を変えたり、エフェクトを激しくしたりすれば、もっとかっこよくなると思います。今回の説明は以上です。次回の内容は未定ですのでしばらくお待ち下さい。メニューレイアウト変更。ブラウザキャッシュのクリアをお願い致します。レイアウト変更に伴いブラウザキャッシュのクリアをお願いします。TOPページのデザインを変更。相互リンクページに、複数サイト追加。C言語学習ページ発展編(1~9章)追加。HTML/CSSリファレンスのページ追加。