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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1001
msmトーナメント方式8解決


msm

リンク

2008/10/1(Wed) 18:54:59|NO.19907

line命令を使い、トーナメントの図を描きたいと思っているのですが、
うまく書く方法が思いつきません・・
もし、トーナメントのチーム数が4の倍数とかだったら、うまくできると思うのですが、
それ以外の場合はどのようにしたらいいのかわかりません・・・
トーナメントのチーム数を
kazu=数字
として好きな数字を入れたらトーナメントの図をかけるようにするにはどのようにすればいいでしょうか?
すこし説明が大雑把で申し訳ありません・・
またトーナメントは↓のように横向きにしたいのですが・・・

_
_|―
_  |ー
_|―


なにかアドバイスがあればお願いします!
   



この記事に返信する


ANTARES

リンク

2008/10/2(Thu) 00:01:51|NO.19913

 それを考えるのがプログラミングの醍醐味なのに、人に聞いてどうする。
それとも、やらされることになっただけで、やりたいわけじゃない?

>もし、トーナメントのチーム数が4の倍数とかだったら、うまくできると思うのですが、
2のn乗だったらでしょう。
12チームでもできる?

ヒントとしては、チーム数以上で最小の2のn乗からチーム数を引いた値の
チームを不戦勝にすればいいです。

2のn乗だったらできると思うのなら、まず、それを書いてみましょう。
それによってわかることがあるはずです。


1┬2┬4┬8  │ │ └9  │ └5┬10  │   └11  └3┬6┬12    │ └13    └7┬14      └15



ANTARES

リンク

2008/10/2(Thu) 03:44:04|NO.19919

 思いっきり手抜きの仕様です(^_^;;

 HSP3ってウィンドウにスクロールバーが出せないんですね。
しょうがないので、HSP2でも動くようにしときます。

#ifdef __hsp30__ #define objselstr(%1,%2,%3) vvv=%3: sendmsg objinfo(%1,2),177,%2,varptr(c) #define getact(%1) %1=ginfo_act #else #define ginfo_dispx dispx #define ginfo_dispy dispy #define objselstr(%1,%2,%3) vvv=%3: objsend %1,177,%2,vvv,1 #define getact(%1) ginfo 1: %1=prmx #endif fsize=8 pos 4,8: mes "チーム数:" pos 88,4: input nteam pos 4,32: button "表示", *l_disp objsel 0: objselstr 0,0,-1 *l_loop repeat: wait 10 getact act if act==0 { stick key,,1 if key==32:break } if act!=act2 { if act==0 { gsel 0 objsel 0 c=-1 objselstr 0,0,-1 } act2=act } loop *l_disp if nteam<2: dialog "チーム数は2以上にしてください。": goto *l_loop beki=1 nbeki=0 repeat beki=beki*2 nbeki++ if beki>=nteam: break loop marg=4 w2=fsize+marg wid=beki*w2 if wid<128: wid=128 ;HSPのバグ回避 heit=(nbeki+1)*16 if wid>ginfo_dispx { screen 2,wid,heit,,0,(ginfo_dispy-heit)/2,ginfo_dispx-6,heit } else { screen 2,wid,heit,,(ginfo_dispx-wid)/2,(ginfo_dispy-heit)/2 } fusen=beki-nteam fusen2=fusen nw=beki bk=1 iv=0 y=0 ww=nw*w2-marg repeat nbeki ;縦線 gosub *l_vert nw=nw/2 ww=nw*w2-marg ;横線 gosub *l_hor bk=bk*2 iv++ y+=16 loop ;縦線 gosub *l_vert2 goto *l_loop ;縦線 *l_vert x=ww/2 repeat bk line x,y,x,y+15 x+=nw*w2 loop return ;縦線2 *l_vert2 x=ww/2 repeat bk if cnt\2 { ;奇数のとき if fusen<1 { line x,y,x,y+15 } else { c=fsize/2 line x-c-2,y-1,x-c-2,y+15 fusen-- } } else { ;偶数のとき if fusen<1 { line x,y,x,y+15 } } x+=nw*w2 loop return ;横線 *l_hor x=ww/2-1 repeat bk if nw>1 | (fusen2<1) { line x,y+16,nw*w2+x+1,y+16 } if nw==1: if fusen2: fusen2-- x+=nw*w2*2 loop return



begriff

リンク

2008/10/2(Thu) 04:18:20|NO.19920


   ┌───┴───────┐  ┌─┴─┐     ┌───┴───┐ ┌┴┐ ┌┴┐  ┌─┴─┐   ┌─┴─┐  │ │ │ │ ┌┴┐ ┌┴┐ ┌┴┐ ┌┴┐
ではなく

   ┌───────┴───┐  ┌─┴───┐     ┌─┴───┐ ┌┴┐  ┌─┴─┐  ┌┴┐  ┌─┴─┐  │ │ ┌┴┐ ┌┴┐ │ │ ┌┴┐ ┌┴┐
の方が良いかもしれません。



ANTARES

リンク

2008/10/2(Thu) 06:43:02|NO.19923

いやあ、やっぱり

    ┌────┴────┐  ┌──┴──┐   ┌──┴──┐ ┌┴┐   ┌┴┐ ┌┴┐   ┌┴┐ │┌┴┐ ┌┴┐│ │┌┴┐ ┌┴┐│
でしょう。(←お前が言うな)



msm

リンク

2008/10/2(Thu) 16:15:11|NO.19927

ANTARESさんへ
サンプルのスクリプトありがとうございました!!
スクリプトを読み直して、応用してがんばってみたいとおもいます!!



S&R

リンク

2008/10/5(Sun) 14:55:52|NO.19962

>それを考えるのがプログラミングの醍醐味なのに、人に聞いてどうする。
人に聞いてばっかりな人は醍醐味すら知ることができないんだよ
ハッキリいって他力本願な方はプログラミングというプログラムを作る側には向いてない。
プログラムを使う側にいればいい。っていうか作る側の人間は作らせる人間が嫌いなんだよいつの時代も。



SYAM

リンク

2008/10/5(Sun) 16:04:02|NO.19965

チョイと雑談に便乗。

>作る側の人間は作らせる人間が嫌い

以前、どっかで
「プログラムを知らない人間は、プログラマーをムカつかせる術に長けている」
…っていう旨の文を見て、なるほどナと思いましたよ。
#労力を知らないから好きなことが言えてしまう…というのが、最大の要因でないかと。

もっとも、
ムカついたところでどうするか…は、プログラマとしてでなく人間としての出来不出来の問題ですナ。



S&R

リンク

2008/10/6(Mon) 06:17:51|NO.19977

むかついたからどうするかで人間としての出来不出来を決めるかが人間としての出来不出来の問題ですナ



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