#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
ほとんどコメントに書いてあるので、何とかなると思います
わかりにくい部分を・・・
    if kari&1 : x=x0-((x>0)*dx) ;ここの計算は解説参照
これは、初心者の方には何をやっているのか判らないはず。
ifの判定は、(他に何が押されていても)左が押されていたら・・・という判定です(stickのHELP参照)
    x=x0-((x>0)*dx)
x>0これの計算結果が分かりにくいと思いますが・・・これを書き直すと
    if x>0 : x=x0-dx : else : x=x0
このようになります。具体的には、x>0の計算結果は、0か1でしかありません。 xが0より大きければ1になるし、xが0より小さければ0になります。これを頭に入れて 先ほどの文を見てみると・・・・ifを省略して書いてるのと同じになります。 見慣れなければ、後に書いたif文を使用した方がいいでしょう。 後で見直したときに判らないと困りますからね(^^;

ジャンプの時の高さの変化は基本的に放物線という曲線を描きます。この放物線はy=−x^2=−(x×x)という 式で与えられます。しかし、このような式を使うと、色々面倒なので、xが1増えたらどうなるか?? ということを考えます。仮にすでにジャンプしきって、落ち始めの時をx=0、y=0と考えます。     x=0の時y=0
    x=1の時y=−1
    x=2の時y=−4
    x=3の時y=−9
    x=4の時y=−16
    x=5の時y=−25
        ・
        ・
        ・
このように続きます。では、xが1増えたらどのように変化したかというと
    −1、−3、−5、−7、−9、・・・・
このように変化します。つまり、差は、2ずつ減って行くわけです。これを利用すると、 わざわざ、x^2の計算をしなくてもいいわけです。この場合だと、はじめは1を引いて(−1) 次は、3を引いて(−1−2)、次は5を引いて(ー1−2−2)・・・これを繰り返すとx^2の 計算結果が得られるわけです。
実際には、2ずつ変化分を引き算する必要はなく、同じ数字で引き算をし続けるといいのです。
今回のプログラムでは、ROUGH(=1)づつ足しています。これは、プログラムの画面では 数学的なyの方向が逆なためです。つまり、yがふえると、下に落ちる・・・。
またこれらのことはジャンプしていく間も同様なことなので(計算してみると判ります) 今回は、この数学の力を使って、ジャンプさせています。

なんだか、文章がごちゃごちゃになってるような気がするので、判らなければ 掲示板でもメールででも質問してください(^^)
■ 目次へ戻る ■

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!