#define SIZE 20 ;キャラクタのサイズ #define dy0 20 ;ジャンプの初速度。大きくすると高くジャンプする #define ROUGH 1 ;ROUGH は”荒い”の英語。dy0を割り切れる数字にすること #define dx 5 ;X方向の移動量 buffer 2 : cls ;picload "haikei.bmp" ;背景画像を使用する場合はブッファーにも読み込む screen 0,640,480,0,0,0 ;picload "haikei.bmp" ;画像の読み込み x=winx/2 : y=winy-SIZE ;初期位置 y0=y jp=0 ; 状態フラグ= -1:落下中 0:ジャンプしてない 1:上昇中 *main stick kari,31 if kari&1 : x=x0-((x>0)*dx) ;ここの計算は解説参照 if kari&4 : x=x0+((x<(winx-SIZE))*dx) ;ここの計算は解説参照 if jp=0 : if kari&16 : jp=1 : dy=-dy0 ;ジャンプしていないときのみキー入力判定 y=y0+dy ;Y座標を変化させる gosub *hyouji ;表示 await 30 ;表示の時間を長くするためになるべくここがいいと思う x0=x : y0=y ;今の位置を記憶(描画消去のため) if jp=1 : if dy=0 : jp=-1 ;最高点に達したら、jpフラグを落下にする if dy=dy0 : dy=0 : jp=0 : goto *main ;初速度と同じになったら、ジャンプ終了 if jp!=0 : dy+=ROUGH ;ジャンプしているとき以外、変化量を変化させる(解説参照) goto *main *hyouji if (x0=x)&(y0=y) : return ;前と同じ位置なら表示はしない pos x0,y0 : gcopy 2,x0,y0,SIZE+1,SIZE+1 ;前の場所を書き直す color 0,0,0 boxf x,y,x+SIZE,y+SIZE ;キャラクターの表示 return |