HEART★6基板を、ゲーム用のコントローラにするワザ

ルーレットで使用した、HEART★6基板を、ゲーム用のコントローラに改造しよう。
まずは、ボタンを押したときの状態を次のプログラムで確かめます。

10 PRINT IN(4),IN(3),IN(2),IN(1),””,IN(9),BTN()
20 WAIT 5
30 GOTO 10

INとBTNは、ボタンを押したときの状態が違うことに注意してください。

IN(x):ボタンが押されると入力が0、押されていないと1(プルアップ)
BTN():ボタンが押されると入力が1、押されていないと0(プルダウン)

では、IchigoJam定番の「川下り」ゲームを改造して、キー操作からHEART★6基板のボタンに改造する方法を説明しましょう。

オリジナルのプログラム

1 ‘KAWAKUDARI 2018 http://fukuno.jig.jp/2194
10 CLS:X=16
20 LC X,5:?”O”
30 LC RND(32),23:?”*”
35 WAIT 3
36 X=X-BTN(28)+BTN(29)
40 IF SCR(X,5)=0 GOTO20

1 ‘KAWAKUDARI 2018 http://fukuno.jig.jp/2194
10 CLS:X=16
20 LC X,5:?”O”
30 LC RND(32),23:?”*”
35 WAIT 3
36 X=X-BTN(28)+BTN(29)
40 IF SCR(X,5)=0 GOTO20

  1. まず、HEART★6基板のどのボタンをどのように使うかきめましょう。今回は、IN(4)は左、IN(1)は右にします。
  2. 次に、プログラムからキーボード入力の個所を探します。このプログラムでは、BTN命令を使っていますね。
  3. 次に、BTN命令の使い方を理解します。これは、プログラミングする人によって考え方が違うことから、どのように使おうとしたのか(仕様を)考える必要があるためです。このプログラムでは、BTN(28)は←キー、BTN(29)は→キーを押したときに1になることを利用して動きを決めていました。
  4. これで、BTN(28)はIN(4)、BTN(29)はIN(1)に置き換えれば良いことがわかります。 X=X-!IN(4)+!IN(1)
  5. でもちょっと待って!。
    IN命令の状態を確かめたとき、ボタンを離す=1、押す=0、となり、BTN命令を逆でした。
    BASICにはこんなときに使える式が用意されていて、式NOT(省略形 ! )があります。
    式NOTは、0なら1、1なら0するという性質があります。
    36 X=X-!IN(4)+!IN(1)
  6. まとめると、以下のようなプログラムが完成します。
    さらに、IN(3)で再ゲームできるように50行目を追加しました。

HEART★6で操作できるように修正したプログラム

1 ‘KAWAKUDARI 2018
10 CLS:X=16
20 LC X,5:?”O”
30 LC RND(32),23:?”*”
35 WAIT 3
36 X=X-!IN(4)+!IN(1)
40 IF SCR(X,5)=0 GOTO20
50 IF IN(3) CONT ELSE RUN

INKEY命令を使っている場合は、少し改造方法が異なります。

10 CLS:X=16
20 LC X,5:?”O”
30 LC RND(32),23:?”*”
34 WAIT 3
35 K=INKEY():CLK
36 X=X-(K=28)+(K=29)
40 IF SCR(X,5)=0 GOTO20

10 CLS:X=16
20 LC X,5:?”O”
30 LC RND(32),23:?”*”
34 WAIT 3
35 ‘ K=INKEY():CLK
36 X=X-(IN(4)=0)+(IN(1)=0)
40 IF SCR(X,5)=0 GOTO20