C++での乱射ショットについて教えてください。こんにちはゲストさん。>>解決済みの質問C++での乱射ショットについて教えてください。今回もお世話になります。シューティングゲームのサンプルで勉強しています。サンプルの乱射ショットの実行画面では弾が20発くらい一度に乱射した状態で発射します。自分の実行画面は1~2発、画面から後退するときにもう1~2発発射するだけです。自分なりにコードを足してみたりしたのですが2くらい増えただけで乱射になりません。理解不足で出来ませんでした。何が足りないか教えてください。以下は乱射部分だけのコードです。その下にENEMY::Shot()の全体のコードを載せます。int)time(NULL));shot[i].rad=atan2(py-y,px-x)-(60*PI/180)+((rand()%120)*PI/180);++num;break;}}}break;以下はENEMY::Shot()の全体のコードです。px,py;//発射タイミングになったら、フラグを立てるif(shot_time==g_count){sflag=true;}//フラグを立てるときだけif(sflag){//プレイヤーの一取得control.GetPlayerPosition(&px,&py);//敵とプレイヤーとの座標の差から逆正接を求める。0://5回に一回発射。20までなので5発発射。1://6ループに一回発射。54までなので10発発射。2://10ループに一回発射。if(num==2){//敵とプレイヤーとの逆正接から10度足したラジアンを代入shot[i].rad=rad+(10*PI/180);}++num;//3発発射したら,numを0にしてループを抜ける。3:shot[i].x+=shot[i].speed*cos(shot[i].rad);shot[i].y+=shot[i].speed*sin(shot[i].rad);break;}//弾が画面をはみ出たらフラグを戻す。if(ShotOutCheck(i)){shot[i].flag=false;continue;}++s;}}//sがゼロということは発射中の弾がない。細かく全体を見てはいません。使われているのはここだけです。してからrand」となります。・numがどうなっているのか、コードからはわかりません。最初の1回だけ角度がランダムに決定され、それ以降はnum!=0となり、shot[i].radが過去に設定されたもののまま、ということは無いですか?・乱数の発生原理を理解しましょう。randは「疑似乱数」と呼ばれるもので、「乱数のように見えるけど、実際には一定の法則に従った数列」です。(seed,種と呼ばれます)は、その初期値を決めるものです。種が同じなら、発生する乱数列も同じになります。乱数が求められたとします。通常は、最初にsrandして、後はrandを繰り返す、という使い方をします。srandは、プログラム実行時に初期値が設定されます。そのため、プログラム実行の度に同じ乱数列が発生します。いわゆる「電源パターン」です。それを防ぐテクニックに一つが、「現在時刻を元に種を作る」です。int)time(NULL));はそのためのものです。これには「同じ時刻だと同じ乱数になる」という欠点があります。time()は1秒単位です。よって、現在のプログラムだと、1秒間に撃たれた「乱射弾」は、全部同じ方向へ飛びます。08:02:30お礼お疲れ様です。復習になった部分もあったのでよかったです。ありがとうございます。回答(2)ANo.1honor他のショットはサンプルのように上手くできているのでしょうか?shot[i].flagやshot[i].radの値をデバッガで確認してみるとか。乱数の初期化が出来ていないせいで全ての弾が重なってるなんてことはないですよね。07:02:30お礼お疲れ様です。言葉をヒントに試していたら解決出来ました。ありがとうございます。以下の2つのプログラムを実装し、時間計算量を実験的に評価せよ。以下の2つのプログラムを実装し、時間計算量を実験的に評価せよ。ファイルの出力について質問させてください。こんにちは、C言語を独学しているものです。