ページ

2016年4月3日日曜日

キャラクターを動かしてみよう!

次にキャラクターを動かしてみましょう。
前回のプログラム”TEST01.BAS”から、行番号300以降を変更しています。

・TEST02.BAS(MSX2,MSX2+,MSX turboR)
100 SCREEN 5,2:DEFINT A-Z:DIM B$(15)
110 B$( 0)="000000AAE0000000"
120 B$( 1)="00000AAAEE000000"
130 B$( 2)="0000AAAAEEE00000"
140 B$( 3)="0000A11111E00000"
150 B$( 4)="0000AAA1EEEAEE00"
160 B$( 5)="00000AEEEAAC11EE"
170 B$( 6)="000AAAA66ACC111E"
180 B$( 7)="0099AA6A8ACC111E"
190 B$( 8)="0FF906688ACC111E"
200 B$( 9)="AAF00444B8AC11E0"
210 B$(10)="AA00AAAAE8AA1EE0"
220 B$(11)="000009909988E000"
230 B$(12)="00000990FF088000"
240 B$(13)="00000FF0AAA00000"
250 B$(14)="0000AAA0AAA11111"
260 B$(15)="0000AAA111111110"
270 FOR I=0 TO 15:FOR J=0 TO 15
280 C=VAL("&H"+MID$(B$(I),J+1,1))
290 PSET(J,I),C:NEXT:NEXT
300 '
310 SET PAGE 1,1:CLS
320 X=120:Y=104
330 '
340 TIME=0:VX=0:VY=0
350 ST=STICK(0) OR STICK(1)
360 SR=STRIG(0) OR STRIG(1)
370 IF SR=-1 THEN 470
380 IF ST=0 THEN 450
390 IF ST=1 AND Y<>  0 THEN VY=-8
400 IF ST=3 AND X<>240 THEN VX= 8
410 IF ST=5 AND Y<>192 THEN VY= 8
420 IF ST=7 AND X<>  0 THEN VX=-8
430 COPY(16,0)-(31,15),0TO(X,Y),1
440 X=X+VX:Y=Y+VY
450 COPY(0,0)-(15,15),0TO(X,Y),1,TPSET
460 IF TIME<8 THEN 460 ELSE 340
470 END

・実行画面(PAGE 1)


・解説
310 表示ページ、線画ページの切替
340~460 メインルーチン
350 カーソルキー・ジョイスティックの状態を取得
360 スペースキー・ジョイスティックのボタンの状態を取得
430 キャラクターの消去
440 キャラクターの座標を計算
450 キャラクターの描画
460 ウェイト処理

VRAM 128KBのMSX2は、256×212ドット・512色中16色のグラフィックモードで、ページを4枚切り替えて使うことができます(VRAM64KBの場合2枚)。
最初に、表示・線画の初期設定ページ0にキャラクターを描画し,その後、SET PAGE命令でページ1に切り替えています。


・実行画面(PAGE 0)

STICK命令ですが、STICK(0)でカーソルキー、STICK(1)でジョイスティックポート1の状態を取得します。、押した方向によって対応した値が返ってきます。押されていない時は0の値を返します。
このプログラムでは、上下左右の4方向に対応しています。

MSX-BASICにも、F-BASICなどにあるINKEY$命令でキーボードからの入力を取得できますが、STICK命令を使うことで、キーボードとジョイスティック両対応のプログラムが簡単に作ることができます。

・STICK命令の返り値


STRIG命令ですが、STRIG(0)でスペースキー、STRIG(1)でジョイスティックポート1のAボタンの状態を取得しています。押されていない時は0の値を、押されていれば-1の値を返します。
このプログラムでは、スペースキーかジョイスティックポート1のAボタンを押すとプログラムが終了します。

COPY命令は、ページ間の転送ができるのでとても便利です。このプログラムでは、ページ0に描いたキャラクターを、ページ1に転送して描画しています。
 
F-BASICなどでは、ページに描いたキャラクターを一旦GET@命令で配列に入れた後、PUT@命令でキャラクターを描いていました。MSX-BASICでは同じことを、配列不要でCOPY命令ひとつで行なえます。さらに配列を使って描画するよりも高速で、メモリの節約にもなります。
 
TIEM命令は、1/60秒ごとに+1されるシステム変数です。このプログラムでは、ウエイト処理に使用しています。メインルーチンの最初でTIMEの値を0にして、ルーチンの終わりにTIMEの値が8(8/60秒)になるまで待機しています。
 
MSX2とturboRの高速モードでは処理速度が異なりますが、ウエイト処理を入れることで両対応のプログラムを作ることができます(もっともMSX2の処理速度に合わせた場合ですが・・・)
 
次はBGMの鳴らし方を紹介したいと思います。
 
・動画
 
 

0 件のコメント:

コメントを投稿