Piattaforma di gioco multiutente a tempo reale

2

Sto pensando di sviluppare un gioco multiutente in tempo reale, e voglio raccogliere alcune informazioni sulle possibilità prima di fare qualche sviluppo reale. Ho pensato al modo migliore per porre la domanda, e per semplicità, il modo migliore che mi è venuto in mente è stato quello di fare un'analogia con il campo di gioco (o campo da gioco) irebase.

Nel campo di gioco di darebase , ci sono due o più basi. Per iniziare, c'è una squadra su ogni base. Il gioco è un gioco di fantasia di tag. Quando due persone si incontrano sul campo, la persona che ha lasciato la sua base più recentemente a tempo acquisisce l'altra persona. Poi tornano alla base di quella persona.

Il gioco continua fino a quando tutti fanno parte della stessa squadra.

Quindi, analizzando ciò con un gioco per computer online, supponiamo che ci sia un numero indefinito di basi. Quando una persona inizia il gioco, ha una squadra che si trova a, ad esempio, le sue attuali coordinate GPS. Potrebbe essere un mondo virtuale, ma a fini di discussione, supponiamo che il mondo virtuale corrisponda alle reali coordinate GPS del giocatore.

Il software di gioco consulta quindi il database per vedere dove si trova l'altra base più vicina che è online e le due squadre giocano il loro gioco di tag virtuale. Nota che l'utente dell'altra base potrebbe avere una base diversa da quella gestita dall'utente corrente come base più vicina a lui, nel qual caso, si troverebbe in due battaglie simultanee, una con ciascuna base.

Quando vanno offline, lo stato dei loro giocatori viene salvato su un server da qualche parte. La logica di gioco richiede che i giocatori abbiano qualche tipo di logica di automa, in modo che possano difendersi autonomamente usando le regole di base, fino a quando il loro utente non ritorna online. L'utente non controlla direttamente i movimenti dei giocatori, ma emette direttive generali che influenzano la logica di movimento dei giocatori.

Penso che questa analogia sia sufficiente per inquadrare la mia domanda.

Ho guardato a smartfoxserver, ma non sono ancora convinto che sia l'opzione migliore o addirittura che funzioni affatto.

Una possibilità, ovviamente, sarebbe quella di implementare il mio server web, ma preferirei non farlo se esiste già un servizio esistente che potrei sfruttare.

Nota che darbase non è il gioco che intendo implementare, ma, riflettendo, potrebbe non essere una cattiva idea neanche.

Quello che sto cercando, in particolare, è un'architettura appropriata che può fare le seguenti cose:

  • Agisci come archivio di stati di gioco salvati

  • Fornisci una struttura che consente a più giocatori di comunicare tra loro.

  • (facoltativamente) eseguendo alcune delle logiche di gioco, ad esempio, nel gioco di darbase, chi determina chi ha etichettato chi? È uno o entrambi client o è il server?

Non sono mai stato coinvolto in un ambiente multi-utente in tempo reale, quindi posso solo immaginare le insidie di una decisione rispetto a un'altra.

    
posta Victor Engel 16.11.2012 - 02:38
fonte

2 risposte

4

Nel complesso, la tua domanda è probabilmente troppo ampia per poter rispondere in modo approfondito, ma proverò a darti alcuni suggerimenti nella giusta direzione.

Ci sono una serie di buone ragioni per cui è necessario avere un proprio server (web o altro):

In primo luogo, qualsiasi gioco di moderata complessità sarà abbastanza unico da non trovare un servizio esistente da collegare semplicemente per eseguire la logica di gioco. Non sono nemmeno a conoscenza di servizi che tentano di fornire cose del genere (a parte i servizi di base, come i dati o l'archiviazione delle risorse di gioco, ecc., In genere è ancora necessario scrivere e ospitare il proprio codice).

In secondo luogo, come con qualsiasi applicazione in rete, non ci si può davvero fidare del lato client (semplicemente non si può essere sicuri che il codice client non sia stato manomesso - periodo). La soluzione tipica consiste nell'eseguire la maggior parte della logica di gioco sul lato server (o almeno per verificare se ciò che i client dicono che è corretto o meno). Se non lo fai, prima o poi qualcuno modificherà il lato client per continuare a riportare vittorie e rovinare l'esperienza di gioco per gli altri.

executing some of the gaming logic, for example, in the game of darebase, who determines who tagged whom? Is it one or both clients or is it the server?

Qui, dobbiamo tenere presente il punto precedente, ma anche gli aspetti pratici. Molto dipenderà da come vorresti che il gioco si svolgesse. È un gioco di abilità, in cui i giocatori hanno una sorta di minigioco da giocare, o è semplicemente casuale? La differenza è nella quantità di comunicazione che si verifica tra il client (s) e il server. In quest'ultimo caso, avrei sicuramente il server a fare tutti i calcoli e servire semplicemente il risultato ai clienti. Nel primo caso, è molto più complicato, dal momento che si vorrebbe avere il gioco il più reattivo possibile per i giocatori, pur essendo ancora convalidato sul lato server. Implementare qualcosa del genere può essere molto difficile, quindi per il tuo primo gioco sceglierei l'opzione più semplice: basare il gioco su cose che puoi facilmente codificare, come semplici "rotoli" di numeri casuali, che possono essere tradotti in azioni sul client come "ti affondi al tuo avversario, ma lei schiva!", o qualcosa del genere.

Queste sono le realtà di base della situazione. Quasi certamente avrai bisogno del tuo server, dove vivranno la maggior parte dei dati e della logica del gioco. Per quanto riguarda le tue paure sul fatto che stai reinventando la ruota, non preoccuparti troppo - finché non provi a scrivere il server web da zero (come ha fatto notare Jimmy Hoffa), stai bene. In effetti, a giudicare dalla confusione nei commenti, penso che la maggior parte delle persone lo abbia dato per scontato; Stavo solo cercando di convincerti.

EDIT: Se desideri saperne di più sulle architetture reali, ecco un articolo che delinea Il gioco MMO di PowerUp di IBM (è in Java, ma i concetti superati restano gli stessi). Va notato che questo esempio si occupa di comunicazioni pesanti tra molti client e server; potresti essere in grado di progettare il tuo gioco in modo molto più semplice, con solo comunicazioni occasionali (ad esempio una volta per "battaglia").

    
risposta data 17.11.2012 - 09:22
fonte
1

I tuoi requisiti non precludono in modo specifico alcuna delle più comuni lingue sul lato server. Ma potresti prendere in considerazione qualcosa come node.js , che è particolarmente adatto a gestire il tipo di comunicazione "in tempo reale" che desideri tra i client.

Probabilmente vorrai un server centrale. So che hai detto che stavi guardando la comunicazione tra cliente e cliente. Ma ciò può essere problematico a causa di firewall / router. Ci sono sicuramente dei modi per aggirare questo problema (ad esempio, come fa skype), ma probabilmente non varrebbe la pena per te.

    
risposta data 17.11.2012 - 09:01
fonte

Leggi altre domande sui tag