HSPのテスト

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