一般的にチートコードの種類を実装する最良の方法は何でしょうか? チートコードがイースターエッグのロックを解除するWinFormsアプリケーションを念頭に置いていますが、実装の詳細は関係ありません。
私の頭に浮かんだ最善の方法は、各コードのインデックスを保持することです。架空の C# アプリで有名な DOOM コード (IDDQD と IDKFA) を考えてみましょう。
string[] CheatCodes = { "IDDQD", "IDKFA"};
int[] CheatIndexes = { 0, 0 };
const int CHEAT_COUNT = 2;
void KeyPress(char c)
{
for (int i = 0; i < CHEAT_COUNT; i++) //for each cheat code
{
if (CheatCodes[i][CheatIndexes[i]] == c)
{ //we have hit the next key in sequence
if (++CheatIndexes[i] == CheatCodes[i].Length) //are we in the end?
{
//Do cheat work
MessageBox.Show(CheatCodes[i]);
//reset cheat index so we can enter it next time
CheatIndexes[i] = 0;
}
}
else //mistyped, reset cheat index
CheatIndexes[i] = 0;
}
}
これは正しい方法ですか?
編集: おそらく、私がすべきだった最悪のことは、頭のてっぺんから出てきた最初のチート コードを例として含めることでした。私は Doom のソース コードやその実装を見たくありませんでしたが、この問題の一般的な解決策を見たいとは思いませんでした。