http://antares.cn/hsp/sample/index.html#tournament より。
http://antares.cn/hsp/sample/index.html#tournament より。
; #ifdef __hsp30__ #define objselstr(%1,%2,%3) vvv=%3: sendmsg objinfo(%1,2),177,%2,varptr(vvv) #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