汎用フラグマネージャ

おはこんばんにちは、ロゼオです。
プロコンの進捗ダメです、はい。
総当り式で画像復元できないかなと、簡単にループ処理書いたところ、
最悪の場合( 1024*1024ピクセル、16*16分割 )、42億回ピクセルの比較を行わなければならないとかなるとか。
ナンテコッタイ。

とりあえず、GetTickCount関数(起動からのミリ秒を取得)をつかって計測してみた。

結果:
42億回の処理時間 10143ms
( ≒10秒 )

あらこんなもんなの?ならいいわ。

まあそんなことはさておき。

DXライブラリをつかってゲームなり作る際の簡易的なフラグマネージャを紹介します。
クラスを使用しているためわからない方には少しとっつきにくいかもしれません。
以下からDL(Dropbox)
ダウンロード

解凍すると以下のファイルがでてくるはずです
FlagManager.h
FlagManager.cpp
ProcessMain.cpp
sample.cpp
define.h

とりあえずは全てプロジェクトに追加して使用します。
使用前にそれなりの手続きが必要です。


手続き:
FlagManager *型の変数をメインファイルで定義
定義したらFlagManager.h内の
extern FlagManager *flg;
のflgを定義した名前に変更
WinMain関数で
定義変数名 = new FlagManager();
を実行し、クラスのインスタンスを生成
以上で使用前の準備は完了です。

あとはWinMain内のメッセージループ内で
if( 定義名前->Process() == -1 ) break;
を実行するだけです。

行わせたい処理は
ProcessMain.cppのswitch文の中に書いていきます。
あらかじめ、
#define MENU 1
などでフラグの識別子を定義しておき、フラグを変えたい場合は
FlagManagerクラス内のFlgChangeに引数に渡し、FlagManager::Processのcase文を追加することで管理できます。

プログラムを終了させるときはSendExitを実行するだけです。

これによりWinMain関数は簡潔化し、フラグを管理する変数の実態を意識することなくソースがかけます。

なおフラグの初期化はコンストラクタでMENUで初期化されます。こちらで用意したdefine.hの中に定義されてますが、変えたい場合はFlagManager::FlagManager()のFlg = …;を弄ってください。

あと、使いたいファイルとWinMainがあるファイルには必ずFlagManager.hをインクルードしてください。
プログラム終了前に
delete()でインスタンスの消去を忘れずに。

サンプルコードを添付しているのでそちらも参照ください。
サンプルではZ→ESCキーを押すと終了するようになっています。
コメントアウトを参照ください。

とても簡潔な構造なため初心者向けです。
上級者の方にはオススメしません。

仕様はDXライブラリ用ですが、少しいじればそれ以外でも使用可能です。

長々となりましたが、これにて終了です。
また次回。

※readmeには一度目を通してください。