JeuWeb - Crée ton jeu par navigateur
Aide et renseignement combat php - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Aide et renseignement combat php (/showthread.php?tid=6519)

Pages : 1 2


RE: Aide et renseignement combat php - MicroNotSoft - 13-12-2012

Je pense également que c'est un bon compromis Smile


RE: Aide et renseignement combat php - dobi19 - 14-12-2012

Bonjour,

je pense que je suis pas loin d'y arrivé mais j'ai un soucis avec mon code php...

A chaque fois ça me crée une nouvelle ligne qui enregistre tout dans joueur (id_joueur, etc..) et je vois pas comment faire, je me suis dit peut être en récupérant uniquement la dernière ligne ajouté dans la table avec:

Code :
    $sql_combat = mysql_query("SELECT LAST_INSERT_ID() FROM combat");

Et non ça continu à rajouter des lignes...

Si des fois que, tu pourrais jeter un œil à ce que j'ai fait ce serait sympas:

Code :
if($partie['user_id'] != $combat['id_joueur'] && $combat['id_adversaire'] == 0)
    {    
    //La si l'id du joueur et différent de id_joueur, tout est stocké dans adversaire
    mysql_query("UPDATE play SET score = $score WHERE id= $game_id") or die (mysql_error);
    $sql = "INSERT INTO combat(id_adversaire, adversaire_score, adversaire_a_joue) VALUES('$partie[user_id]','$score','1')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());      
    }
    else
    {  
    //Sinon ici je crée un nouveau combat et je stock dans joueur
    mysql_query("UPDATE play SET score = $score WHERE id= $game_id") or die (mysql_error);
    $new_id = mysql_insert_id();
    $sql = "INSERT INTO combat(id_joueur, joueur_score, joueur_a_joue) VALUES('$partie[user_id]','$score','1')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());  
    }

Pareil la dans ce cas avec:

Code :
$new_id = mysql_insert_id();

Si je l’enlève du coup tout se stock dans adversaire... Et pareil en créant une nouvelle ligne à chaque fois.


RE: Aide et renseignement combat php - MicroNotSoft - 14-12-2012

Je comprend pas pourquoi tu utilises les tables play et combat.

Perso je ferais quelque chose comme ça :

Code :
if($partie['user_id'] != $combat['id_joueur'] && $combat['id_adversaire'] == 0)
{    
    //La si l'id du joueur et différent de id_joueur, tout est stocké dans adversaire
    mysql_query("UPDATE play SET score = $score WHERE id= $game_id") or die (mysql_error);
    $sql = "INSERT INTO combat(id_adversaire, adversaire_score, adversaire_a_joue) VALUES('$partie[user_id]','$score','1')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());      
}
else
{  
    //Sinon ici je crée un nouveau combat et je stock dans joueur
    mysql_query("UPDATE play SET score = $score WHERE id= $game_id") or die (mysql_error);
    $new_id = mysql_insert_id();
    $sql = "INSERT INTO combat(id_joueur, joueur_score, joueur_a_joue) VALUES('$partie[user_id]','$score','1')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());  
}

// Compter le nombre de combats où il manque un adversaire et où le joueur n'est pas le joueur actuel
$combat_en_attentes = mysql_query("SELECT COUNT combats WHERE id_joueur != " . $partie['user_id'] . " AND id_adversaire = 0");
if($combat_en_attentes > 0) {
    // Récupérer le premier combat en attente
    $query = mysql_query("SELECT combats WHERE id_joueur != " . $partie['user_id'] . " AND id_adversaire = 0 LIMIT 0, 1");
    $combat_en_attente = mysql_fetch_array($query);

    // Calculer le résultat et donner les récompenses, ici 3 points si gagné, 1 point si perdu, 2 points si match nul
    if($combat_en_attente['joueur_score'] > $score) {
        // id_joueur gagne
        $resultat = 1;
        mysql_query("UPDATE joueurs SET points = points + 3 WHERE id = " . $combat_en_attente['id_joueur']);
        mysql_query("UPDATE joueurs SET points = points + 1 WHERE id = " . $partie['user_id']);
    } elseif($combat_en_attente['joueur_score'] < $score) {
        $resultat = 0;
        // id_adversaire gagne
        mysql_query("UPDATE joueurs SET points = points + 1 WHERE id = " . $combat_en_attente['id_joueur']);
        mysql_query("UPDATE joueurs SET points = points + 3 WHERE id = " . $partie['user_id']);
    } else {
        $resultat = 2;
        // match nul
        mysql_query("UPDATE joueurs SET points = points + 2 WHERE id = " . $combat_en_attente['id_joueur']);
        mysql_query("UPDATE joueurs SET points = points + 2 WHERE id = " . $partie['user_id']);
    }

    // Modifier les valeurs de l'adversaire
    mysql_query("UPDATE combats SET id_adversaire = " . $partie['user_id'] . ", adversaire_score = " . $score . ", adversaire_a_joue = 1, resultat = " . $resultat . " WHERE id = " . $combat_en_attente['id']);

} else {
    // Création d'un nouveau combat
    $nouveau_combat = mysql_query("INSERT INTO combats(id_joueur, joueur_score, joueur_a_jouer) VALUES(" . $partie['user_id'] . ", " . $score . ", 1)");
}

Cela implique une table combats avec les colonnes (id, id_joueur, id_adversaire, joueur_score, joueur_a_joue, adversaire_score, adversaire_a_joue, resultat) et la table joueurs qui contient au minimum les colonnes (id, points).

Maintenant à toi d'adapter.


RE: Aide et renseignement combat php - dobi19 - 15-12-2012

Merci, cela à l'air de fonctionner, je l'ai adapté en fonction de mes besoins, le if fonctionne à merveille, il n'y a que le else qui n'a pas l'air de marché, j'ai voulu le vérifier avec un simple echo qui ne s'affiche pas, peu être une erreur de syntaxe dans une des requêtes, mais je vais fouiner pour trouver la solution.

Merci encore MicroNotSoft, bon weekend.


RE: Aide et renseignement combat php - Xenos - 15-12-2012

(Juste... attention aux injections SQL avec des requètes faites comme cela: si la source des données, par exemple $game_id, n'est pas fiable, aka, elle peut être fournie par un utilisateur et non par le serveur de jeu, il y a possibilité d'injection SQL, et souvent le résultat est catastrophique).