【はじめてのプチコン】フラグ変数とフラグ処理① | りょうのゲーム塾

りょうのゲーム塾

再開、準備中。


■フラグって何?
そもそもここで言うフラグとは旗の意味です。
要するに旗が揚がっているかいないかと言う事を表しています。
通常フラグが揚(上)がっている状態を1、
フラグが下がっている状態を0として扱います。

1と0でONまたはOFF、あるかないかの2値を表します。


■フラグ変数と数値変数はどう違うのか?
フラグ変数として数値変数を使います。
使い方によっては同じものです。

0001 FLAG=0
0002 GOSUB @FLAGDISP
0003 FLAG=1
0004 GOSUB @FLAGDISP
0005 END
0006 @FLAGDISP
0007 IF FLAG==1 GOTO @L_OK
0008 'NG
0009 PRINT "FLAG=";FLAG;" ON"
0010 RETURN
0011 'OK
0012 @L_OK
0013 PRINT "FLAG=";FLAG;" OFF"
0014 RETURN

このプログラムで使っている変数FLAGは数値変数です。
0もしくは1を代入して使っている限りフラグとして機能しています。
しかしこのままでは変数1個でひとつのフラグの状態しか保持できません。


■フラグの値は2進数1ビットで表せる。
フラグの値は0もしくは1で表します。
プチコンではこれを実際にシステム変数TRUEとFALSEで設定していますね。
しかしプチコンの数値変数は32ビットでそのうちの20ビットが整数部を表し、
そのうち最上ビットは符号ビットという特殊なビットなので
実際には19ビット使う事が出来ます。

これは言い換えると19個のフラグとして使えるということです。


■フラグの処理を考える
それでは具体的にフラグをどうやって使うかですが、
フラグは基本次のような処理が出来れば問題ありません。

1)フラグをONにする
2)フラグをOFFにする
3)フラグを判断する


それではサンプルをみてみましょう。


0001 FLAG=0 ←フラグをONにする
0002 GOSUB @FLAGDISP
0003 FLAG=1 ←フラグをOFFにする
0004 GOSUB @FLAGDISP
0005 END
0006 @FLAGDISP
0007 IF FLAG==1 GOTO @L_OK ←フラグを判定する
0008 'NG
0009 PRINT "FLAG=";FLAG;" ON"
0010 RETURN
0011 'OK
0012 @L_OK
0013 PRINT "FLAG=";FLAG;" OFF"
0014 RETURN


基本的なフラグ処理が使われていますね。
しかしこのままでは変数FLAGは数値0と数値1しか使っていません。
1個のフラグしか処理されていない事になります。