Come farei un sistema di password per un gioco single-player come quelli usati nei vecchi giochi per console?
Ad esempio, Mega Man X salva lavoro dandoti una serie di numeri che puoi inserire in seguito per caricare il tuo salvataggio.
Come farei un sistema di password per un gioco single-player come quelli usati nei vecchi giochi per console?
Ad esempio, Mega Man X salva lavoro dandoti una serie di numeri che puoi inserire in seguito per caricare il tuo salvataggio.
Risposte:
Innanzitutto, abbassa il tuo stato di gioco (o meglio, gli aspetti dello stato che vuoi salvare). Nel caso di un gioco in stile Mega Man, potresti tracciare quale dei boss di livello finale hai ucciso, il numero di power-up simili a un serbatoio di energia che hai e così via.
Comprimere tutti quei dati in un campo di bit, ovvero assegnare un numero appropriato di bit a ciascun valore:
Il nostro esempio ha un totale di 8 bit, il che significa che un singolo carattere può rappresentare una password. In pratica, è probabile che il tuo gioco abbia più stato e quindi richieda più bit totali e quindi più personaggi. Come notato nei commenti qui e altrove in questa domanda, questo approccio funziona per i giochi "retrò" o altri giochi in cui la dimensione dello stato del gioco acquisito è ragionevole. Oltre un certo punto, potresti scoprire che la complessità delle password necessarie per codificare il tuo stato è troppo grande.
Per ridurre la probabilità che l'osservazione casuale rompa la password, è possibile trasformare il layout dei bit in modo da introdurre bit fittizi (che non hanno alcun effetto sullo stato del gioco ma che rendono la password diversa quando si interpretano tutti i bit come caratteri) o si esegue tramite un'operazione reversibile simile a un hash, per mescolare i bit in modo che tutti i bit della "scatola uccisa X " non si trovino uno accanto all'altro, rendendo le password dello stato sequenziale corrispondenti molto diverse o introducendo valori di checksum.
Se vai in giro, ci sono un bel po 'di informazioni sui sistemi utilizzati per alcuni dei più popolari giochi con password disponibili:
Potresti leggere su quelli per ulteriore ispirazione.
Credo che quei giochi abbiano salvato solo uno stato. La password fa solo riferimento a un livello da caricare. Basta usare un dizionario per qualcosa del genere.
Se è un po 'più complesso come avere una certa arma o booster, puoi crittografare lo stato in un codice hash breve (ma abbastanza lungo).
Ma ti consiglio vivamente di non usare questo. La password si diffonderà rapidamente su Internet e presto tutti avranno vinto il tuo gioco.
Mentre soluzioni come il sistema personaggio-stato di Josh Petrie presentano vantaggi (dimensioni ridotte, funziona su tutte le copie del gioco), abbinano il design del gioco e il sistema di stato in modo intrinseco al sistema di password. Qualsiasi modifica alla password o allo stato o al design e l'intero sistema va in pezzi.
Una soluzione molto più semplice sarebbe quella di costruire il tuo sistema di salvataggio come al solito, e semplicemente aggiungere un sistema di password sopra le righe. Questo può essere semplice come salvare la password nel salvataggio (possibilmente raddoppiando come nome del file) e convalidandola al caricamento, oppure complessa come usare una delle molte librerie di crittografia in circolazione (che è piuttosto banale).
Sembra esserci un po 'di confusione attorno a questa risposta.
1) L'op ha semplicemente richiesto una password che consente di caricare un salvataggio ... non è necessario che la password sia il salvataggio.
2) Oggi molti giochi hanno requisiti di archiviazione di salvataggio significativi, abbiamo appena creato internamente un sistema di salvataggio / caricamento rapido che produceva file da 10 MB ... per un gioco a quiz! Il sistema di salvataggio di Josh Petrie , sebbene valido sia molto limitato - non appena il sistema del negozio diventa non banale, le password dovrebbero essere di lunghezza enorme per conservare tutti i dati pertinenti.
Ad esempio, cosa succede se ci sono 30 boss? 20 risultati? Siamo a metà di un risultato? A che livello è? Quanti pezzi stiamo mettendo da parte per salute, vite, monete, xp? E se l'istantanea non fosse di stato tra i livelli ... ma a metà di un livello - le posizioni del giocatore, dei nemici, dei proiettili, del terreno distrutto / alterato si sommano improvvisamente a un sacco di stato che deve essere memorizzato.
Per la prospettiva, supponendo un alfabeto di 30 caratteri e una password di dieci lettere, abbiamo circa 50 bit di informazioni da memorizzare. Non è raro vedere un gioco / motore utilizzare fino a 320 bit solo per memorizzare la posizione, la rotazione e il ridimensionamento di un singolo oggetto. Certo, puoi fare tutti i tipi di trucchi per l'ottimizzazione per fare di più con meno ... ma alla fine stai usando il tempo dedicato a rendere divertente il gioco - una delle peggiori ottimizzazioni che puoi fare.