Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    Programmare un gioco multyplayer/realtime

    Salve, riposto quì una sicussione aperta altrove dove però è stata chiusa perché nel posto sbagliato. A dire il vero il posto giusto dove postare su questo agomento "generico" non l'ho ancora trovato.
    Ora, non so neanche se PHP sia la sessione giusta, comunque, visto che programmo sopratutto in PHP e che la discussione si era orentata su questo linguaggio, spero che quì si possa discutere della cosa.

    Il mio dilemma riguarda l'esecuzione di giochi tipo Travian, Camelot, ManagerZone, ovvero giochi che girano su un server anche quando l'utente non è on-line.
    Su Travian e simili, quando si iniza una costruzione, per esempio, essa continua ad avanzare anche se l'utente va off-line. Oppure se parte un attacco, si può anche staccare dalla rete che l'attacco continua fino a destinazione ecc... Dunque ci deve essere un programma che gira 24h su 24h sul server che gestisce queste operazioni.

    Se io volessi creare un gioco del genere (premettendo che conosco PHP, MySQL, Flash, Javascript oltre che C# e i linguaguaggi OOP) quale sarebbe l'approoccio migliore? In che linguaggio dovrebbe essere programmato? Dovrei avere un server "mio" a disposizione su cui far girare il programma o basterebbe avere dello spazio web che supporti PHP/MySQL?

    Oppure, alternativamente, premettendo che dal lato utente vorrei usare Flash (AS3), sarebbe una pazzia pensare di gestire tutto tramire gli orari e le date così da "simulare" l'avanzamento degli eventi tramite js e php?

    Qualcuno si è mai barcamenato in una cosa del genere?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    209
    In realtà il problema di eseguire uno script php quando nessun utente è collegato non esiste.
    Mi spiego meglio, se nessun utente sta eseguendo lo script, nessun utente ha la possibilità di sapere come prosegue il gioco (nè del fatto che il gioco non sta proseguendo affatto).
    Per cui in realtà, a te basta salvare i dati dell'applicazione a intervalli regolari mentre l'utente la sta usando.
    Devi salvare questi dati in modo tale che quando l'utente rientra, usando questi dati e il tempo trascorso, tu possa mostrargli lo stato del gioco come se effettivamente fosse trascorso quel tempo (nonostante il gioco non si sia evoluto nel tempo, ma questo l'utente non può saperlo).
    In pratica, devi ricreare un salto temporale nel gioco dal momento della disconnessione, al momento della riconnessione, creando così l'illusione che il tempo sia trascorso.

  3. #3
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    o piu semplicemente usi uil corn che mette a disposizione linux (se il server e' linux)
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    65
    secondo me viene fatto un array in sessione con l'orario mktime di richiesta costruzione e viene calcolato l'mktime di fine realizzazione. Il timer della pagina client è in js, mentre ogni volta che aggiorni la pagina il server fa un mktime istantaneo e prende il numero di secondi mancanti aggiornandoti il conto alla rovescia.
    Dovrebbe però esserci un controllo ogni tot secondi se l'mktime della fine realizzazione della struttura/attacco è scaduto, oppure un sistema a timer sul server, che scade quando la costruzione è finita, effettua la query di aggiornamento del dato (con relativi controlli ecc).

  5. #5
    Mai sentito parlare del paradosso del gatto di Schrödinger?^^

    Se tu hai fatto partire una costruzione e ti sei scollegato, la tua costruzione è contemporaneamente finita e in avanzamento, finché qualcuno non guarda. Nel momento in cui qualcuno guarda, allora puoi definire se la costruzione è finita oppure no.

    Il metodo te l'hanno spiegato prima (registra l'ora di esecuzione, e il tempo da impiegare).

    PS: Ovviamente scherzavo sul paradosso del gatto... non è rilevante

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    209
    Originariamente inviato da dottwatson
    o piu semplicemente usi uil corn che mette a disposizione linux (se il server e' linux)
    Ma così facendo faresti lavorare il server a vuoto, consumando risorse per niente.

  7. #7
    Originariamente inviato da Walessio
    In realtà il problema di eseguire uno script php quando nessun utente è collegato non esiste.
    Mi spiego meglio, se nessun utente sta eseguendo lo script, nessun utente ha la possibilità di sapere come prosegue il gioco (nè del fatto che il gioco non sta proseguendo affatto).
    Per cui in realtà, a te basta salvare i dati dell'applicazione a intervalli regolari mentre l'utente la sta usando.
    Devi salvare questi dati in modo tale che quando l'utente rientra, usando questi dati e il tempo trascorso, tu possa mostrargli lo stato del gioco come se effettivamente fosse trascorso quel tempo (nonostante il gioco non si sia evoluto nel tempo, ma questo l'utente non può saperlo).
    In pratica, devi ricreare un salto temporale nel gioco dal momento della disconnessione, al momento della riconnessione, creando così l'illusione che il tempo sia trascorso.
    In generale questo approccio e' sensato in teoria e validissimo nella pratica. L'unico problema si pone quando la mole di calcoli puo' essere ingente, e allora e' meglio suddividere il lavoro in piu' pezzi e svolgerlo un po' per volta piuttosto che non fare nulla per ore e poi dover recuperare tutto insieme al primo utente che si collega.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    209
    ma anche supponendo di aggiornare una parte dei dati mentre c'è inattività, nel momento in cui arriva un utente "osservatore" sarà comunque necessario aggiornarli perchè il tempo è cambiato.
    E comunque per evitare di un solo grosso aggiornamento è sufficiente aggiornare solo ed esclusivamente ciò che gli utenti stanno vedendo, ottimizzando così le query.
    Se ho un milione di eventi che si stanno evolvendo, aggiorno solo quelli osservati da almeno un utente, non c'è bisogno di aggiornarli tutti.

  9. #9
    Si ma potresti fare degli aggiornamenti sulla base di altri dati non aggiornati.
    Ciao!

  10. #10
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da Walessio
    Ma così facendo faresti lavorare il server a vuoto, consumando risorse per niente.
    non necessariamente....

    dipende sempre dalle operazioni che devi fare ....

    è giusto anche il concetto dell' utente che aggiorna i dati solo nel momento in cui cerca quei dati...

    ma supponendo di voler simulare un mondo virtuale, con stati e guerre ed economie, allora il cron è quello che serve, perchè la vita di quel pianeta continua per i fatti suoi.

    il dispendio di risrse da parte del server dipende sempre da quello che devi fare.

    inoltre utilizzando il cron, e quindi un lasso di tempo regolare e continuativo, allora anche organizzare gli incroci di eventi diventa ancora piu semplice
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.