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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0223
うにランダム化した数字を重ならないように表示するには5解決


うに

リンク

2014/2/23(Sun) 09:44:38|NO.60211

初心者の質問で申し訳ありませんが…

1〜25の画像を5×5で並べたいのですが、
上手いこといかずに困っております

celload "ball64.png",1 ; HSP入門より
celdiv 1,64,64,
randomize

repeat 25
pos i \ 5 * 64, i / 5 * 64 : celput 1,rnd(25)+1
i++
loop

これだと、いくつか同じ数字が表示されてしまいます。
トランプを配るように、5×5のマスにランダムに配置するようにしたいのですが、
その方法が分かりません。

どなたかご教授願います



この記事に返信する


ZAP

リンク

2014/2/23(Sun) 10:38:06|NO.60212

考え方を示すと、

・あらかじめ1〜25の数字を入れた配列変数を用意する
・適当な回数のループ内で、無作為に選んだ2つの配列の内容を入れ替える。
・その後、画像をマスに配置する。



あり

リンク

2014/2/23(Sun) 10:40:54|NO.60213

方法は幾つかありますが、配列に入れた番号の順番を入れ替える
方法が一番シンプルだと思います。

goto *@f #deffunc swap var _p1, var _p2, local tmp ; 変数の入れ替え命令 tmp = _p1 : _p1 = _p2 : _p2 = tmp return *@ celload dir_tv + "\\hsptv_img.bmp",1 ; HSPTV用画像 celdiv 1,64,64, randomize repeat 25 ; キャラクター数分の番号を配列に確保 c_no(cnt) = cnt loop repeat 100 ; 100回シャッフルする repeat 25 ; 番号を入れ替える swap c_no(cnt), c_no(rnd(25)) loop loop pos 360, 0 : mes "最初の番号  並び替えた番号" repeat 25 pos i \ 5 * 64, i / 5 * 64 : celput 1, c_no(cnt) + 40 i++ pos 400, cnt * 16 + 16 : mes "" + cnt + "\t\t" + c_no(cnt) loop



うに

リンク

2014/2/23(Sun) 11:10:22|NO.60215

ZAPさん
ありがとうございます
まずはそれを表現するためのスクリプトを調べたいと思います

ありさん
ありがとうございます
コピペしてビックリしました笑
これを一つずつ理解できるようになりたいと思います



denko

リンク

2014/2/23(Sun) 11:20:19|NO.60216

適当な回数入れ替えるのもいいですが、25回でちゃんとシャッフルすることもできます。
数字のシャッフルは意外と短いアルゴリズムでできるので覚えとくといいです。


celload dir_exe+"\\sample\\hgimg4\\res\\ball64.png",1 celdiv 1,64,64, randomize dim no,25 ;0〜24をシャッフル repeat 25 r=rnd(cnt+1) no(cnt)=no(r) no(r)=cnt loop repeat 25 pos cnt \ 5 * 64, cnt / 5 * 64 celput 1,no(cnt)+1 loop



うに

リンク

2014/2/23(Sun) 11:35:25|NO.60218

denkoさん
ありがとうございます
また、すっきりとしたスクリプトですね
参考にさせて頂きます!



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