32. 乱数の初期化の仕方


乱数は初期値を設定する事でいつも同じ値が取り出せます。

シューティングゲームなんかは、乱数によって、弾を発射させます。

リプレイ映像を表現したい時、動画で保存したんじゃとてつもなくデータが多くなってしまいますね。

ですから、今まさに操作しているかのように、その人が操作したのと同じようにキャラを動かし、

(開始から何ミリ秒右を押したか、何ミリ秒左を押したか操作データを保存して、それにしたがって動かす)

弾もその時と同じように出せば、その時と同じ状況が再現でき、リプレイ映像が表現できますね。

このように乱数は初期値によって以前と同じ値を取り出したいときがあります。そのときにはSRand関数を使います。

引数に持たせたint型数値によって初期化されますので、同じ乱数を生成したい時は、この引数に同じ値を渡しましょう。

printfDxで表示させたい文字列はScreenFlip();を呼んだ時点で表示される事に注意して下さい。


#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ;          // ウインドウモードに変更
        if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化 エラーが起きたら終了 
 
        SRand(10);                          //乱数の初期値を10で設定。
        printfDx("%d\n",GetRand(10000));    //0〜10000までの乱数を生成,画面に出力
        printfDx("%d\n",GetRand(10000));    
        printfDx("%d\n",GetRand(10000));
        printfDx("%d\n",GetRand(10000));
 
        printfDx("\n");
 
        SRand(10);                          //乱数の初期値を10で設定。
        printfDx("%d\n",GetRand(10000));    //0〜10000までの乱数を生成
        printfDx("%d\n",GetRand(10000));
        printfDx("%d\n",GetRand(10000));
        printfDx("%d\n",GetRand(10000));
        ScreenFlip(); 
        WaitKey();                          //何かキー入力があるまで待つ
        DxLib_End() ;                       // DXライブラリ使用の終了処理
        return 0 ;                          // ソフトの終了
}

実行結果

→掲示板で質問する



- Remical Soft -