WebMSXでMSX BASICの自作ゲーム作成!第二弾。
今日はジャンプをやりたいと思います。
このジャンプ処理はMSX MAGAZINE 永久保存版2に
記載されていたものです。
詳しくは本をご購入ください^^
スペースキーを押す長さによって、ジャンプの高さが
変わります。
こちらのURLをクリックすると、実行結果を試せます。
http://webmsx.org/?DISKA_URL=http://goods.heteml.jp/msx/samp3 (1).dsk
WebMSXで作品公開する方法は、
WebMSXで作ったDiskイメージファイルをどこかにアップロードして、
そのURLを、
のあとに繋げてリンクを貼ればOKです。
それではソースコードを。
10 SCREEN1,2,0:DEFINTA-Z:KEYOFF:
WIDTH32: COLOR15,1,5
20 H2 = 1:X=128:Y=160
30 FOR J=0 TO 7:S$="":FOR I=1 TO
32:READD$:S$=S$+CHR$(VAL("&H"+D$
)):NEXT:SPRITE$(J)=S$:NEXT
40 S=STICK(0):TG=STRIG(0)
50 IF S=3 THEN X=X+4
60 IF S=7 THEN X=X-4
70 IF S=1 THEN Y=Y-4
80 IF S=5 THEN Y=Y+4
90 H2=-H2:IF JF=1 THEN H2=-1
100 IF S=3 AND H2=1 THEN H=0
110 IF S=3 AND H2=-1 THEN H=4
120 IF S=7 AND H2=1 THEN H=1
130 IF S=7 AND H2=-1 THEN H=5
140 IF X<0 THEN X=0
150 IF X>240 THEN X=240
160 IF JF=1 THEN 190
170 IF TG=0 THEN 250
180 JF=1:JY=-8:JC=6
190 IF JC=0 THEN 220
200 IF TG=0 THEN JC=0:GOTO 220
210 JC=JC-1
220 IF JC=0 AND JY<8 THEN JY=JY+
2
230 Y=Y+JY
240 IF Y>160 THEN Y=160:JF=0
250 PUTSPRITE 0,(X,Y),7,H
260 PUTSPRITE 1,(X,Y),11,H+2
270 GOTO 40
500 DATA 2E,2D,67,7E,78,7C,38,06,16,17,0F,14,1D,07,0F,0F, F0,F8,80,00,00,00,00,00,E0,70,70,20,50,80,80,E0
510 DATA 0F,1F,01,00,00,00,00,00,07,0E,0E,04,0A,01,01,07,74,B4,E6,7E,1E,3E,1C,60,68,E8,F0,28,B8,E0,F0,F0
520 DATA 10,10,18,00,01,01,01,00,00,00,00,03,00,00,00,00,00,00,10,50,D8,F0,E0,00,00,00,00,00,00,00,00,00
530 DATA 00,00,08,0A,1B,0F,07,00,00,00,00,00,00,00,00,00,08,08,18,00,80,80,80,00,00,00,00,C0,00,00,00,00
540 DATA 00,1E,5D,4B,7E,78,7C,38,06,0D,1D,0D,16,2B,38,1E,00,E0,F8,80,00,00,00,00,00,E0,F0,30,20,D4,3C,38
550 DATA 00,07,1F,01,00,00,00,00,00,07,0F,0C,04,2B,3C,1C,00,78,BA,D2,7E,1E,3E,1C,60,B0,B8,B0,68,D4,1C,78
560 DATA 00,20,20,30,00,01,01,01,00,00,00,00,00,00,00,00,00,00,00,10,50,D8,F0,E0,00,00,00,C0,C0,00,00,00
570 DATA 00,00,00,08,0A,1B,0F,07,00,00,00,03,03,00,00,00,00,04,04,0C,00,80,80,80,00,00,00,00,00,00,00,00
前回のプログラムに追加しています。
前回と違うのは、PUT SPRITEを下の方に移動しております。
それと時間稼ぎのFOR NEXT文を取り除きました。
40,90,140~240行を追加しています。
40 S=STICK(0):TG=STRIG(0)
TG=STRIG(0)は、
スペースキーを押したかどうかを知るための宣言です。
90 H2=-H2:IF JF=1 THEN H2=-1
JF=1はジャンプフラグです。
ジャンプしている時は、足を開いたスプライトを表示します。
140 IF X<0 THEN X=0
150 IF X>240 THEN X=240
はマイキャラのX座標の移動範囲を。X座標が、0~240まで。
端から端までです。
160 IF JF=1 THEN 190
JF=1はジャンプしているとき。そのときは190行へとびます。
170 IF TG=0 THEN 250
TG=0は、スペースキーを押していないときです。
250行へとびます。
250行はPUT SPRITEで、180~240行のジャンプ処理をまるまる飛び越えて
います。なにもしないということです。
180 JF=1:JY=-8:JC=6
JF=1は、ジャンプフラグです。
JY=-8は、最初にスペースキーを押したときは、Y座標を-8移動させるということ。
毎回、Y座標を、-8ドットづつしていきます。(スペースキーを押している間)
JCの説明を。
スペースキーを押している間は、-8ドットづつ上へ上がりますが、
それの上限を設けなければいけません。そうしないと永遠に上に飛んで行ってしまう
ので。そこでカウンターを入れます。
最初は6です。そこから後の行で-1づつしていきます。
160行でジャンプフラグが立っている時は、この行は飛ばされています。
190 IF JC=0 THEN 220
JC=0のとき、220行へ飛びます。
200 IF TG=0 THEN JC=0:GOTO 220
スペースキーが離されたら、JC=0とします。
そして1行飛ばして、220行へ。
210 JC=JC-1
ジャンプカウンターを-1づつしていきます。
220 IF JC=0 AND JY<8 THEN JY=JY+2
初期値がJC=6で、ジャンプの上限か、スペースキーを離した時に
JC=0となっていました。
JY<8となっていますが、ジャンプなので、上へ上がったら、下へも降りてこないと
いけません。その移動量の上限が+8です。
JYに2づつ足していきます。
JYは、この処理を何回か通ることで、
-8,-8,-8,-8,-8,-8,-6,-4,-2,0,2,4,6,8,8,8,8,8,8
となっていきます。
擬似的に重力加速度を意識したような動きになっています。
230 Y=Y+JY
Y座標に移動量を足していきます。
240 IF Y>160 THEN Y=160:JF=0
Y座標の地面がY=160となっています。
ここは、いずれゲームを作っていくときには変えていかないといけません。
優秀なジャンプ処理ですね。
シンプルですけど高さ調整もできるし。
今、MSX BASICをやると資料が豊富にあるので、楽に作ることができるのが
いいですね〜。
このプログラムはジャンプカウンターJCを いれるところがキモですね。
もし自分でプログラムを考えるとすると、
まず、JY=-8と初期設定し、毎回、JY=JY+2するというのはすぐわかると
思います。
そこにジャンプカウンター JC=6として、JC=0となるまでは、
JY=-8がしばらく続かせると考えていくのでしょうか。
-8,-6,-4,-2,0,2,4,6,8
を
-8,-8,-8,-8,-8,-8,-6,-4,-2,0,2,4,6,8,8,8,8,8,8
にしていく処理を考えます。
そんなところでしょうか。
次回は地面にブロックを敷き詰めたいと思います。
とりあえず、カラフルな多色刷りはやめておいて、2色のブロックにすると
思います。
それでもVRAMを弄らないといけないですからね。
そのうちカラフルな多色刷りもやりたいと思います。
最後に、
iphoneとandroidでアプリを作っております。
MSXっぽいアプリで、横スクロールランアクションゲームです。
8ドットカクカクスクロールです!
こちらもよろしく、です!
次のページ
では~。