一般来说,实现某种作弊码的最佳方法是什么?我想到了 WinForms 应用程序,其中一个作弊码可以解锁一个复活节彩蛋,但实现细节并不相关。
我想到的最好方法是为每个代码保留索引——让我们考虑一下著名的 DOOM 代码——IDDQD 和 IDKFA,在一个虚构的 C# 应用程序中。
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 的源代码或它们的实现,而是这个问题的通用解决方案。