Tutorial di Lennaerts su PHP, mysql e multiplayer

1

Index

Fichiers attachés

Les fichiers suivants ont été attachés à ce tutoriel:

Statistiques

8,217 visites, 19,301 vues

Outils

Partager

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 29 Nov, 2013. Last updated 25 Feb, 2019

Informazioni trasmesse dal processo

Questa e' la parte piu' difficile da capire, e c'e' bisogno che abbiate una minima conoscenza di come ciclare sui dati dell'espressione tokenat().

Normalmente avremmo 1 stringa con il pipe | come separatore, ma se avete visto come abbiamo costruito i nostri dati, abbiamo fatto nuovi pacchetti dentro i pacchetti:

data1|data2|clustereddata3-1-1[]clustereddata3-1-2[]clustereddata3-1-3[-]|data4|data5|clusterdata6-1[]clusterdata6-2[-]

Come potete vedere, ci sono due gruppi nella posizione 3 e 6 (entrambi hanno un solo insieme ed ogni insieme e' chiuso da un [-], quindi possono esserci n sotto insiemi di dati in ciascuno di questi clusters).

Per arrivare a questi dati, avete bisogno di un loop nel loop principale, o di fare un primo loop per estrarre i sottoinsiemi e fare un secondo loop.

Io faccio un po' di entrambe le cose: all'inizio del loop recupero i dati in una certa posizione (ad esempio tutto quello che ho sulla posizione data3) e lo metto in una variabile locale (messages, gameshots, enemyunits); poi, durante il loop, posso ciclare su questi dati separati senza preoccuparmi a quale livello del subevent mi trovo, dato che alcuni loop non supportano piu' di un livello di sub event, diversamente dalle variabili che si trovano in cima al main loop.

Questo puo' essere un po' difficile da capire, ma in allegato trovate i file ed il capx ed un esempio funzionante online, cosi' come i file mysql ed i file php, tutti molto commentati.

Nel file PHP ci sono ancora un paio di funzioni:

// Intercetta la richiesta dei colpi sparati

    if($_POST[request] == "shotfired"){    // Cancelliamo i colpi sparati
        mysql_query("delete from shotsfired where stamped < DATE_SUB( NOW(), INTERVAL 8 SECOND)");
        // Esplodiamo i dettagli

$locs = explode("-", $_POST[extra]);

// Selezioniamo tutti i giocatori ancora in vita per aggiornare che qualcuno ha sparato

$query = mysql_query("select * from players where playercode != '$_POST

'");
[code]
        while($results = mysql_fetch_array($query)){

// Aggiunge l'informazione di uno sparo per ogni giocatore.

mysql_query("insert into shotsfired (shooter,shootercode,playercodes,angle) values ('$locs[3]','$_POST

','$results[playercode]','$results[playerangle]')");
[code]
       }
    }
    
    // Intercetta la richiesta di giocatore colpito
    if($_POST[request] == "playerhit"){
        // Esplodiamo i dettagli
        $locs = explode("-", $_POST[extra]);
        // Rimuoviamo tutti i colpi precedenti
        mysql_query("delete from shotsfired where `stamped` < (UNIX_TIMESTAMP() - 8)");
        // Aggiorniamo il numero di volte in cui il giocatore e' stato ucciso
        mysql_query("update players set state='yes', killed=killed+1 where id='$locs[2]'");
        // Aggiorniamo il numero di volte in cui il giocatore uccide
        mysql_query("update players set kills=kills+1 where id='$locs[3]'");
      	// Cicla su tutti i giocatori per far girare l'informazione della morte del giocatore

$query = mysql_query("select id from players where state='no'");

while($results = mysql_fetch_array($query)){

mysql_query("insert into messages (playerid,messages) values ('".$results[id]."', 'ID:". $locs[3]." has killed ID:".$locs[2]."')");

         } 
        // Chiudiamo con il codice del giocatore
       $message = $locs[2]."|".$_POST[code];
        }
      
    // Intercetta la richiesta di giocatore ucciso che deve essere resettato
    if($POST[request]=="playerrestart"){

mysql_query("update players set state='no' playercode='$_POST

'"); 
[code]
    }
     

Nel capx ho aggiunto molti eventi che dovrebbero essere ovvi, come i controlli del giocatore ed i missili sparati/distrutti.

Per capire quando un giocatore e' ucciso, e' abbastanza semplice:

Il giocatore spara ed invia l'informazione al database, per informare tutti i giocatori vivi che ha sparato. Quando colpisce un bersaglio, viene mandata l'informazione, ed il nemico viene distrutto al ciclo successivo di updatepositions, in maniera da rendere il piu' simultanea possibile la morte su tutti i client.

Ecco tutto :) Buon divertimento!

Spero non sia tutto troppo confuso... sentitevi liberi di fare domande! :D

In bocca al lupo!

update: sistemato il codice e corretti alcuni errori, migliorati i titoli delle pagine.

.CAPX

multiplayer.capx

Download now 501.64 KB
  • 0 Comments

Want to leave a comment? Login or Register an account!