今回は単純に3方向にショットが飛ばせるようにしてみましょう。powerという変数があって、最大値は10にし、5を超えたら3方向にショットが撃てるように改造してみましょう。一発はまっすぐに飛ばし、ほかの2発は左右に広がっていく感じで飛ばすようにしましょう。そのため、SHOT構造体には角度を表すradという変数を持たせます。50と50発に増やしています。shot関数を改造してみましょう。shot[i].x>410){shot[i].flag=false;}}}}まず弾のセット部分のコードを見てください。if文でpowerの大きさが5以下なら弾を一発だせセットしてループを抜けるようにしています。代入する角度radは上方向を示す-PI/2の値を入れています。約マイナス90度です。0度だと右方向になります。次にパワーが5以上の場合の処理を見てください。numという変数は何発弾をセットしたかを表す一時変数です。numが0の時は角度radに-1.57、つまりまっすぐ上に飛ばす角度を代入してます。1の時は-1.69なので若干左斜め上に、2の時は-1.45なので若干右斜め上の角度を代入しています。その下のif文でnumが3になった時にforループを抜けています。することで3方向3発の弾のセットが終えてループを抜けることができます。その下の弾を移動させる処理の部分を見てください。座標の計算のところで、的の弾の移動の時と同じ計算方法で座標を計算して代入しています。今度は弾が左右に広がるためにx座標方向にも判定を入れています。これで弾のセットと移動部分のコードは書けました。i=0;i<PSHOT_NUM;++i){if(shot[i].flag){DrawRotaGraph(shot[i].x,shot[i].y,1.0,shot[i].rad+(90*PI/180),shot[i].gh,TRUE);}}//生きてれば描画if(damageflag){if(dcount>40){if(dcount%2==0){SetDrawBlendMode(DX_BLENDMODE_ALPHA,140);DrawGraph(PLAYER_INITX-width/2,PLAYER_INITY-height/2-(dcount-40)+60,gh[1],TRUE);SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);}else{DrawGraph(PLAYER_INITX-width/2,PLAYER_INITY-height/2-(dcount-40)+60,gh[1],TRUE);}}++dcount;if(dcount==100){damageflag=false;dcount=0;//座標を初期値に戻すx=PLAYER_INITX;y=PLAYER_INITY;//上向きの画像にするresult=1;}}else{//通常描画DrawGraph(x-width/2,y-height/2,gh[result],TRUE);}}変更したのは弾の描画部分です。DrawGraph関数をDrawRotaGraph関数にしています。弾に角度をつけた為に、弾の向きもその方向にあわせて傾けなければならないからです。先ほど計算された座標と角度を指定しています。深く考えないで下さい。ここまでで弾の描画まで出来るようになりました。次にプレイヤーのパワーを設定、取得するために、SetPower関数とGetPower関数を作成します。power;}SetPower関数の方は、引数で指定した値だけpowerの値を増加させるようにしています。パワーの最大値を10にするため、10を超えた場合は10に設定するようにしています。GetPower関数はただpower変数を返してるだけです。これらの関数をCONTROLクラスのCollisionAll関数に組み込みます。1:player->SetPower(1);score->SetScore(POWER_SCORE,player->GetPower());//パワーを増やすbreak;}item[i]->Delete();//アイテム取得音をセットitem_flag=true;}}}}//ライフは毎回取得score->SetScore(LIFE_SCORE,player->GetLife());}下の方にあるアイテムとプレイヤーの当たり判定の部分を見てください。アイテムのタイプが1の時にSetPower関数を使ってパワーを1増加させてます。現在のパワー値がスコアに反映されるというわけです。することで以下の動画のように、プレイヤーのショットが強化され3方向にショットが撃てるようになります。※動画用にパワーの初期値を3にしています。今回の説明は以上です。次回は更にショットを強化して、誘導弾を撃てるようにしてみましょう。メニューレイアウト変更。ブラウザキャッシュのクリアをお願い致します。レイアウト変更に伴いブラウザキャッシュのクリアをお願いします。TOPページのデザインを変更。相互リンクページに、複数サイト追加。C言語学習ページ発展編(1~9章)追加。HTML/CSSリファレンスのページ追加。