サンプル作ってみたよ
//====================================================
//
// 名前:格闘ゲーム.hsp
//
// ■操作方法
// ・左右のキーで移動
// ・[スペース]キーでジャンプ
// ・[Enter]キーで攻撃
// ※自分に合った操作方法で試して下さい^^
// 上の操作方法は自分にとって合う操作です。
//
// ・画像が無い場合は?が表示されます。
// ・当たり判定はまだ作っていません。すいません!!^^;
//
//====================================================
buffer 1
exist "char1.bmp"
if strsize != -1 {
picload "char1.bmp"
} else {
font "メイリオ",100,1
color 50,50,50
boxf 0,0,150,150
color 255,255,255
pos 23,10 : mes "?"
}
buffer 2
exist "char2.bmp"
if strsize != -1 {
picload "char2.bmp"
} else {
font "メイリオ",100,1
color 50,50,50
boxf 0,0,150,150
color 255,255,255
pos 23,10 : mes "?"
}
//====================================================
// 変数管理
//====================================================
randomize
mx = 50
my = 300
ex = 800
ey = 300
//====================================================
// ウィンドウの初期化や設定
//====================================================
screen 0,1000,500,0,(ginfo(20)/2-1000/2),(ginfo(21)/2-500/2)
title "格闘ゲーム"
//====================================================
// 格闘ゲームのメインループ
//====================================================
repeat 3
redraw 0
gosub *back_draw
gosub *char_draw
gosub *enemy_draw
color 255,255,255
font "メイリオ",50,0
pos 500,100 : mes 3-cnt
redraw 1
wait 100
loop
redraw 0
gosub *back_draw
gosub *char_draw
gosub *enemy_draw
color 255,255,255
font "メイリオ",50,0
pos 420,100 : mes "スタート"
redraw 1
wait 100
//====================================================
// 格闘ゲームのメインループ
//====================================================
repeat -1
redraw 0
color 255,255,255 : boxf
gosub *back_draw
gosub *char_move
gosub *char_draw
gosub *char_attack
gosub *char_cheak
gosub *enemy_draw
gosub *enemy_move
gosub *enemy_attack
gosub *enemy_cheak
gosub *message_draw
redraw 1
await 16
loop
//====================================================
// 背景を描画
//====================================================
*back_draw
color 0,128,255 : boxf
color 0,128,0
boxf 0,450,1000,460
color 128,0,0
boxf 0,460,1000,500
return
//====================================================
// 自機を描画
//====================================================
*char_draw
pos mx,my
gcopy 1,0,0,150,150
return
//====================================================
// 自機を操作
//====================================================
*char_move
stick move, 5
if ( move & 1 ) : mx = mx - ( 5 + speed ) : m_muki = 0
if ( move & 4 ) : mx = mx + ( 5 + speed ) : m_muki = 1
getkey dash,16
if dash & 1 : speed = 3 : else : speed = 0
getkey mjump,32
if ( mjump & 1 ) & jump = 0 {
mvy = -10.0
jump = 1
}
if jump = 1 {
mvy = mvy + 0.2
my = my + mvy
}
if mx < 0 : mx = 0
if mx > 850 : mx = 850
if my > 300 {
jump = 0
my = 300
mvy = 0.0
}
return
//====================================================
// 自機の攻撃
//====================================================
*char_attack
stick atk,32
if atk & 32 {
color 255,255,0
if m_muki = 0 {
boxf (mx-150),(my+30),(mx-150+149),(my+30+20)
} else {
boxf (mx+150),(my+30),(mx+150+150),(my+30+20)
}
}
return
//====================================================
// 自機の当たり判定
//====================================================
*char_cheak
return
//====================================================
// 敵を描画
//====================================================
*enemy_draw
pos ex,ey
gcopy 2,0,0,150,150
return
//====================================================
// 敵を操作
//====================================================
*enemy_move
ecnt = ecnt + 1
if mf1 = 0 or mf2 = 0 : mover = rnd(100)
if rnd(100) <= 10 : espped = 3 : else : espeed = 0
if mover >= 90 or mf1 = 1 : ex = ex + ( 5 + espped ) {
e_muki = 0
mf1 = 1
if ex >= mx {
if ecnt \ ( 16 * rnd(10) + 1 ) = 0 {
mf1 = 0
}
} else {
if ecnt \ ( 16 * rnd(30) + 1 ) = 0 {
mf1 = 0
}
}
}
if mover <= 10 or mf2 = 1 : ex = ex - ( 5 + espped ) {
e_muki = 1
mf2 = 1
if ex <= mx {
if ecnt \ ( 16 * rnd(10) + 1 ) = 0 {
mf2 = 0
}
} else {
if ecnt \ ( 16 * rnd(30) + 1 ) = 0 {
mf2 = 0
}
}
}
if ( rnd(20) = 0 ) & ejump = 0 {
evy = -10.0
ejump = 1
}
if ejump = 1 {
evy = evy + 0.2
ey = ey + evy
}
if ex < 0 : ex = 0
if ex > 850 : ex = 850
if ey > 300 {
ejump = 0
ey = 300
evy = 0.0
}
return
//====================================================
// 敵の攻撃
//====================================================
*enemy_attack
if rnd(25) = 0 or eatkf = 1 {
eatkf = 1
if eatkf = 1 {
if ecnt \ ( rnd(40) * 16 + 1 ) = 0 {
eatkf = 0
}
}
color 255,255,0
if e_muki = 0 {
boxf (ex-150),(ey+30),(ex-150+149),(ey+30+20)
} else {
boxf (ex+150),(ey+30),(ex+150+150),(ey+30+20)
}
}
return
//====================================================
// 敵の当たり判定
//====================================================
*enemy_cheak
return
//====================================================
// 文字を描画
//====================================================
*message_draw
font "メイリオ",20,0
color 255,255,255
pos 10,10 : mes "HP:" + m_hp
return
どう?