HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0101
freedrandomizeを使用してもランダムにならない5解決


freed

リンク

2013/1/1(Tue) 00:26:14|NO.51610


repeat 20 randomize:n=rnd(29) mes n loop

上記を実行すると同じ数字ばかりが表示されます。
randomizeのヘルプには「毎回まったく違う乱数を発生させることができます」とある
のですが、何が原因なのでしょうか?
よろしくお願いします。

期待している結果は、0〜28のランダムな数字です。



この記事に返信する


kanahiron

リンク

2013/1/1(Tue) 00:29:47|NO.51611

randomizeは基本的にはスクリプトの一番最初にしか使いません

randomize repeat 20 n=rnd(29) mes n loop



MillkeyStars

リンク

2013/1/1(Tue) 00:30:21|NO.51612

新年あけましておめでとうございます。今年もよろしくお願い申し上げます。

答えですが、ループする前に、randomize で初期化してみよう。
提示のスクリプトだと、ループ内で初期化してるので、常に同じになってしまう。
(正確には、ランダム初期化は、PCの時計で初期化してるので、ほぼ同じになってしまう。)


randomize repeat 20 n=rnd(29) mes n loop



やまぎ

リンク

2013/1/1(Tue) 01:52:33|NO.51613

あまりHSP歴は長くはないのですちなみに初投稿です
がランダム表示はできますけど少し複雑です参考になればうれしいです



x=20 randomize *main n=rnd(29) if n=z{ goto *main } z=n if x<=0{ goto *owari } x-1 mes n goto *main *owari mes "終わったよ"
適当に作ったのでしっかり動くかはわかりませんが
こんな感じでどうでしょうか?



freed

リンク

2013/1/1(Tue) 08:15:34|NO.51618

明けましておめでとうございます。
皆様、ご回答ありがとうございました。

>基本的にはスクリプトの一番最初
>ループする前に、randomize

なるほど・・・
どうもありがとうございました。

/*
チラ裏

ちなみに作ろうとしているもの↓

リストファイルがあって、(中身はaaa\nbbb\ncccなどの文字列+改行)
その中からランダムに2つ抽出して、別リストで保存(以下略
*/



(´ω`)

リンク

2013/1/6(Sun) 15:10:33|NO.51685

|ω゚ ) <解決済みなのでチラ裏情報ってことで。

randomizeは、初期値を指定しなければWindowsのタイマー値をシードに使います。
このタイマー、ごく短い周期でカウントアップしていますが、投稿主の最初のスクリプトでは
1ループがその周期未満で終わる程度の処理しかない(=タイマー値が変化するヒマがない)
ので、randomizeを何度やっても同じ値になるのです。

以下のソースで、awaitの値を1から順に上げて実行してみればわかるかと。
また、"await 1"の代わりに"wait 1"にすれば、期待通りの動作になります。(´ω`)


repeat 20 await 1 randomize n=rnd(29) mes n loop



ONION software Copyright 1997-2023(c) All rights reserved.