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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0910
みそ汁にあんこ表示する画像の抽選3解決


みそ汁にあんこ

リンク

2021/9/10(Fri) 11:28:43|NO.93827

3種類の画像(A,B,C)を合計16回表示します。
順序はランダムで、Aは4回、Bは4回、Cは8回表示されるようなプログラムを作ろうとしてみました。

repeat 3 // 画像読み込み buffer cnt+10 picload "A\\"+str(cnt)+".jpg" pic_x(cnt) = ginfo_winx pic_y(cnt) = ginfo_winy loop // 乱数割り当て dim a,16 dim x,16 a = rnd(16) #define tex "終了です" screen 1, ginfo_dispx, ginfo_dispy foreach a x(cnt) = a(cnt) if (x(cnt) <= 3) { gosub *gazouA } else : if (x(cnt) >= 4 and x(cnt) <= 7) { gosub *gazouB } else { gosub *gazouC } repeat getkey Ent, 13 if Ent = 1 : break await 10 loop cls 0 await 1500 loop goto *owari *gazouA pos ginfo_dispx/2-pic_x/2, ginfo_dispy/2-pic_y/2 gzoom 800, 427, 10, 0, 0, pic_x, pic_y, 0 return *gazouB pos ginfo_dispx/2-pic_x/2, ginfo_dispy/2-pic_y/2 gzoom 800, 427, 11, 0, 0, pic_x, pic_y, 0 return *gazouC pos ginfo_dispx/2-pic_x/2, ginfo_dispy/2-pic_y/2 gzoom 800, 427, 12, 0, 0, pic_x, pic_y, 0 return *owari cls 0 font msGothic, 80, 1 pos ginfo_dispx/2-(strlen(tex)*(80/2))/2, ginfo_dispy/2 mes tex stop
上記の通りにしてみたのですが、2回目以降同じ画像が表示され続けてしまいます。
どこが問題なのでしょうか。

もっとスマートな方法があれば、そちらも教えていただけると喜びます。

よろしくお願いいたします。



この記事に返信する


トノ

リンク

2021/9/10(Fri) 13:51:58|NO.93828


a = rnd(16)
というのは、1 個の数値を配列 a の最初の要素に代入しているだけで、
a の他の要素には何も代入されないのではないかと。



沢渡

リンク

2021/9/10(Fri) 15:00:36|NO.93829

「"0"というクジが4枚、"1"というクジが4枚、"2"というクジが8枚」という合計16枚のクジを作り、
その順番をシャッフルした上で、上から順にクジを引いてゆけば良いのでは。

#define swap(%1,%2) _swap_=%1 : %1=%2 : %2=_swap_ //「swap p1,p2」でp1とp2で指定した変数の中身を入れ替える repeat 3 // 画像読み込み //画像ファイルがないので仮の画像を作ります buffer cnt+10,800,427 if cnt=0 : color 255,0,0 : else : if cnt=1 : color 0,255,0 : else : color 0,0,255 boxf //buffer cnt+10 //picload "A\\"+str(cnt)+".jpg" pic_x(cnt) = ginfo_sx pic_y(cnt) = ginfo_sy loop randomize // 乱数割り当て dim a,16 a=0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2 //「くじ」をセット //くじをシャッフルする repeat 16 z=rnd(16-cnt)+cnt swap a(cnt),a(z) loop #define tex "終了です" screen 1, ginfo_dispx, ginfo_dispy foreach a pos (ginfo_dispx-800)/2,(ginfo_dispy-427)/2 gzoom 800, 427, 10+a(cnt), 0, 0, pic_x(a(cnt)), pic_y(a(cnt)), 0 repeat getkey Ent, 13 if Ent = 1 : break await 10 loop cls 0 await 1500 loop cls 0 font msGothic, 80, 1 pos ginfo_dispx/2-(strlen(tex)*(80/2))/2, ginfo_dispy/2 mes tex stop



みそ汁にあんこ

リンク

2021/9/10(Fri) 18:39:42|NO.93832

トノ様、沢渡様
お二方とも回答ありがとうございます。

変数に代入するところから失敗していたのですね、、無念です。
くじをシャッフルして引くやり方がいい感じに思えたので参考にさせていただきます。

ありがとうございました。



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