乱数について良く分からないので質問させていただきます。
現在作成しているゲームはターン性ゲームで、サイコロなどの運が絡む要素をいくらか含んでいます。
また、データの作成時にrandomizeを一度実行しています。
また、将棋の待ったのように、ターンを一つ前に戻せるシステムも作成しました。
そこで、例えば3ターン目開始時ににサイコロを振り、その結果が2なのなら、4ターン目以降から3ターン目に戻りまた最初にサイコロを振ったら2が出るようにしたいです。
どうにかして乱数の結果を確定させる方法はありますか?
配列などですべて保存する方法以外だとありがたいです。
d89de96609
program_suck
通報 ...
一つ前だけに戻るのであれば、一つ前のサイコロの結果を保存するというのはどうでしょうか
GameMakerで使う乱数は、「疑似乱数」となるので、乱数生成器にrandom_set_seed()で乱数の種を入れて、random()を呼ぶたびに出てくる数字の順番は毎回同じです。
random_set_seedを自発的に記述していない場合でも、内部的にrandom_set_seed(0)で乱数生成を行っているようです。
randomize() or randomise()を呼び出したときは、乱数の種に入れる数字を作り、random_set_seed()にその種を入れるようになっています。
歴史を遡って同じ乱数の値をとるためには、「データの作成時」にrandomizeを呼び出した後、random_get_seed()を使い、乱数の種を取得し、セーブデータや一時データに保管しておく。
その後、randomを使うときは、何回使ったかの回数を保管しておく。
セーブデータロードや戻るコマンド?などで3ターン目や2ターン目に戻ったときは、保管しておいた乱数の種をrandom_set_seed(種の数字)でリセットして、使った回数分randomize()呼び出しを行う。
すると、同じ乱数を取得することができます。
まとめると、
▼メイン処理
randomize()←最初の一回だけ
乱数の種変数「保管する」=random_get_seed()
▼乱数を使うとき
random(数字)
randomを呼び出した回数変数++「保管する」
▼元に戻したいとき
random_set_seed(乱数の種変数)
randomを呼び出した回数変数をループなどでまわして「random(00)」繰り返し呼ぶ
1つ前の乱数を使いたいのでループは「randomを呼び出した回数変数-1」にすればよいと思います。
保管しておくデータは
・乱数の種
・randomを呼び出した回数
だけで同じ乱数を取得できます。