Bonjour. Je souhaite depuis un petit moment avec un ami, créer un mmorpg médiéval par navigateur, du genre de "Alidhan.net".

Le principe est simple. Se déplacer sur une carte créer avec RPG Maker XP.
Ceci est tiré d'Alidhan.

Je voudrai que quand on clique sur les cases autour du personnage, le personnage bouge et les cases suivent.
Mélanger à de l'ajax mais je pense que c'est le même principe que "poster un commentaire en ajax", pourquoi en ajax ? Pour être plus fluide et recharger la map automatiquement au clic pour faire apparaître (si ils viennent d'arriver) de nouveau joueurs sur la carte,
c'est un peu embêtant de se faire tuer car la carte ne se recharge pas quand on se déplace.
A et, quand il y a des arbres, par exemple sur le screen ci-dessus, je voudrais que les cases disparaissent et que la personne ne puisse y aller.

Apparemment c'est simple.. mais je n'y arrive pas. Je vois pas comment en fait.

Je remerci d'avance pour votre aide.

15 réponses


Guilhem
Auteur
Réponse acceptée

J'ai déjà commencer à coder en PHP effectivement.
Juste que hier j'ai mis l'espace membre, au début pour tester y'avais qu'un membre (moi), donc dans ma page qui affiche tout y'avais "WHERE id='1'"; sauf qu'avec l'espace membre faut faire en fonction de l'id, même en récupérant l'id de la personne dans la variable "$_SESSION" à la connection je n'arrive pas à l'afficher, j'ai quand même réussi à afficher en fonction du Pseudo, sauf que pour le déplacement il veut pas marcher.

Je vais expliquer mon déplacement:
Il y a 8 cases autour du perso.
En haut à gauche, en haut, en haut à droite etc...
J'ai donc fait une condition:

<?php
session_start();
    if(isset($_GET'id'])) {

    CONNECTION A LA BASE DE DONNEE
    $sql = "SELECT * FROM membre WHERE id='{$_SESSION'id']}'";
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    ($d=mysql_fetch_assoc($req));

$move1= $d'largeur']-32;
$move2= $d'hauteur']-32;
$move3= $d'largeur'];
$move4= $d'hauteur']-32;
$move5= $d'largeur']+32;
$move6= $d'hauteur']-32;
$move7= $d'largeur']-32;
$move8= $d'hauteur'];
$move9= $d'largeur']+32;
$move10= $d'hauteur'];
$move11= $d'largeur']-32;
$move12= $d'hauteur']+32;
$move13= $d'largeur'];
$move14= $d'hauteur']+32;
$move15= $d'largeur']+32;
$move16= $d'hauteur']+32;
            $_GET"id"]=$id;
if($id == upleft){
        $largeur= $move1;
        $hauteur= $move2;
     $sql3="UPDATE membre SET hauteur='$hauteur', largeur='$largeur' WHERE pseudo='{$_SESSION'pseudo']}'"; 
     $req3 = mysql_query($sql3) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
    header("Location: map.php");
     }
if($id == up){
        $largeur= $move3;
        $hauteur= $move4;
     $sql4="UPDATE membre SET hauteur='$hauteur', largeur='$largeur' WHERE pseudo='{$_SESSION'pseudo']}'"; 
     $req4 = mysql_query($sql4) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
    header("Location: map.php");
}
if($id == upright){
        $largeur= $move5;
        $hauteur= $move6;
     $sql5="UPDATE membre SET hauteur='$hauteur', largeur='$largeur' WHERE pseudo='{$_SESSION'pseudo']}'"; 
     $req5 = mysql_query($sql5) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
    header("Location: map.php");
}
if($id == left){
        $largeur= $move7;
        $hauteur= $move8;
     $sql6="UPDATE membre SET hauteur='$hauteur', largeur='$largeur' WHERE pseudo='{$_SESSION'pseudo']}'"; 
     $req6 = mysql_query($sql6) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
    header("Location: map.php");
}
if($id == right){
        $largeur= $move9;
        $hauteur= $move10;
     $sql7="UPDATE membre SET hauteur='$hauteur', largeur='$largeur' WHERE pseudo='{$_SESSION'pseudo']}'"; 
     $req7 = mysql_query($sql7) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
    header("Location: map.php");
}
if($id == downleft){
        $largeur= $move11;
        $hauteur= $move12;
     $sql8="UPDATE membre SET hauteur='$hauteur', largeur='$largeur' WHERE pseudo='{$_SESSION'pseudo']}'"; 
     $req8 = mysql_query($sql8) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
    header("Location: map.php");
}
if($id == down){
        $largeur= $move13;
        $hauteur= $move14;
     $sql9="UPDATE membre SET hauteur='$hauteur', largeur='$largeur' WHERE pseudo='{$_SESSION'pseudo']}'"; 
     $req9 = mysql_query($sql9) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
    header("Location: map.php");
}
if($id == downright){
        $largeur= $move15;
        $hauteur= $move16;
     $sql10="UPDATE membre SET hauteur='$hauteur', largeur='$largeur' WHERE pseudo='{$_SESSION'pseudo']}'"; 
     $req10 = mysql_query($sql10) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
    header("Location: map.php");
    }
}
else{
echo "Erreur 404";
}
?>

Sans les sessions tout marche, dès que j'ai rajouter ça, y'a plus rien >_<.
Ça m'affiche une page blanche.

Salut,
je ne pense pas que ce soit si simple que ça comme tu le dis. Ah mon humble avis, ca va demander un bon développement avec des coordonnées X et Y etc...
Je ne suis pas apte à pouvoir te répondre alors je vais laisser les plus expérimentés donner ton avis.

Désolé et bonne chance

A+
Stef

Guilhem
Auteur

Je te remerci ^^. Certaines personnes disait qu'avec des connaissances en php c'était faisable, j'en ai un peu mais j'ai pas d'idée ^^.

Le déplacement en temps réel n'est possible qu'en javascript et flash. Donc pour le PHP déjà c'est impossible. Ensuite, ce type de jeu est souvent en flash, mais il est surement possible de le faire en javascript. La différence étant qu'en javascript il faudra que tu fasses passer tes informations à PHP en ajax alors qu'en flash tu peux les retranscrire directement je ne me trompe pas. Voilà :)

Guilhem
Auteur

Je préférerais passer par JS, php/ajax ayant plus de facilité que de passer par du flash où je ne connait strictement rien.

Hors, ce jeu est en php à la base donc... ^^. Mais pour le temps réel à la limite on va dire qu'on l'enlève. Mais pour un déplacement sans recharger je serai plutôt. Ou en rechargeant..

En rechargant je pense que ça peut devenir pénible car pas très "stylé", sinon et bien ajax alors. Regarde du côté du javascript comment gérer les coordonnées.

Tiens je pense que tu peux faire ce que tu veux avec ça :)

http://forum.zebulon.fr/findpost-t172497-p1455787.html

A mon avis, tu ai oublier de le faire en flash ton jeu ...

Guilhem
Auteur

Et eux: http://www.alidhan.net ils l'ont pas fait en flash.. Juste du php/mysql et de l'ajax.

Guilhem
Auteur

DevAddict > Au début je ne pensais pas que ta solution m'aiderai en fait si.

Voici le fonctionnement que je veux essayer:
sur ma page: carte.php je repère les coordonnée du gars que je stoque dans la BDD dans un champ "hauteur" et "largeur". Si la personne actualise elle reste là où elle est.
Les cases autour de lui ou des flèches, lui propose d'aller sur un "move.php?move=right (ou autre)" l'id est important il indique 'up','left', 'right' 'down'.

Ensuite sur move.php il récupère si c'est un déplacement 'up','left', 'right' ou 'down', qui enlève ou rajoute 32px et il édite la BDD puis il redirige sur carte.php.

Le clic marche en ajax comme pour "envoi de formulaire en ajax" pour eviter de recharger.

Ça pourrait marcher ?

Apparement http://www.alidhan.net utilise du JS pour les déplacements: http://data.alidhan.net/js/fonctions.js

Je vais essayé d'être le plus bref possible

<u>#1</u>
Je sais pas trop ce que vous avez déjà coder jusqu'a présent mais j'espère que si tu as décidé de faire ce projet en PHP, tu t'es lancé en OO.

Premièrement il faudrait que tu crées tes objets correctement.

L'objet le plus important serait le personnage:
variables:
id
nom
point_de_vie
point_d_action
pos_x
pos_y

actions:
...
deplacer(direction)
...

à coter de ça tu a une BDD qui reprend toutes variables de l'objet

<u>#2</u>
Tu as ton tableau de jeux, et tes personnage placée (lors du chargement, il va récupere les donnée qui est dans la BDD pour placer les persos)

Disont que tu veux faire bouger le personnage avec le touche directionnel du clavier.
Tu crée un key listener (facile avec jQuery) que lorsque l'utilisateur up/right/down/left, tu utilises en AJAX la fonction de ton oject "deplacer(la_touche_appuyé)", qui vérifie si il y a droit, si oui, modifie dans la BDD pos_x et pos_y et avec ton JS (jQuery par exemple) tu deplace ton personne sur ton plateau

EDIT:
Ok ça ressemble peut etre a rien ce que je viens de décrire mais en même la question était vraiment très large et comprend trop plein de paramètre

switch déjà:

$_GET"id"]=$id;

en

$id=$_GET"id"];
Guilhem
Auteur

Merci ça marche :).
Maintenant je ne vois pas comment je pourrais faire pour que quand on veut passer un warp (une case qui ressemble à un tourbillon dans le premier screen, ça sert à changer de carte) on soit obliger d'être à côté, pour le moment on peut être à 30 cases du warp pour quand même pouvoir l'activer.

Guilhem
Auteur

Et comment afficher les autres joueurs sur la carte ?

Guilhem
Auteur

Pour le warp j'ai trouver.
Je cherche pour pouvoir afficher le monde qu'il y a...