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