|
|
2012/3/9(Fri) 14:48:50|NO.45296
あみだくじを作ってみました。出来る限り文字数を減らしたいのですが
これよりも効率の良い処理方法ってありますか?これより短くできる方、
ソースを載せてください!下に自分が作ったソースを載せておきます。
名前1="Aさん":名前2="Bさん":名前3="Cさん":名前4="Dさん"//名前を代入(代入で合ってるのかな?w)
1位="1位":2位="2位":3位="3位":4位="4位":縦=100//順位を代入(代入で合ってるのかな?w)
pos 410,50:mes"線と線があまりに近すぎる場合\nもう線をもう1度書くことを\nオススメします"//注意書き
pos 77,0:input 名前1,50,20,10//名前
pos 177,0:input 名前2,50,20,10//名前
pos 277,0:input 名前3,50,20,10//名前
pos 377,0:input 名前4,50,20,10//名前
pos 77,460:input 1位,50,20,10//順位
pos 177,460:input 2位,50,20,10//順位
pos 277,460:input 3位,50,20,10//順位
pos 377,460:input 4位,50,20,10//順位
pos 0,0
button goto"線を書く",*スタート//スタート
stop//ストップ
*スタート
redraw 0//画面のチラツキ防止
color 255,255,255:boxf 0,100,400,500//横線を1度、塗りつぶす
color 0,0,0//色を黒に戻す
randomize//乱数発生の初期化
repeat 4
line 縦,0,縦,600//縦線を100ずらして4本描画
縦+100
loop
縦=100//数値を下に戻す
repeat 3//3本横線を描画
高さ1=rnd(300)+100:line 100,高さ1,200,高さ1//横線を描画
高さ1=rnd(300)+100:line 200,高さ1,300,高さ1//横線を描画
高さ1=rnd(300)+100:line 300,高さ1,400,高さ1//横線を描画
loop
redraw 1//画面のredraw防止
|
|
2012/3/9(Fri) 14:49:36|NO.45297
【追記】
短くではなく、文字数を減らすでした。コメントは含みません。
|
|
2012/3/9(Fri) 15:06:50|NO.45299
HSP(に限りませんが)には"配列変数"というものが用意されています。
調べると詳しく説明しているサイトが沢山あると思いますので見てみることをおすすめします。
例えば
名前1="Aさん":名前2="Bさん":名前3="Cさん":名前4="Dさん"
・・・
pos 77,0:input 名前1,50,20,10//名前
pos 177,0:input 名前2,50,20,10//名前
pos 277,0:input 名前3,50,20,10//名前
pos 377,0:input 名前4,50,20,10//名前
を短くしたいならば
名前.0="Aさん":名前.1="Bさん":名前.2="Cさん":名前.3="Dさん"
・・・
repeat 4
pos 77+cnt*100,0:input 名前.cnt,50,20,10
loop
と書けばよいです。
「cnt」については、ヘルプの「repeat命令」の項を見てください。
この要領でほかの箇所も同様に短くしていくことができます。
配列変数は今後欠かせない存在となるので使いこなせるようにしておくことをおすすめします。
【注意】
スクリプトを掲載する際は小文字の<pre>と</pre>で囲むと見やすく青文字で
表示されるので活用しましょう。
てか「募集」になってるけどこの返信でいいのかな・・・;
|
|
2012/3/9(Fri) 15:44:47|NO.45300
cntなんて命令あったんですね。ありがとうございます。
注意書きも、参考になりました。
引き続き、募集します。
|
|
2012/3/9(Fri) 16:41:05|NO.45301
文字数が少なくなったか不安ですが、機能を増やしてみました。
人数の値を増やすと、その人数分あみだくじが作られます。
横線を増やすとあみだくじの横線が増えます。
人数=4 :横線=3
screen 0,limit(77+人数*100,640,ginfo_dispx)
sdim 名前,5,人数 :sdim 位,3,人数
repeat 人数
a=65+cnt
名前(cnt)=""+cnvwtos(a)+"さん"
位(cnt)=""+(cnt+1)+"位"
pos 77+cnt*100,20 :input 名前(cnt),50,20,10
pos 77+cnt*100,460 :input 位(cnt),50,20,10
loop
pos 0,0 :button "線を書く",*スタート
*スタート
randomize
redraw 2
color 255,255,255 :boxf :color
repeat 人数 :line (cnt+1)*100,40,(cnt+1)*100,460 :loop
repeat 横線 :repeat 人数-1
高さ1=rnd(300)+100 :line 100+cnt*100,高さ1,200+cnt*100,高さ1
loop :loop
pos 70,0 :mes"線と線があまりに近すぎる場合、もう線をもう1度書くことをオススメします"
redraw 1
FPWさんのように配列変数とcntを使いました。
お題に合ってなかったらすみません
|
|
2012/3/9(Fri) 17:04:21|NO.45303
あまり短くならなかったですけど・・・
randomize //乱数は初めに初期化しておく
sdim 名前,128,4 ;[名前]に入る分を確保
名前="名前1","名前2","名前3","名前4" ;名前1を呼びたいときは[名前.0]、名前2のときは[名前.1]・・・のように使える。
縦=100 :X=77 :A=0
pos 410,50:mes"線と線があまりに近すぎる場合\nもう線をもう1度書くことを\nオススメします"//注意書き
repeat 4 ;4つの名前があるので4回繰り返す
pos X,0 :input 名前.cnt,50,20,10 :X=int(X)+100 ;名前はいくらでも使える
loop :X=77
repeat 4
A=int(A)+1 :位=""+A+"位" //位を決める
pos X,460 :input 位,50,20,10 :X=int(X)+100
loop
pos 0,0 :button goto"線を書く",*スタート
stop//ストップ
*スタート
redraw 0
color 255,255,255:boxf 0,100,400,500 :color 0,0,0//色を黒に戻す
repeat 4
line 縦,0,縦,600 :縦=int(縦)+100
loop :縦=100 :HIGH=0
repeat 9
HIGH=int(HIGH)+100 :高さ1=rnd(300)+100:line HIGH,高さ1,int(HIGH)+100,高さ1//横線を描画
if HIGH=300 :HIGH=0
loop
redraw 1
http://lhsp.s206.xrea.com/command/sdim.html
に書いてある命令を使いました。
|
|
2012/3/9(Fri) 17:19:06|NO.45306
kamepさん
すごい!ありがとうございました。やはり上には上がいるんですね・・・
catsさん
わざわざURLまで、ありがとうございます。コメントもたくさん・・・すごく参考になりました!
|
|
2012/3/9(Fri) 19:42:30|NO.45310
kamepさんのスクリプトを引用させてもらい、
横線が近すぎないようにする機能をつけました。
※横線が多すぎるor間隔が広すぎると終了しない場合があります。
人数=5 :横線=3 :間隔=10 :人=人数-1
screen 0,limit(77+人数*100,640,ginfo_dispx)
sdim 名前,5,人数 :sdim 位,3,人数
repeat 人数
a=65+cnt
名前(cnt)=""+cnvwtos(a)+"さん"
位(cnt)=""+(cnt+1)+"位"
pos 77+cnt*100,20 :input 名前(cnt),50,20,10
pos 77+cnt*100,460 :input 位(cnt),50,20,10
loop
pos 0,0 :button "線を書く",*スタート
*スタート
title "アミダ作るよ。"
randomize :dim 高さ,人*横線 :redraw 2
color 255,255,255 :boxf :color
repeat 人数 :line (cnt+1)*100,40,(cnt+1)*100,460 :loop
//redraw 1 ;横線確認用
repeat 人*横線
temp=rnd(300)+100
repeat cnt+1
await 5:if abs(temp-高さ(cnt)) < 間隔 :temp=rnd(300)+100 : continue 0
loop
高さ(cnt)=temp :line cnt\人*100+100,temp,cnt\人*100+200,temp
//wait 20 ;横線確認用
loop
title "アミダ出来たよ。"
redraw 1
文字数は減らないなぁ。
|
|
2012/3/9(Fri) 20:15:14|NO.45315
おお!横線が近すぎないようにする方法探してたんですよね><
これに、他の方が紹介してくれた様々な機能をつけてみます!!
本当に皆様、ありがとうございました。
|
|
2012/3/11(Sun) 09:04:17|NO.45357
募集終わっちゃったみたいですが
あみだくじの線の間隔をいい感じにできないですが
名前の入力ボックス付近にマウスポインターを置くと
自動的に結果を表示してくれる機能をつけてみました。
汚いスクリプトですが、貼ってみます。
皆さんのスクリプトも参考にさせていただきました。
randomize
sdim Name ,5,5
sdim Rank ,3,5
dim LineposX ,4,5;LineposX(列,行)
dim LineposY ,4,5;LineposY(列,行)
repeat 5
Name(cnt) = "名無し"
pos 77+cnt*100,0:input Name(cnt),50,20,10 //名前
loop
repeat 5
A = cnt+1
Rank(cnt) = ""+A+"位"
pos 77+cnt*100,460:input Rank(cnt),50,20,10 //順位
loop
pos 0,0:button goto"線を書く",*Start //スタート
stop
*Start
color 255,255,255
boxf
color
T = 0
repeat 4
A = 100*T
LineposY(T,0) = rnd(25)+20
C = 1
repeat 4
LineposX(T,C) = 100+A
LineposY(T,C) = LineposY(T,C-1) + rnd(100)+15
if T ! 0 :if LineposY(T-1,C) = LineposY(T,C):LineposY(T,C) + 1
C++
loop
T++
loop
repeat
redraw 0
color 255,255,255
boxf
color
T = 0
repeat 4
A = 100*T
line A+100,0,A+100,480
C = 1
repeat 4
line LineposX(T,C),LineposY(T,C),LineposX(T,C)+100,LineposY(T,C)
C++
loop
T++
loop
line 500,0,500,480
T = 0
repeat 5
A = T*100
if mousex > A+50 :if mousex < A+150 :if mousey > 0 :if mousey < 30{
Y = 0
X = A+100
YR = 0
XR = A+100
repeat
color 255
owata = 0
TT = 0
repeat 4
C = 1
repeat 4
if Y = LineposY(TT,C) :if X = LineposX(TT,C)+100{
line XR,YR,X,Y
line X,Y,X-100,Y
X - 100
YR = Y
XR = X
owata = 1
break
}
if Y = LineposY(TT,C) :if X = LineposX(TT,C){
line XR,YR,X,Y
line X,Y,X+100,Y
X + 100
YR = Y
XR = X
owata = 1
break
}
C++
loop
TT++
If owata = 1:break
loop
if Y >= 480:line XR,YR,X,Y :break
Y ++
loop
}
T++
loop
redraw 1
await 0
loop

| |
|
2012/3/11(Sun) 10:14:12|NO.45358
すご・・・・ありがとうございましたm(__)m
|
|