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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1023
シャイン・ライトクイズ作っているのですが・・・8未解決


シャイン・ライト

リンク

2008/10/23(Thu) 22:25:16|NO.20412

自分はHSP3を使ってクイズゲームを作っているのですが、
問題をランダムに出題する命令を出していますが、
同じ問題が2,3回出てきたり、連続で同じ問題が出てきたりします。
一応、一回で10問出すという形で作っているのですが、
同じ問題が出てこないようにするのはどうすればいいですか?
教えてください。お願いします!!



この記事に返信する


SYAM

リンク

2008/10/23(Thu) 22:51:51|NO.20413

過去ログの NO.5987 を参照してみてください。



シャイン・ライト

リンク

2008/10/23(Thu) 23:42:22|NO.20415

返信有難うございました
過去ログにいってきましたが、
確かに重複なくランダムされる命令が書かれていました
しかし、それを参考についさっき、作成しましたがやはり重複が出てきました。
念のために、クイズを出題するコマンドを
下記に表記しましたので。これを見てどこをどう変えればよろしいか
教えてください。よろしくお願いします


*quizrandom ;はじめ
mmplay 11
cls
music=rnd(5)
if music=0 : mmplay 4
if music=1 : mmplay 5
if music=2 : mmplay 6
if music=3 : mmplay 7
if music=4 : mmplay 8


ss=ss+1 ;問題数
ct=30 ;時間初期化
if ss=11 : goto *owari
ger=rnd(10)
da=rnd(3)
if da=0 : rar="Question.txt"
if da=1 : rar="Question2.txt"
if da=2 : rar="Question3.txt"
sdim pop,100000
bload rar,pop
notesel pop
sdim mon,50,4
sdim kota,50,4
noteget mon.0,ger*8
noteget mon.1,ger*8+1
noteget mon.2,ger*8+2
noteget mon.3,ger*8+3
noteget kota.0,ger*8+4
noteget kota.1,ger*8+5
noteget kota.2,ger*8+6
noteget kota.3,ger*8+7



SYAM

リンク

2008/10/23(Thu) 23:58:33|NO.20416

その ついさっき作成した というものはどこですか……??
これだと、過去ログを参考にしてできたような部分が何一つ入っていないと思うんですが…。


※ちなみに、これだとbloadよりもnoteloadのほうが便利かもしれませんね。



SYAM

リンク

2008/10/24(Fri) 00:10:14|NO.20417

ほぼ答えだと思います。


max=20 sdim q,16,max repeat max q(cnt)="問題"+(cnt+1) loop dim qn,max repeat max tmp1=rnd(cnt+1) qn(cnt)=qn(tmp1) qn(tmp1)=cnt loop repeat max mes q(qn(cnt)) repeat stick k if k : break wait 1 loop loop



シャイン・ライト

リンク

2008/10/24(Fri) 00:27:32|NO.20418

先ほど、下記の内容で実行することができました。
bloadをnoteloadに置き換えましたら、「パラメータの方が違います」というエラーが発生しました
この状態で後は重複を防ぐだけなんです。


*quizrandom ;はじめ

     (中略)

randomize

max=10;問題数
repeat 10
b=rnd(cnt+1)
a(cnt)=a(b)
a(b)=cnt
loop

foreach a
mes a(cnt)
loop
ss=ss+1 ;問題数
ct=30 ;時間初期化
if ss=11 : goto *owari
ger=rnd(10)
da=rnd(3)
if da=0 : rar="Question.txt"
if da=1 : rar="Question2.txt"
if da=2 : rar="Question3.txt"
sdim pop,100000
bload rar,pop
notesel pop
sdim mon,50,4
sdim kota,50,4
noteget mon.0,ger*8
noteget mon.1,ger*8+1
noteget mon.2,ger*8+2
noteget mon.3,ger*8+3
noteget kota.0,ger*8+4
noteget kota.1,ger*8+5
noteget kota.2,ger*8+6
noteget kota.3,ger*8+7



SYAM

リンク

2008/10/24(Fri) 00:40:51|NO.20419

命令の名前だけ書き換えましたね…?
noteload命令の説明を読まないと駄目ですよ。
そしたら sdimで無駄に大きなメモリを確保しないでよくなります。
※bloadで作るにしても、exist命令を併用すれば無駄に大きく確保しなくてよくなります。

それと、
せっかく並べ替えをした配列 a をまったく使っていませんね。。
多分、質問される前と何にも変わっていないのでは…?



シャイン・ライト

リンク

2008/10/24(Fri) 20:34:54|NO.20424

あの…その配列aというものはなんでしょうか?



SYAM

リンク

2008/10/24(Fri) 21:05:15|NO.20426

失礼ながら…
「配列」とは何かを、まず理解していますか?
解っていたら、 a という配列をひとつ用意していることは容易にわかると思うのです。

…というか、知らなかったら元のスクリプトも書けてませんよね。
しかしそれなら、一体どこがどう分からないのでしょう…??


また、
質問されたことについてですが、一つたとえ話をします。

「変数に数値を代入するスクリプトを作っています。
この変数に代入された数値を表示するにはどうしたらいいですか」

…という質問があったとして、



hensuu = 123456 mes hensuu
……のようにすればいいですよ



という回答があったとします。
そこで質問者が、このようなスクリプトを書きました。



a=1 b=1 c=a+b hensuu = 123456 mes hensuu
hensuuの内容は確かに表示されましたが、c の内容が表示されません!



…明らかに、おかしいですよね?
せっかく、表示する仕組みを手に入れたのに、それを自分のスクリプトで使っている変数に対して使っていません。
しかし、今まさにこれとまったく同じことになっています。


すみませんが、
・配列変数を知っているかどうか
…を答えてください。それによって、「適切な回答」がガラッと変わっちゃうので…。



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