JeuWeb - Crée ton jeu par navigateur
Update sur plusieurs tables - 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 : Update sur plusieurs tables (/showthread.php?tid=3312)

Pages : 1 2 3


Update sur plusieurs tables - Rouge - 22-11-2008

Bonjour,

Je voudrais que mon update fonctionne sur toutes les tables "lieu" présentes en base de données.

Explication:

J'ai actuellement une table "map" qui correspond à la carte de jeu "générale".
Sachant que les joueurs vont etre amenés à pouvoir créer des villes (et donc
des tables correspondantes, map_nomville1, map_nomville2, etc) et sachant qu'il y
a une multitude de scripts d'action "basiques" du genre, fouiller, abandonner, cacher, etc,
j'aimerai que ces scripts fonctionnent sur n'importe quelle map (table) et éviter de passer
par un switch, une boucle ou un array qui m'obligerait à
modifier régulièrement les programmes en fonction des tables créées (map_nomville1, etc)...

voici un exemple du bout de script pour mieux comprendre (avec les divers essais non concluants) :
Code PHP :
<?php 
$req
= mysql_query("SELECT posx, posy FROM membres WHERE id = $id; ") or die(mysql_error());
$rsa= mysql_fetch_assoc($req);
$posx = $rsa['posx'];
$posy = $rsa['posy'];

$requete = mysql_query("SELECT map FROM membres WHERE id = $id; ") or die(mysql_error());
$data= mysql_fetch_assoc($requete);
$map= $data['lieu'];


//$maj = mysql_query ("UPDATE '".$data['lieu']."' SET abandon='".$_SESSION['achat']."', qabandon='$quantité' WHERE posx= $posx AND posy= $posy; ");
//$maj = mysql_query ("UPDATE $map SET abandon='".$_SESSION['achat']."', qabandon='$quantité' WHERE posx= $posx AND posy= $posy; ");
//$maj = mysql_query ("UPDATE '$map' SET abandon='".$_SESSION['achat']."', qabandon='$quantité' WHERE posx= $posx AND posy= $posy; ");
$maj = mysql_query ("UPDATE '.$map.' SET abandon='".$_SESSION['achat']."', qabandon='$quantité' WHERE posx= $posx AND posy= $posy; ");



RE: Update spécial? - Sephi-Chan - 22-11-2008

Hello,

Ta modélisation n'est pas bonne. Tu ne devrais pas avoir à créer de nouvelles tables en cours de route.
Si les joueurs peuvent créer leur ville, c'est simplement une entrée supplémentaire dans la table des villes.

Il faudrait que tu nous décrive le fonctionnement de ton jeu pour qu'on puisse t'aider à bien modéliser.


Sephi-Chan


RE: Update spécial? - Rouge - 22-11-2008

Aie Aie Aie :heuuu:

Je vois ou tu veux en venir, le soucis?, c'est que lorsque je parle de creation de ville, quand le joueur entre en ville, cela débouche sur une nouvelle map (celle de ladite ville)...D'ou la creation d'une nouvelle table...

tu es en x20, y20, tu te déplaces vers x21,y20 et là y'a une ville: tu entres en ville et tu débouches sur une nouvelle map (celle de la ville).

C'est ainsi que je vois les choses sur mon jeu, s'il y a mieux, je suis preneur!
(mais il faudra bien m'expliquer, car la logique et l'optimisation chez moi, c'est un peu la galère :pleure2Smile


RE: Update spécial? - pascal - 22-11-2008

hello,

quand le joueur s'inscrit, c'est un nouveau joueur.
est-ce que tu crées une nouvelle table à chaque joueur ? non
tu crées une nouvelle ligne dans la table joueur.

pour les villes, c'est pareil :
tu crées une nouvelle ligne dans la table ville.

A+

Pascal


RE: Update spécial? - Sephi-Chan - 22-11-2008

Et bien quel est le problème ? Tu peux tout à faire avoir une table pour chaque carte (dans la ville et dans le pays), voir une seule table si les cases sont les mêmes à l'intérieur et à l'extérieur d'une ville.

Admettons donc que tu ai deux tables : cases_exterieur et cases_interieur.
Quand le joueur se ballade sur la carte du monde, ça utilise les cases de la table cases_exterieur.
Quand le joueur se ballade en ville, ça utilise les cases de la table case_interieur.
Quand tu crées une nouvelle ville, tu crées des cases pour elle (ça peut aller de quelques unes à plusieurs milliers).


Sephi-Chan


RE: Update spécial? - Rouge - 23-11-2008

Salut,

Je pense comprendre ou vous voulez en venir mais je n'arrive pas à construire corretement ma table "ville".

Voici la structure (allégée) de ma table map qui fonctionne impec pour la carte "globale"

http://www.casimages.com/img.php?i=081123120517474632787514.jpg

et voici la table ville

http://www.casimages.com/img.php?i=081123120517474632787515.jpg

sachant qu'une ville va forcément s'aggrandir, comment ajouter des coordonnées x et y (posx et posy) pour chaque ville dans ce cas là?


RE: Update spécial? - Sephi-Chan - 23-11-2008

Et bien tu ajoutes simplement des cases associées à ta ville.

Voilà comment je vois la chose pour la gestion d'une ville (et de sa carte intérieur) : une table Villes (avec des champs id, nom, posx, posy), puis une table cases_ville (avec des champs id, posx, posy, ville_id).

Ainsi, pour une ville d'identifiant 17, de nom "Jambon fumé", de coordonnées (13 ; 61) sur la carte, tu as plein de cases associés à la ville (grâce au champ ville_id de chaque case). Ainsi, quand tu en as envie, tu peux faire grossir une ville en lui ajoutant des cases facilement.


Sephi-Chan


RE: Update spécial? - Rouge - 24-11-2008

Pour la première table, pas de soucis.
Pour la seconde:
en reprenant ton exemple, ta ville "Jambon fumé" aura 17 en ville_id?
Pour un script de maj, lorsque la ville s'aggrandit, il faut donc bosser aussi avec ce champ ville_id?
Si c'est le cas, à quoi sert le champ id de la seconde table? :heuuu:


RE: Update spécial? - Sephi-Chan - 24-11-2008

En fait c'est simple. Il y a une table qui contient les villes et leurs informations, et une table qui contient les cases de toutes les villes. Donc tu as une table villes et une table cases_villes.

Si ta ville d'id 17 possède 4 cases, elle aura une entrée dans la table villes et 4 entrées dans la table cases_villes. Ces 4 entrées auront pour ville_id l'id de la ville à laquelle ils sont rattachés : en l'occurrence l'id 17.


Sephi-Chan


RE: Update spécial? - Rouge - 24-11-2008

ok, je lance des tests de script cette semaine et si tout est ok, je clos le topic.
merci encore (h)