#const scx 300 ;ウィンドウサイズx
#const scy 300 ;ウィンドウサイズy
#const osize 16 ;自分の大きさ
screen 0,scx,scx
jump=10 ;ジャンプ力
grab=4 ;重力(高いほど重力低い)
gcount=grab ;重力カウンター
fallmax=15 ;最高落下速度
speed=2 ;横移動スピード
ox=winx-osize/2 ;自分位置x
oy=0 ;自分位置y
omx=0 ;左右移動量
omy=0 ;上下移動量
gos=0 ;地上にいるか空中にいるか
boy=oy ;1ループ前の自分位置y
egcount=grab ;敵重力カウンター
ex=250 ;敵位置x
ey=0 ;敵位置y
emx=-2 ;敵左右移動量
emy=0 ;敵上下移動量
egos=0 ;敵が地上にいるか空中にいるか
font "MS ゴシック",osize
*mainloop ;メインループ
redraw 0
gosub *drawback
gosub *setown
gosub *drawown
gosub *setenemy
gosub *drawenemy
redraw
await 1
goto *mainloop
*drawback ;背景描画
color : boxf
return
*drawown ;自分描画
color 255 : pos ox,oy : mes "●"
return
*setown ;自分の処理
boy=oy ;1ループ前の自分位置y
stick key,5
if key&1 : omx=-speed
if key&4 : omx=speed
if oy=(scy-osize-1) : gos=1 : else : gos=0
if key&16 : if gos : omy=-jump
gcount--
if gos : gcount=0
if gcount=0 {
omy++ ;下方向移動量+1
gcount=grab ;カウンターを元に戻す
}
if omy>fallmax : omy=fallmax ;最高落下速度に達したらそこまで
ox+omx : oy+omy ;移動
omx=0 ;横移動量を0に戻す
if ox<0 : ox=0 ;画面左端
if ox>(scx-osize-1) : ox=scx-osize-1 ;画面右端
if oy<0 : oy=0 ;画面上端
if oy>(scy-osize-1) : oy=scy-osize-1 : omy=0 ;画面下端
if ox+2<(ex+osize)&(ex+2<(ox+osize))&(oy+2<(ey+osize))&(ey+2<(oy+osize)) { ;当たり判定
if boy<(ey-8) : dialog "敵を踏んだ"
}
return
*drawenemy ;敵描画
color ,255 : pos ex,ey : mes "●"
return
*setenemy ;敵の処理
if ey=(scy-osize-1) : egos=1 : else : egos=0
if egos : emy=-jump
egcount--
if egos : egcount=0
if egcount=0 {
emy++ ;下方向移動量+1
egcount=grab ;カウンターを元に戻す
}
if emy>fallmax : emy=fallmax ;最高落下速度に達したらそこまで
ex+emx : ey+emy ;移動
if ex<0 : ex=0 : emx=emx*-1 ;画面左端
if ex>(scx-osize-1) : ex=scx-osize-1 : emx=emx*-1 ;画面右端
if ey<0 : ey=0 ;画面上端
if ey>(scy-osize-1) : ey=scy-osize-1 : emy=0 ;画面下端
return
|