“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

22.MSXでキャラクターを動かす

次はMSXでキャラクターを動かすプログラム。

MSXのBASICでは、カーソルキーやジョイスティックのボタンを押したかを取得できる命令 STICK がある。
前回のプログラムに、カーソルキーで上下左右にキャラクターを移動するプログラムを追加してみる。

10 SCREEN1,2:CLS
20 FOR I=0 TO 15
30 READ DT$
40 L$=L$+CHR$(VAL("&H"+LEFT$(DT$,2)))
50 R$=R$+CHR$(VAL("&H"+RIGHT$(DT$,2)))
60 NEXT I
70 SPRITE$(0)=L$+R$
80 X=100:Y=50
90 PUT SPRITE 1,(X,Y),10,0
100 S=STICK(0)
110 X=X+((S=7)-(S=3))*5
120 Y=Y+((S=1)-(S=5))*5
130 GOTO 90
1000 DATA 0FF0,3FFC,7FFE,FFFE
1010 DATA 7FFF,1FFF,03FF,01FF
1020 DATA 00FF,01FF,03FF,1FFF
1030 DATA FFFE,7FFE,3FFC,0FF0

動かしてみるとこんな感じ。
f:id:CORO3:20200123230403g:plain

カーソルキーやジョイスティックの押した方向がそれぞれ番号に対応している。
上が1、右上が2、右が3と、時計回りに番号が割り振られている。
    1
  8  ↑ 2
 7 ←+→  3
  6  ↓ 4
    5

この番号を検知してくれるのがSTICK
カッコの中の番号0番は、キーボードのカーソルキー。
1と2で、ジョイスティックの十字キーを調べられる。
左右に動かすには、3と7が押されたかを調べればよい。
押した方向に5ドットずつ移動してスプライトを表示する。

普通はIF文を使って書くのだが、今回はテクニックの一つ、論理式を使ってみた。
IF文を使って書くと、こんな感じになる

10 REM IFヲツカッタバアイ
20 X=100:Y=50
30 S=STICK(0)
40 IF S=7 THEN X=X-5
50 IF S=3 THEN X=X+5
60 IF S=1 THEN Y=Y-5
70 IF S=5 THEN Y=Y+5
80 GOTO 30

40~70行の4行かかるところを、論理式を使うと2行にできる。
論理式とは、カッコの中の条件が真(True)なら、-1に、偽(False)なら0になる仕組み。

X=X+((S=7)-(S=3))*5で、
左のキーが押されたときは、Sの値は7になる。
そうすると、X=X+((-1)-(0))*5 で、 Xは-5される。40行目の結果と一緒になる。
右のキーが押されたときは、Sの値は3になる。
そうすると、X=X+((0)-(-1))*5 で、Xは+5される。50行目の結果と一緒になる。
これで、2行文のIF文を論理式で1行にまとめられた。
Y方向(上下方向)も同じように論理式でまとめられる。

このテクニックは、雑誌 MSXFAN の1画面プログラムのコーナーでは必須だったので、覚えることができた。
投稿プログラムを読み、意味を調べることで、いろいろなテクニックを学べた。