hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
Module/拡張乱数 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

Module

拡張乱数

何が拡張かは見てくれたら分かると思います。
名前を捻ったのはそのまま答えになるのもどうかと思ったからです。
rnd命令(2.61)と書式をそろえています。
乱数テーブルは以前rnd命令を使ったときの乱数の最大数の指定と異なると自動的に再構築するようになっています。
全ての乱数を出し切ると乱数ポインタ(ランダムポイント)を自動で初期化します。
これによって乱数範囲0〜4を10回のループで取得するとそれぞれ2回づつ同じ乱数が得られるというわけです。
任意のタイミングで乱数ポインタを初期化する命令も提供しています。
アルゴリズムは配列シャッフルと同じです。(というかこっちをあっちに応用した。)

モジュールスクリプト

filernx.as
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*
################################################################################
#                                                                              #
#                      重複のない乱数を生成するモジュール                      #
#                                                                              #
################################################################################
*/
 
#module "kz3rnx"
    ; ランダムポイントをリセットする
    #deffunc rnx_reset
        rnxp = brng
        return
 
    ; 重複しない乱数を得る
    #deffunc rndex val , int
        mref value , 16
        mref rng , 1
        mref res , 64
 
        if rng <= 0 : res = 1 : goto *@f
 
        if (brng = 0) | (brng ! rng){
            dim rnxtbl , rng
            repeat rng
                rnxtbl.cnt = cnt
            loop
            rnxp = rng
            brng = rng
        }
 
        rnd r , rnxp
        value = rnxtbl.r
 
        rnxp--
 
        tmp         = rnxtbl.r
        rnxtbl.r    = rnxtbl.rnxp
        rnxtbl.rnxp = tmp
 
        if rnxp = 0 : rnxp = rng
        res = 0
*@
    return
#global

サンプルスクリプト

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 
 
 
 
 
 
 
 
 
 
 
 
    #include "rnx.as"
    randomize
    repeat 3
        rndex a , 8
        mes a
    loop
    rnx_reset
    repeat 10
        rndex a , 5
        mes a
    loop
    stop

コメント

  • もう眠いので続きはまた今度ーー; -- kz3 2005-09-15 19:53:15 (木)
  • 乱数と言えばモンテカルロ法用疑似乱数 -- araran 2005-10-12 13:40:53 (水)
  • ニューメリカルレシピインC(NUMERICAL RECIPES in C)の乱数の章に「モンテカルロ積分」というものがありましたねぇ、内容は理解にいたりませんでしたが;; -- kz3 2005-10-13 08:33:40 (木)
  • とにかく同じパータンが出現しない素晴らしい乱数。としか理解してませんw 数学的になぜそうなるかとか難しすぎ。ただ数学的な理屈は抜きに移植して見るのは面白いかも。 -- araran 2005-10-13 14:13:58 (木)
  • あ、時間無くて、色々と中途半端なくせに、また無責任なこと言ってますね。僕w -- araran 2005-10-13 14:16:41 (木)
  • 改めてニュメリカル(略)を読む気になってきた、が今一番の興味は3Dなんですよねぇ^^;3D凄いですよ、ほんと・・・NEOZCの最新デモもいいですよ、動いてます!;; -- kz3 2005-10-13 14:51:17 (木)

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
filernx_sample.as
171件 [詳細]
filernx.as
388件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:31:27 (2436d)