quale sarebbe il modo migliore per implementare una specie di cheat in generale? Ho in mente l'applicazione WinForms, in cui un codice cheat sbloccherebbe un easter egg, ma i dettagli dell'implementazione non sono rilevanti.Come implementare correttamente i cheat codes?
L'approccio migliore che mi viene in mente è quello di mantenere l'indice per ogni codice - prendiamo in considerazione i famosi codici DOOM - IDDQD e IDKFA, in un'app C# fittizia.
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;
}
}
È questo il modo giusto per farlo?
Modifica: Probabilmente la cosa peggiore che avrei dovuto fare era includere i primi trucchi che venivano dalla cima della mia testa come esempio. Io davvero non ho voglio vedere il codice sorgente di Doom o la loro implementazione, ma la soluzione generale a questo problema.
ma il tuo codice probabilmente non funzionerà con codici a lunghezza variabile, vero? – Axarydax
@Axarydax: certo che funziona. Controlla di nuovo :) –
il mio male. Non ho visto la parte "EndsWith";) – Axarydax