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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0309
名無しコレ以上短くできる方!!10解決


名無し

リンク

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

【追記】
短くではなく、文字数を減らすでした。コメントは含みません。



FPW

リンク

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なんて命令あったんですね。ありがとうございます。

注意書きも、参考になりました。

引き続き、募集します。



kamep

リンク

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を使いました。
お題に合ってなかったらすみません



cats

リンク

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

おお!横線が近すぎないようにする方法探してたんですよね><
これに、他の方が紹介してくれた様々な機能をつけてみます!!
本当に皆様、ありがとうございました。



Michelin

リンク

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



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