|
From: Duca <sen...@gm...> - 2002-05-25 13:44:54
|
------- Start of forwarded message ------- From: Bernardo Innocenti <be...@de...> To: Duca <sen...@gm...> Organization: Develer Subject: Fwd: Re: [Dlab-devel] WC-Net? Date: 25/05/02 1.49.22 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Friday 24 May 2002 21:25, Duca wrote: > Senza incasinare troppo le cose potremmo utilizzare un server centrale > che gestisce le varie connessioni: Add, rm, etc. player (utilizzando > magari un UDP un po' pi=F9 incasinato) Dopo di che i client si > comunicano a vicenda gli eventi: > player spare, player collide etc. Hmmm... potrebbe andare... Quindi il server dovra' dire a ciascun giocatore gli IP address di tutti gli altri, e ciascuno deve mantenere aggiornata una lista dei giocatori. Non e' grave... ma dobbiamo prevedere che i giocatori si connettano e sconnettano alla partita in qualsiasi momento. > sparo del player collide con asteroide =3D [casino] > [Quando uno sparo collide con un asteroide, quest'ultimo si divide in > 2 parti con direzioni casuali, le direzioni vengono elaborate solo da > chi ha generato lo sparo, gli altri attendono(per un po') il > risultato.] Ok... e mettiamoci anche i bonus: il fatto che venga fuori un bonus ed il tipo di bonus li determina chi ha colpito l'asteroide. Ma gli altri intanto sono andati avanti con l'asteroide intero, non basta dare gli angoli: bisogna anche dire la posizione iniziale perche' deve essere identica per tutti i giocatori. > Il movimento degli asteroidi =E8 ovvio ogni player se lo calcola da > solo. Temo pero' che ogni tanto sia necessario risincronizzarsi perche' i computer vanno a velocita' diverse e gli errori di approssimazione si accumulano in modo diverso. A lungo andare non torna piu' nulla... E come risolviamo il problema della "concorrenza" tra giocatori sfasati? Mi spiego con parole comprensibili: se in due sparano allo stesso asteroide e lo colpiscono, ciascuno crede di essere stato il primo perche' ci vuole del tempo prima che arrivi il messaggio dell'altro. A questo punto lo stato del gioco deve essere risincronizzato in qualche modo. Per esempio, ogni client potrebbe aggiungere un "timestamp" ai propri messaggi (per esempio il numero di millisecondi dall'inizio della partita). Quello con il timestamp minore ha ragione e l'altro deve togliersi i punti e rimettere gli asteroidi come ha detto il vincitore. Il problema e' che quando c'e' un lag notevole la cosa puo' avvenire di frequente. Nel gioco si spara a ripetizione ed e' possibile che un giocatore frammenti un asteroide due o tre volte prima di scoprire che l'aveva gia' fatto un altro. Ritornare alla situazione originale dopo questo casino e' molto difficile: l'oggetto Asteroid originale non c'e' piu', al suo posto ci sono degli Asteroid piu' piccoli che devono essere tolti e sostituiti con quelli dichiarati dall'altro giocatore. Ma i messaggi possono arrivare sfalzati in vari modi... inoltre gli spari che hanno colpito i nostri asteroidi sono gia' stati eliminati, invece avrebbero dovuto colpire qualcos'altro. Argh!!! > Io l'ho sparata, che ne pensate? Penso che sei il primo ad aver rotto il silenzio stampa sull'argomento e quindi hai fatto molto bene. Se non siamo capaci di discuterne a parole, figuriamoci farlo! ;) - --=20 // Bernardo Innocenti - Develer S.r.l., R&D dept. \X/ http://www.develer.com/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) iD8DBQE87tGCltU4TfxqZsoRAorHAJ9P2du9Afyvg0UCDL458Tx7Z64odQCgi3nc +MlBwE3LOtHrkktz0Bdb7NU=3D =3DHc37 -----END PGP SIGNATURE----- -------- End of forwarded message -------- |