ワンポイントテクニック No.013 G800シリーズ対応

論理式を使えばすっきり

 ゲームを作る場合にキャラクタの移動に良く使われるテンキーですが、普通にIF文で判定する場合には移動する方向の分だけIF文を用意する必要があり、リストも長くなり処理速度も遅くなってしまいます。たとえば[8][2][4][6]で上下左右に移動する場合はIF文ではこのようになります。

《 リスト1 》
10 CLS :X=99:Y=20
20 K=VAL INKEY$ :V=0:W=0
30 IF K=8THEN W=-1
40 IF K=2THEN W=1
50 IF K=4THEN V=-1
60 IF K=6THEN V=1
70 GCURSOR (X,Y):GPRINT "0000000000000000"
80 X=X+V:Y=Y+W
90 GCURSOR (X,Y):GPRINT "D87C363C3C367CD8"
100 GOTO 20

 そこで便利なのが論理式です。式を括弧でくくりその式が満たされている時は-1となりそうでない場合は0となります。たとえばB=(A>9)という論理式はAが9より大きい場合はB=-1になり、それ以外はB=0になります。これをIF文で表すならばIF A>9THEN B=-1ELSE B=0となります。逆に言えばIF文を論理式で表すことも可能になるということです。
 この論理式を使えばリスト1が下記のようになります。

《 リスト2 》
10 CLS :X=99:Y=20
20 K=VAL INKEY$
30 V=(K=4)-(K=6):W=(K=8)-(K=2)
40 GCURSOR (X,Y):GPRINT "0000000000000000"
50 X=X+V:Y=Y+W
60 GCURSOR (X,Y):GPRINT "D87C363C3C367CD8"
70 GOTO 20

 論理式を使えばリスト1の4つのIF文による判定も1行だけで済んでしまいました。見ての通り例えば[4]が押された場合、V=-1、W=0となるためリスト1と動作は全く変わっていません。

 たとえば、こんなIF文の羅列も・・・

 IF A=3THEN S=S+5
 IF B=5THEN S=S+10
 IF C=9THEN S=S+15

論理式を使用すればこんなにすっきり!

 S=S-(A=3)*5-(B=5)*10-(C=9)*15

 このように論理式を使えばIF文の羅列になってしまうようなプログラムもすっきりさせることが可能になり場合によってはかなりの高速化も期待できます。論理式はポピュラーなテクニックであるために使用している人も多いかと思いますが、無理にIF文を使わないで論理式を使用するとかえって分かりにくくったり処理が遅くなってしまうこともあるため注意が必要です。


RETURN

inserted by FC2 system