Come posso implementare un sistema "savegame" basato su password in stile retrò?


20

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.


3
Non fare ciò che ha fatto Donkey Kong (NES) - che ti consente di salvare sulla cartuccia ma NON CONSERVARE IL CONTEGGIO DI VITE - quindi avresti un sacco di vite dal primo livello (come 24) di salvataggio, vai a letto, WAKE UP WITH 3 - Lo odiavo
Alec Teal, il

10
Nota pedante: un sistema di password non salva uno stato di gioco, ne carica uno predefinito .
Lilienthal,

5
@Lilienthal non necessariamente. Forse è solo una sorta di "dump" di alcune variabili stato, mescolato con un algoritmo deterministico a due vie.
o0 '.

2
@Lohoris Sì, se hai abbastanza entropia nella tua password, puoi considerarla una sorta di stato salvato abbastanza vicino da assomigliare ai salvataggi correnti. Dopotutto, entrambi richiedono un modo per esportare e importare lo stato del gioco. Tuttavia, l'entropia richiesta per qualsiasi cosa che assomigli a un vero salvataggio (posizione esatta / checkpoint, vite, nemici uccisi, numero di munizioni, ...) richiederebbe sia una password molto lunga che un algoritmo molto complesso. Per i casi in cui la decisione di utilizzare password su savegames ha senso (se ce ne sono anche), la massima dovrebbe essere vera.
Lilienthal,

3
@AlecTeal Cosa dovrebbe essere esattamente "stupido"? Sto valutando una password rispetto alla quantità di dati archiviati nei giochi contemporanei, dove sono chiaramente inadatti alla stragrande maggioranza.
Lilienthal,

Risposte:


32

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:

  • Boss ucciso 1 (un bit)
  • Boss ucciso 2 (un bit)
  • Boss ucciso 3 (un bit)
  • Boss ucciso 4 (un bit)
  • Serbatoi di energia ( x di 5 in totale) (3 bit)
  • Sbloccato qualche risultato (un bit)

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.


4
Ricordati di assicurarti che la password "salva stato" sia facilmente abilitabile e, preferibilmente, non ambigua (ad es. Usa '0' o 'O' ma non entrambi).
minnmass

4
@minnmass punti bonus se converti implicitamente personaggi simili nel tuo standard, in modo che digitando 'O' invece di '0' si traduca ancora in '0'.

8
@ NPSF3000 Perché in questo caso la "password" non è una misura di autenticazione; la "password" è il supporto di memorizzazione stesso.
Schilcote,

6
@ NPSF3000 se non ti è chiaro dalla domanda, allora devi rileggere la domanda o imparare il materiale di base.
Hobbs,

2
@ NPSF3000 OP dice chiaramente "Stile retrò" e fa riferimento a Megaman per confermare, il che non è ambiguo. Informati sull'argomento, capisci che questo non è legato alla sicurezza e per favore smetti di provare a difendere ciò che è iniziato come un'ignoranza onesta e perdonabile.
MickLH,

3

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.


9
Le password che si diffondono su Internet possono essere buone. Truffare può essere divertente e, in una partita a giocatore singolo, i giocatori imbrogliano solo se stessi.
Anko,

@Anko Sì, non mi piace barare e lo faccio a malapena, quindi sono di parte. Ma per esperienza personale i miei giochi si accumulavano polvere molto più velocemente e prima quando mi imbrogliavo.
Madmenyo,

"... fa solo riferimento a un livello da caricare." Non è assolutamente vero in tutti i casi. Alcune password fanno riferimento anche a boss, uccisi, potenziamenti guadagnati, ecc. In secondo luogo, avvisare che la password può essere diffusa è una cosa: un problema nel nostro mondo iper-connesso. Dire che le opzioni di frode dovrebbero essere rimosse perché non ti piace barare è un altro. Quello che ti piace non è esattamente quello che piace agli altri. Non riguarda ciò che ti piace, è il consumatore . Trucchi / scorciatoie sono un'opzione importante, specialmente per le partite a giocatore singolo.
WernerCD,

@WernerCD In primo luogo parlo di sistemi più complessi, ho appena iniziato con un semplice sistema di password. NON sto rivendicando nulla. In secondo luogo, non sto dicendo nulla di barare nella risposta. Sto solo dando la mia risposta BIASED su un commento e anche dicendo che sono di parte e consapevole del tuo punto che non è quello che mi piace. Ma se nessuno dice ciò che gli piace o non piace come faresti a sapere cosa piace agli altri? Penso ancora che un sistema come quello sia dovuto e che i tradimenti del 21 ° secolo siano realizzati in modo diverso. La prossima volta dovresti leggere più attentamente prima di scrivere un commento come quello IMHO.
Madmenyo,

Se hai savegame, anche le persone condivideranno savegame.
Dewi Morgan,

1

Bene, in pratica potresti farlo in questo modo:

Boss uccisi = 7

Quantità di monete = 36

Possiede Spada = 0 (No)

Possiede il cuore = 1 (Sì)

Livello corrente = 6

Mondo attuale = 9

Salute = 100

Codice = 7V36R0A1T6O9A100

Fondamentalmente ogni lettera separa i tipi


-3

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.


3
Penso che il problema qui, e con il tuo commento sopra, sia che la sicurezza crittografica non è l'obiettivo di salvare lo stato del gioco come bit all'interno di una password. Le password composte in questo modo sono facilmente reversibili ma difficili da indovinare gli hash e niente di più. E per quello stesso motivo, non provoca un accoppiamento indebito nel modo in cui stai immaginando; se lo stato del gioco diventa più o meno complicato, anche l'hash (che invalida gli hash precedenti), ma il sistema funziona ugualmente bene prima e dopo.
Seth Battin,

@Seth Battin "non provoca accoppiamenti indebiti nel modo in cui stai immaginando" Oh fantastico! Quindi un gioco a cui sto lavorando in questo momento aveva un file di salvataggio misurato in megabyte ... tutto quello che devo fare è fare un po 'di offuscamento di base e visualizzarlo su uno schermo e voilà! Ora abbiamo un sistema di password perfettamente funzionante?
NPSF3000,

3
Sembra che il tuo gioco non sia appropriato per questo metodo.
Seth Battin,

@ NPSF3000 Qual è lo scopo delle password in questo caso? Se è per impedire ad altri che usano la stessa macchina di usare i loro salvataggi senza permesso, perché non avere un login una sola volta per gioco con username / pass? Se si tratta di specificare quale salvataggio desiderano, si tratta di un "ID savegame", non di una password, e probabilmente dovrebbe essere reso più amichevole. Come è, se ti leggo bene, hai bisogno di una password diversa, non specificata dall'utente ogni volta che caricano un nuovo salvataggio? PERCHÉ? Quale vantaggio utile offre a chiunque?
Dewi Morgan,

1
@DewiMorgan Non sto richiedendo nulla, sto semplicemente dando una risposta alla domanda di op: "Come farei un sistema di password per un gioco per giocatore singolo? Ad esempio, Mega Man X salva il lavoro dandoti una serie di numeri che puoi inserire in seguito per caricare il tuo salvataggio ". La mia soluzione lo fa, senza accoppiare il sistema di salvataggio e il sistema di password. La risposta più votata ha gli stessi lati negativi della mia, con l'aggiunta che richiede che l'intero gioco sia progettato per adattarsi al metodo.
NPSF3000,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.