2012-04-17 20 views
5

Sto sviluppando un sito Web che è una sorta di gioco. Il progresso degli utenti viene salvato in un database MySQL.Come salvare i progressi di gioco in un database MySQL

Voglio andare su questo facendo avere una tabella salva con una colonna di salvataggio (ID) e una colonna di progresso, in cui il progresso è del tipo di dati di dati. Quando l'utente inizia, l'avanzamento è impostato su (ad es.) '0'. Se procede al livello 1, il progresso è impostato su "0 # 1", il livello due lo rende "0 # 1 # 2". L'ordine dei livelli è gratuito e voglio salvarlo. Quindi il progresso potrebbe essere '0 # 4 # 2 # 15' e così via.

È un buon modo per farlo? Non ho esperienza con SQL e non voglio fare qualcosa di incredibilmente stupido. Ho letto molte informazioni confuse su tavoli, chiavi esterne e quant'altro ...

Voglio ringraziarvi per il vostro tempo leggendo questo e non vedo l'ora di rispondere.

Ryan

+0

Si prega di dividere questo in più domande. –

+0

Intendi forse "cache" piuttosto che "buffer"? – Widor

+0

@ Jan Hai ragione. – Ryan

risposta

2

risposta alla tua domanda 1

non vorrei affrontare il problema in questo modo. Vorrei creare 3 tabelle: una tabella Levels (chiave primaria di 'levelKey'), una tabella Users (chiave primaria di 'userKey') e una tabella User_Levels con una chiave composita di 'levelKey' e 'userKey'. Quando un utente completa un livello, inseriscilo nella tabella User_Levels. Poi per vedere se un utente ha completato un livello è un semplice selezionare:

SELECT 'a' FROM User_Levels WHERE userKey = ? AND levelKey = ? 

Se il numero di righe è> 0, l'utente ha completato il livello

+0

Questo è un approccio molto secondo me. Se è necessario mantenere l'ordine in cui è stato completato un livello, è possibile avere una terza colonna in User_Levels con il valore ordinale. Ad esempio, se l'utente 2 completa i livelli 1, 4 e 2 in quell'ordine, la tabella avrebbe per '(userKey, levelKey, ordinalValue) 'le voci' (1,1,1), (1,4,2), (1,2,3) '. – mdoyle

+0

Vero, ho elencato solo le colonne nella risposta che è necessaria (le chiavi). È possibile utilizzare qualsiasi quantità di informazioni che descrivono Livelli, Utenti o la relazione tra i due (User_Levels). –

+0

"Questo è un approccio molto" = "l'osservatore è un approccio molto migliore". Sheesh. – mdoyle

1

Circa la prima domanda, se il gioco/i livelli sono non lineari personalmente, adotterei un approccio diverso; Vorrei semplicemente aggiungere una tabella che contiene una colonna per l'ID utente e una colonna per il livello completato. Quindi, se l'utente 1 ha completato i livelli 0, 4 e 7, la mia tabella avrebbe 3 righe:

UID levels_completed 
1 0 
1 4 
1 7 

Chi vostre altre domande, è possibile utilizzare javascript eventi e ajax per rilevare la chiusura della pagina, ma non vorrei contare su quello; Vorrei semplicemente eseguire le query ogni volta che necessario. E se la tua sessione è distrutta, sei già in ritardo ...

+0

Beh, i livelli sono più come "sezioni" e ce ne saranno un sacco. L'ordine è importante perché il giocatore può andare avanti e indietro. Sto leggendo i progressi in un array quando il giocatore riprende il gioco. Con un gran numero di utenti e un gran numero di sezioni per utente, è ancora un buon approccio? – Ryan

+0

@Ryan Questo è solo un esempio di base, ma se si desidera aggiungere ulteriori informazioni, è possibile aggiungere colonne contenenti informazioni aggiuntive. In entrambi i casi le operazioni saranno più facili su una tabella come questa che su una tabella con molte informazioni compresse in un unico campo. – jeroen

2

Per quanto riguarda la domanda 2, direi che la quantità di query non è il problema. Dopo tutto, sei scrivendo i dati nel database, senza accedervi. Personalmente, invierei un "salvataggio" al database, ogni volta che un utente completa effettivamente un livello.

watcher ha pubblicato un buon approccio per dividere i livelli e gli utenti in tabelle diverse. La sequenza di progresso può essere vista dall'ordine in cui il progresso viene registrato negli User_Level, quindi non è necessario memorizzare qualcosa come 1 # 3 # 4 # 9

Probabilmente vorrai inviare il salvataggio in background con ajax, in modo da non interrompere il gioco. Esaminare jQuery's $.post method, ad esempio. O se il tuo gioco è in flash, puoi utilizzare un URLRequest.

Problemi correlati