sample3.hsp

sample\elm2d\sample3.hsp » Plain Format

	;	2Dシューティングゲーム・サンプル1
	;	(プレイヤーはカーソルキーで移動、スペースかctrlでミサイル発射)
	;

#include "hgimg3.as"
#define global _dispx 640
#define global _dispy 480

	goto *start

;----------------------------------------------------------------------------

	;	ツールで出力したソースを取り込む
	;	(モジュール空間には置かないでください)
	;	(スプライン移動(絶対)の例)
	;
#include "ene01.hsp"

#define COL_MY 1		; プレイヤーのコリジョンID
#define COL_SHOT 2		; プレイヤーミサイルのコリジョンID
#define COL_ENEMY 4		; 敵のコリジョンID
#define COL_ENESHOT 8		; 敵ミサイルのコリジョンID

#deffunc myinit
	;	プレイヤー初期化
	;
	x1=-288 : y1=-208	; 移動可能範囲 左上XY
	x2=288 : y2=208		; 移動可能範囲 右下XY

	regobj mychr,pchr(0)
	msp = 4 		; 移動速度
	setpos mychr,0,180,0	; デフォルト位置
	setcoli mychr,COL_MY,COL_ENEMY|COL_ENESHOT
	myflag=0 : myfire=1 : myfcnt=0 : myftime=0
	setborder 740.0f, 540.0f, 200.0f ; クリップ範囲

	return

#deffunc mymove
	;	プレイヤー毎フレーム処理
	;

	;	プレイヤーのミサイル当たり処理
	;
	findobj 0,COL_SHOT
	repeat:nextobj i:if i<0 : break
	getcoli res,i,20.0
	if res>=0 {
		getposi res,x,y,z
		delobj i	; 自分のミサイルを消す
		delobj res	; 敵も消す
	}
	loop
	;
	if myflag : return

	;	プレイヤー移動処理
	;
	getposi mychr,myx,myy,myz
	if key&1 : myx=limit( myx-msp, x1, x2 ) : setpos mychr,myx,myy,myz
	if key&4 : myx=limit( myx+msp, x1, x2 ) : setpos mychr,myx,myy,myz
	if key&2 : myy=limit( myy-msp, y1, y2 ) : setpos mychr,myx,myy,myz
	if key&8 : myy=limit( myy+msp, y1, y2 ) : setpos mychr,myx,myy,myz

	if myftime {
		myftime-
		if myftime=0 : myfire=1
	}

	if key&80 : goto *myshot	; 発射
	myfcnt=0
	return

*myshot
	if (myfcnt&15)=0 {
		regobj i,pchr(myfire),OBJ_MOVE|OBJ_BORDER
		setpos i,myx,myy,myz
		setdir i,0,-8,0
		setcoli i,COL_SHOT,COL_ENEMY
	}
	myfcnt+
	return


;----------------------------------------------------------------------------


*start
	;	HGIMG3初期設定
	;
	randomize
	hgini
	;
	;	テクスチャフォント表示の準備
	;
	setfont 20,22,20,1	; font Tex select(cx,cy,px,mode)
	texload "atfont.bmp"	; フォントテクスチャの登録

	;	スプライトモデルを登録
	;
	dim pchr,40
	i=0
	repeat 16 : x=(cnt&3)*64 : y=(cnt>>2)*64
	setuv x,y,x+63,y+63
	addspr pchr(i),1	; キャラ登録
	i+:loop
	;
	texload2 "dot.tga"	; テクスチャの登録

	;	オブジェクトの登録
	;
	regobj ufo,pchr(6)
	setcoli ufo,COL_ENEMY,COL_MY

	;	ツールで出力したデータの初期化(登録)
	;
	ene01_init
	ene01_setevent ufo

	;	プレイヤー初期化
	;
	myinit

	fr=0
*gmain
	stick key,$3ff
	if key&128 : goto *owari

	mymove
	hgdraw
	fprt "FRAME "+fr,20,16

	hgsync 16
	fr++
	goto *gmain

*owari
	end