ゲームではたくさんのフラグが必要になります
格闘ゲームならばコマンド入力でどのキーが押されたか?などのフラグ処理が必要になりますし
RPGなどではイベントのフラグなど山ほどあるわけです
例えばbool型でフラグの数だけ定義すると・・・
bool isUP; // キー上が押された bool isDown; // キー下が押された bool isRight;// キー右が押された bool isLeft; // キー左が押された
のようにフラグ単位で変数を用意する羽目になります
これではフラグの管理が大変になってしまいます
また、フラグデータの保存(セーブなど)にはあまりに非効率です
そこでビット単位でフラグを定義し、一つの整数型の変数に複数のフラグを格納すれば、
フラグ変数の数も劇的に減らすことができます
以下にサンプルを示します
#include <stdio.h> // フラグの作り方 // 各ビットの桁がフラグとして扱える enum MOVEFLAG{ UP = (1 << 0), // シフト演算でずらして各桁のビットを立てる DOWN = (1 << 1), LEFT = (1 << 2), RIGHT = (1 << 3) }; int main() { // int型はWindows環境下では32bitの変数として扱える // つまり、最大32個のフラグを格納できる // 0で初期化 int flag = 0; // フラグを立てたい場合はOR演算 flag |= UP; // OR演算の組み合わせで同時に複数のフラグを立てることができる flag |= (RIGHT | LEFT); // フラグが立っているかどうか調べるにはAND演算を使う if(flag & UP){ printf("UP\n"); } // UPかつRIGHTの場合 if( (flag & UP) && (flag & RIGHT)){ printf("UP and RIGHT\n"); } // フラグを降ろしたい場合はXORとANDを組み合わせる flag &= (flag ^ UP); if(flag & UP){ printf("UP\n"); } // 一括で降ろしたい場合 flag &= (flag ^ (LEFT | RIGHT)); if( (flag & LEFT) || (flag & RIGHT)){ printf("LEFT or RIGHT\n"); } return 0; }
さらに興味がある人はstd::bitsetで調べてみると良いと思います
std::bitsetはSTLで定義されたビット管理用のコンテナです
C++が使える環境下ならば積極的に使っていくべきです