sample02.hsp

sample\hspycp\02_基本2\sample02.hsp » Plain Format

#include "hspycp.as"

	// 
	gosub *blockInit

	ycp_Open "HSPDSC_CaptureSource_Data", "HSPDSC_CaptureSource_Write", "HSPDSC_CaptureSource_Read"
	devId = stat

	fps = 30

	avgTimePF = 1000 / fps	// fps
	font "メイリオ", 64, 16
	mref vram, 66
	repeat

		// 描画したい内容
		;pos 0, 0 : color 255, 0, 0
		;boxf : color
		;mes cnt
		gosub *blockDraw
		
		ycp_Send devId, cnt, fps, 640, 480, vram
		if stat < 0{
			dialog "エラーが発生しました"
			break
		}else : if 0 == stat{
			title "正常動作中"
		}else{
			title "待機中..."
		}
		
		await avgTimePF
		
	loop
	ycp_Close devId

stop
*blockInit
	;
	;	ブロック崩し(3)
	;	(ボール・バー・ブロック表示します)
	;
	x1=0:y1=0		; 画面左上の座標
	x2=640:y2=480		; 画面右下の座標

	clrflag=0		; クリアフラグ

	blsize=16		; ボールのサイズ
	blspd=10		; ボールのスピード
	blx=300:bly=240		; ボールの座標
	bpx=4:bpy=4		; XY方向のボール座標加算値
	bk=0			; ブロックを崩すフラグ(1=崩す)
	mblsize=-blsize

	barsize=64		; バーのサイズ
	barx=0:bary=440	; バーの座標

	barhalf=barsize/2
	blhalf=blsize/2

	wx=5:wy=100		; ブロックの表示開始位置(左上)
	wsx=15:wsy=8		; ブロックの配置数(X,Y)
	wpx=x2/wsx:wpy=16	; ブロック1個あたりのサイズ

	dim wall,wsx,wsy	; ブロックを表示するフラグ
				; 0=表示、1=表示しない
return

*blockStart

return

*blockDraw
	redraw 0
	gradf 0,0,x2,y2,1,0,128	; 画面クリア

	; バー : マウス座標から位置を決定
	barx=mousex-barsize/2
	color 255,255,255
	boxf barx,bary,barx+barsize,bary+16

	; ボール : X方向の移動
	blx=blx+bpx
	if blx<=x1 : blx=x1 : bpx=-bpx
	if blx>=(x2-blsize) : blx=x2-blsize : bpx=-bpx

	; ボール : Y方向の移動
	bly=bly+bpy
	if bly<=y1 : bly=y1 : bpy=blspd : bk=1 : blspd=16
	if bly>=(y2-blsize) : gosub *gameover

	; ボールとバーがぶつかったかどうか調べます
	coly=bly+blsize
	if (coly>=bary)&(bly<(bary+16)) {	; ボールY座標のチェック
		; ボールX座標のチェック
		colx=blx+blhalf
		x=barx+barhalf
		if abs(colx-x)<(barhalf+blhalf) {
			bly=bary-blsize : bpy=-blspd
			i=(colx-x)/4
			if i!=0 : bpx=i
			bk=1
			if clrflag {
				dim wall,wsx,wsy	; ブロックを復活させる
				clrflag=0
			}
		}
	}

	; ブロックの処理
	colx=wpx+bsize
	coly=wpy+bsize
	left=0
	repeat wsy
	cy=cnt
	y=cnt*wpy+wy
	hsvcolor cnt*10,255,255
	repeat wsx
		cx=cnt
		x=cnt*wpx+wx
		if wall(cx,cy)=0 {
			; ブロックを表示
			left++
			boxf x,y,x+wpx-2,y+wpy-2
			i=blx-x:j=bly-y
			if (i>=mblsize)&(i<colx)&(j>=mblsize)&(j<coly)&(bk) {
				wall(cx,cy)=1
				bpy=-bpy
				bk=0
			}
		}
	loop
	loop

	; ボールを表示
	pos blx,bly:color 255,255,255
	font msgothic,blsize
	mes "●"

	redraw 1
	if left=0 : clrflag=1

return

*gameover
	gosub *blockInit
return