JeuWeb - Crée ton jeu par navigateur
Apparition du perso sur la map[Résolu] - 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 : Apparition du perso sur la map[Résolu] (/showthread.php?tid=826)

Pages : 1 2


Apparition du perso sur la map[Résolu] - Pyl - 18-02-2007

Je n'ai pas de bug concernant l'apparition du perso sur ma map..
Mais par-contre, je viens d'implanter les batiments et avec eux les GQG's qui sont les lieux de réapparitions des joueurs en fonction du camp.
Le joueur en étant positionné sur la map doit se trouver dans un carré de 5*5 autour du GQG's qui lui correspond...
Seul soucis c'est que je n'ai aucune Idée de comment faire pour que déjà ça me selectionne l'id du bon batiment ( Donc en l'occurence id 1 ou 2 ) et je sais pas comment faire pour que le perso soit parachuté dans les 25 cases qui entoure le batiment lui correspondant...

Voici mon script a l'heure actuelle..

Code PHP :
<?
session_start
();
include(
'zone-page/haut.php');
include(
'zone-page/menu-gauche.php');
include(
'zone-page/droit.php');
include(
'bdd.php');
include(
'reglage.php');
include(
'function.php');

$req = $db->query("SELECT * FROM map WHERE perso='0' AND bat='0' ANd idbat='0'");
$nb_result = $db->affected_rows();
$nb = mt_rand(1,$nb_result);
for(
$i=0;$nb>=$i;$i++) $res = $db->fetch_array($req22);
$newX=$res22['X'];
$newY=$res22['Y'];
$sql = "UPDATE map SET perso='$id' WHERE X='$newX' AND Y='$newY'";
$req = mysql_query($sql) or die(mysql_error());
echo
'<center><br>Vous venez de retourner sur le champ de bataille.';
echo
'<br><a href="jouer.php">Rejoindre le front</a></center>';


include(
'zone-page/droit2.php');
?>

Merci d'avance pour votre aide !


RE: Apparition du perso sur la map - OncleJames - 18-02-2007

Le parachutage correspond au respawn sur mon jeux, mais je procède dans cet ordre :

- Selection des QG du camps du joueur
Je fais un rand sur le nombre de résultat, je selectione le QG choisi par un array.

Exemple :

Pc = QG

Code PHP :
<?php 
$query
= mysql_query("SELECT * FROM pc WHERE pc_camps='".$camps."'");
$i = 1;
while (
$pc = mysql_fetch_assoc($query) ) {

$tab[$i] = $pc['idpc'];
$i++;
}

$nbr_pc = $i-1; // Afin de ne pas avoir le dernier $i vide etant donné qu'on incrémente
$pc_choisi = mt_rand(1,$nbr_pc); // random du Pc

$idpc = $tab[$pc_choisi]; // Collecte les informations

- D'aprés les coordonées récupérés, tu fais une requete pour selectionner les cases de la carte du périmètre de parachutage.

-Tu fais une boucle en récupérant les idcase, et vérifiant si la case est vide.

Tu fais un rand sur l'idcase pour conserver un parachutage aléatoire.

Si jamais tu veux le code entier dis le moi, mais il n'est pas optimisé.

OncleJames


RE: Apparition du perso sur la map - Pyl - 18-02-2007

Oui je voudrais bien le code entier Smile
Histoire de m'inspirer de ce que tu a fais ^^

Car je suis honnete en programmation moi me faut en général des exemples sous les yeux, que du blabla ça me réussit pas :heuuu:


RE: Apparition du perso sur la map - OncleJames - 18-02-2007

Il n'est pas optimiser, pas encore eu le temps, et le système de rand sur l'idcase pas programmer encore aussi .

Code PHP :
<?php 
// Requiert id et matricule du joueur a rez ==> $idjoueur et $camps

$query = mysql_query("SELECT * FROM pc WHERE pc_camps='".$camps."'");
$i = 1;
while (
$pc = mysql_fetch_assoc($query) ) {

$tab[$i] = $pc['idpc'];
$i++;
}

$nbr_pc = $i-1;
$pc_choisi = mt_rand(1,$nbr_pc);

$idpc = $tab[$pc_choisi];

$query = mysql_query("SELECT x,y FROM carte LEFT JOIN pc ON carte.idpc=pc.idpc WHERE pc.idpc='".$idpc."'") or die(mysql_error());

// Recherche des bords de la zone de rez ( 3 ici )
$pc = mysql_fetch_assoc($query);
$zone_x_min = $pc['x']-3;
if (
$zone_x_min < 1 ) $zone_x_min == 1 ;
$zone_x_max = $pc['x']+3;
$zone_y_min = $pc['y']-3;
if (
$zone_y_min < 1 ) $zone_y_min == 1 ;
$zone_y_max = $pc['y']+3;

// Requete bord de la zone
$query2 = mysql_query("SELECT * FROM carte LEFT JOIN terrain ON carte.idterrain=terrain.idterrain WHERE x BETWEEN '$zone_x_min' AND '$zone_x_max' AND y BETWEEN '$zone_y_min' AND '$zone_y_max'");

// Boucle de vérification case non occupée
while ( $zone = mysql_fetch_assoc($query2) ) {
$zone_x = $zone['x'];
$zone_y = $zone['y'];
$query3 = mysql_query("SELECT x,y FROM perso WHERE x='$zone_x' AND y='$zone_y'");
$query4 = mysql_query("SELECT x,y FROM carte WHERE x='$zone_x' AND y='$zone_y' AND idpc!='1'");
$case_joueur = mysql_num_rows($query3);
$case_pc = mysql_num_rows($query4);

// Case vide ( pas de joueur, ni de batiment ), on insère dans la bdd
if ( $case_joueur == 0 && $case_pc == 0 )) {
mysql_query("UPDATE perso SET x='".$zone_x."', y='".$zone_y."' WHERE idperso='".$idjoueur."'");
echo
'<SCRIPT LANGUAGE="JavaScript">document.location.href="index.php?page=jouer&rez"></SCRIPT>';
}
}
// Fin du while

Voila, la zone à un rayon de 3, bien sur il faudra que tu remettes tes variables pour ton jeux

OncleJames


RE: Apparition du perso sur la map - Pyl - 18-02-2007

Merci bien cela devrait m'aider Smile

Ah oui, petite chose que j'ai oublié de demander.
En faite je n'ai qu'un GQG's par camps qui sont mis dans la table batiment et sont donc mélangé à tout les autres types de batiments...
Cela va t'il posé probleme ou pas ?


RE: Apparition du perso sur la map - Pyl - 18-02-2007

Bon allez j'avoue ^^
J'ai bien essayé de faire en m'aidant de ton script mais j'y suis pas arrivée...
En faite j'ai essayé de le greffer à mon code, en le modifiant bien entendu et en ne reprenant que ce qui m'interessais..
Mais ça a rien donné Sad

Voici le script

Code PHP :
<?
session_start
();
include(
'zone-page/haut.php');
include(
'zone-page/menu-gauche.php');
include(
'zone-page/droit.php');
include(
'bdd.php');
include(
'reglage.php');
include(
'function.php');

$sql = mysql_query("SELECT camp FROM membres WHERE id='$id'");
$camp = $sql['camp'];
if(
$camp=='Triple Entente')
{
$req = $db->query("SELECT * FROM map WHERE perso='0' AND bat='1' ANd idbat='0'");
/////A partir de la je coince ^^/////
$nb_result = $db->affected_rows();
$nb = mt_rand(1,$nb_result);
for(
$i=0;$nb>=$i;$i++) $res = $db->fetch_array($req22);
$newX=$res22['X'];
$newY=$res22['Y'];
$sql = "UPDATE map SET perso='$id' WHERE X='$newX' AND Y='$newY'";
$req = mysql_query($sql) or die(mysql_error());
echo
'<center><br>Vous venez de retourner sur le champ de bataille.';
echo
'<br><a href="jouer.php">Rejoindre le front</a></center>';


include(
'zone-page/droit2.php');
?>

Vous pouvez voir ou je coince c'est indiqué...
Ce que je n'arrive pas a faire donc... c'est de récuperer à partir de ma requette la position X et Y du gqg, ensuite de definir la zone de parachutage et après de verifier quelques cases sont libres et donc parachuter le perso sur cette zone...

Donc Re-merci d'avance ^^


RE: Apparition du perso sur la map - OncleJames - 18-02-2007

Il me faut quelques info encore pour t'aider dans le code .

- Dans ta table Map, sur la colonne bat, tu as 1 ou 0 Ou l'id du batiment ?
- Dans la table Batiment, tu as l'idbatiment , sa position ( x/y) ?


RE: Apparition du perso sur la map - Pyl - 18-02-2007

En faite, ma table batiment a id... Ma table Map a en effet bat et idbat. Mais idbat ne sert plus a rien je crois bien car j'ai fais en sorte que le champ bat contiene l'id du batiment, comme pour les persos en faite, tu comprend ce que je veux dire ?

Donc dans la table Map, la valeur de base de bat est de 0...
Quand elle est de 1 c'est le GQG de la Triple Entente, quand elle est de 2 c'est le GQG de la Triple Alliance... Ensuite 3, 4, 5 etc c'est d'autre batiments qui n'ont pas de camp spécifique

La Table batiment a donc id, nom du batiment, camp, etc...

J'espere que ça va pouvoir t'aider...
Je continue de mon coté moi ^^


RE: Apparition du perso sur la map - OncleJames - 18-02-2007

Le champ camps dans la table membre, c'est le texte : "Triple Entente" ou son id : 1 ?

Erf je viens de voir, c'est du texte


RE: Apparition du perso sur la map - OncleJames - 18-02-2007

Tu peux donner la composition des tables :

- Batiment
- Map

Et préciser si c'est du texte ou chiffre

Je m'y perd un peu dans les tables, je sais plus quel champs est ou :heuuu: