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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1023
あと一息4解決


リンク

2017/10/23(Mon) 04:03:35|NO.81647

ルーレットが完成しそうなのですが、
ボタンの表示の開始位置と終了位置を乱数で決めるにはどうすればよいでしょうか。

title "LEDルーレット" ;タイトルの設定
#include "hspusbio.as" ;hspusbio プラグイン組み込み

;------------------ 変数等初期化 -------------------------------
randomize ;乱数発生の初期化
wait_c=500 ;待ち時間の設定(1=0.01s)

dim x,12 ;ボタンのX座標配列
dim y,12 ;ボタンのY座標配列
screen 0,400,300 ;画面の大きさを設定
x(6)=190 : y(6)=80
x(5)=220 : y(5)=89
x(4)=242 : y(4)=109
x(3)=250 : y(3)=140
x(2)=242 : y(2)=171
x(1)=220 : y(1)=191
x(12)=190 : y(12)=200
x(11)=159 : y(11)=191
x(10)=139 : y(10)=171
x(9)=130 : y(9)=140
x(8)=139 : y(8)=109
x(7)=159 : y(7)=89

;------------------ 点滅終了 -------------------------------
pos 350,270
objsize 45,25
button "終了", *eend


*disp
port=0 : gosub *test
stop
*test
x=1
repeat 7
objsize 20,20
byte=1 : pos x(1),y(1) : button "●", *eend : wait x : clrobj 1
byte=2 : pos x(2),y(2) : button "●", *eend : wait x : clrobj 1
byte=4 : pos x(3),y(3) : button "●", *eend : wait x : clrobj 1
byte=8 : pos x(4),y(4) : button "●", *eend : wait x : clrobj 1
byte=16 : pos x(5),y(5) : button "●", *eend : wait x : clrobj 1
byte=32 : pos x(6),y(6) : button "●", *eend : wait x : clrobj 1
byte=64 : pos x(7),y(7) : button "●", *eend : wait x : clrobj 1
byte=128 : pos x(8),y(8) : button "●", *eend : wait x : clrobj 1
byte=256 : pos x(9),y(9) : button "●", *eend : wait x : clrobj 1
byte=512 : pos x(10),y(10) : button "●", *eend : wait x : clrobj 1
byte=1024 : pos x(11),y(11) : button "●", *eend : wait x : clrobj 1
byte=2048 : pos x(12),y(12) : button "●", *eend : wait x : clrobj 1
x+=3
loop
return

*eend
end



この記事に返信する


暇人

リンク

2017/10/23(Mon) 18:51:05|NO.81656

>ボタンの表示の開始位置と終了位置を乱数で決めるにはどうすればよいでしょうか。
こんな感じ

*test x=1 sno=rnd(12) //スタートナンバー eno=rnd(12) //エンドナンバー pos 0,0 mes "sno="+sno mes "eno="+eno objsize 20,20 repeat 7 _cnt=cnt repeat 12 no=(sno+cnt)\12 byte=1<<no pos x(1+no),y(1+no) button "●", *eend oid=stat color 255 mes no color mes byte wait x clrobj oid,oid if _cnt=6 and no=eno {break} //最後の回転中でエンドナンバーと同じなら抜ける loop x+=3 loop return



はなたれ

リンク

2017/10/23(Mon) 21:00:49|NO.81659

こういう方法もあるよ(追加、変更部のみ抜粋)*test〜*eend間は置き換え

Nさんの貼り付けソースで気になった所
ボタンのX座標配列が、dim x,12
これだと x(0)〜x(11)なんだけど、ソース上では x(12)があるので
「dim x,13」にしておく方が分かりやすい
y座標の配列も忘れずに。

あと、ボタン表示のウェイトで「x」使っているので
これ変数名を変更しておく方が後々迷わないかも
x : x(0) X座標配列x(0)の値を使っているので、ちょっと怖いです。

以下、ソースはx,yの配列変数は「dim x,12」「dim y,12」のままで対応してます


〜 省略 〜 ; ルーレットの順番をrno配列(0〜11)に ; イメージとしては以下のような感じ ; rno(0) -------------------rno(11) ; 5,6,7,8,9,10,11,12,1,2,3,4 ; 10,11,12,1,2,3,4,5,6,7,8,9 ; dim rno,12 ; ルーレット回転インデックス用配列 ridx = rnd(12) ; 0〜11の値を取得 repeat 12 rno( cnt ) = ridx+1 ; +1 は、座標が配列の(1)〜入っている為 if( 11 <= ridx ){ ridx = 0 } else { ridx++ } loop ;------------------ 点滅終了 ------------------------------- 〜 省略 〜 *test ; 以下3行は、ルーレットの順番の配列内容確認の為表示 pos 0,0 mes " "+rno(0)+","+rno(1)+","+rno(2)+","+rno(3)+","+rno(4)+","+rno(5) mes " "+rno(6)+","+rno(7)+","+rno(8)+","+rno(9)+","+rno(10)+","+rno(11) x=1 objsize 20,20 ; ボタンのサイズ byte = 0 ; ルーレットの回転回数分ループ repeat 7 idx = 0 ; ボタンの数分のループ repeat 12 byte = 1 << cnt pos x( rno(cnt) ),y( rno(cnt) ) button "●",*eend wait x clrobj 1 loop x+=3 loop return 〜 省略 〜



はなたれ

リンク

2017/10/23(Mon) 21:04:51|NO.81660

ごめんなさい


repeat 7 idx = 0 ← このidxの行は不要です



N

リンク

2017/10/24(Tue) 16:10:52|NO.81667

ありがとうございます。



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