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
動かしてみるとこんな感じ。
カーソルキーやジョイスティックの押した方向がそれぞれ番号に対応している。
上が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画面プログラムのコーナーでは必須だったので、覚えることができた。
投稿プログラムを読み、意味を調べることで、いろいろなテクニックを学べた。