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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0525
ルシフもっと軽くカードをシャッフルしたい3解決


ルシフ

リンク

2012/5/25(Fri) 01:55:00|NO.46841

大アルカナを使ったタロット占いのソフトを制作中なのですが、
カードのシャッフルが重くて約1.2秒ほどかかります。
もっと軽くする方法はないでしょうか。


randomize ;カードの並び順です配列のインデックスが順番で中身が大アルカナの番号です。 dim card,22 ;乱数で生成したカードの順番が使用されているかチェックするのに使います。 dim num_ch,22 ;タロット占いなので正位置逆位置の判定もあります。 dim ord,22 repeat 22 wait 1 x=rnd(22) if num_ch(x)=1:continue cnt num_ch(x)=1 card(cnt)=x if rnd(2)=1:ord(cnt)=1:else:ord(cnt)=-1 loop



この記事に返信する


匿名希望

リンク

2012/5/25(Fri) 05:11:29|NO.46844

カードを毎回ランダムで選ぶと、重複した場合やり直しになってしまうので時間がかかります
(特に22枚目を選ぶ時は、既に21種類揃っているため、残りの1種類が出るまで繰り返しになります)
カードを全て揃えてから順番だけシャッフルすればいいでしょう

randomize dim card,22 dim ord,22 repeat 22 card(cnt) = rnd(22) ; まずすべてのカード(0〜21)を揃える ord(cnt) = rnd(2) ; 向き(0or1)を設定 loop // シャッフル repeat 22 idx = rnd(22) ; 入れ替え先の要素番号 buf = card(cnt) card(cnt) = card(idx) card(idx) = buf loop




ルシフ

リンク

2012/5/25(Fri) 09:46:34|NO.46848

ありがとうございます。
カードを揃える行のrnd(22)をcntにしたら上手く行きました。
ありがたく使わせて頂きます。



匿名希望

リンク

2012/5/25(Fri) 14:23:23|NO.46849

すみません
単純なミスでした

役に立ったようで何よりです



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