JeuWeb - Crée ton jeu par navigateur
Comment gérer les pré requis des bâtiments ? - 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 : Comment gérer les pré requis des bâtiments ? (/showthread.php?tid=4926)

Pages : 1 2 3 4 5


Comment gérer les pré requis des bâtiments ? - dryzd - 21-06-2010

Bonjour à tous Wink

J'arrive avec une petite question.
Je suis entrain de faire un petit projet de jeu en ligne et j'arrive à l'étape de réflexion autour de la gestion des pré requis pour les bâtiments.

Par exemple :
Pour construire le bâtiment C, il faut le bâtiment A niveau 2 et le bâtiment C niveau 4.

Comment gérer ça au plus simple et performant ?
Une table de jointure ?
Autrement ?

Merci de votre aide à tous Big Grin

Dryzd


RE: Comment gérer les pré requis des bâtiments ? - atra27 - 21-06-2010

bah tu as forcément une table avec les id des bâtiments construits.

Dans l'idée je stocke mes définitions de bâtiments dans un array dans un fichier, donc c'est a adapter...
Code PHP :
<?php 
$bat
[1]['nom']="bat A";
$bat[1]['require']="1,2"; //ici pas de sens car le bâtiment aurai besoin de lui même pour être construit+ un autre

Si tu stocke en SQL, pour afficher les bâtiments dispos, un petit WHERE.
A la construction, tu refait le même WHERE en rajoutant AND id='$iddubatimentdemandé'
Si retourne rien: bat impossible
Si retourne info sur le bâtiment: on lance la construction (et on se sert de ces infos pour faire un output a l'user)

Par contre pour l'optimisation sa peut demander quelques indexs... je suis pas sur que sa soit la bonne solution pour la partie SQL vu que je travaille pas comme sa...


RE: Comment gérer les pré requis des bâtiments ? - dryzd - 21-06-2010

Merci de ta réponse,

Dans l'exemple que tu donnes, je crois comprendre qu'il n'y a qu'un bâtiment en pré requis.

Comment faire quand il y en a plusieurs ?


RE: Comment gérer les pré requis des bâtiments ? - atra27 - 21-06-2010

A voir avec l'architecture du reste mais tu peut par exemple faire comme j'ai fait:
Code PHP :
<?php 
$bat
[1]['require']="1,2"
explode sur cet var pour couper a la virgule
Tu as donc le bâtiment 1 puis le bâtiment 2 qui sont nécessaires...

Ensuite rien ne t'empêche de faire:
Code PHP :
<?php 
$bat
[1]['require'][1]=1;
$bat[1]['require'][2]=2;
$bat[1]['require'][3]=10;

Peut importe enfaite comment tu rassemble tes variables enfaite...
La première solution utilise un champ mais a besoin d'un explode+foreach
La seconde utilise plusieurs champs mais on peut se passer de l'explode...


RE: Comment gérer les pré requis des bâtiments ? - Sephi-Chan - 21-06-2010

C'est pourri et sale, les chaînes à explode. Autant utiliser un tableau sérialisé en JSON, par exemple.
Mais le mieux est souvent d'utiliser une relation de type many-to-many avec une table de jointure.


Sephi-Chan


RE: Comment gérer les pré requis des bâtiments ? - dryzd - 21-06-2010

Ok, donc on a un tableau avec les pré requis.

Prenons ton exemple, le bat 1 requière bat 1 au niveau1, bat 2 au niveau 2 et bat 3 au niveau 10. C'est bien ça ?

Comment je fais pour savoir si le joueur peu construire le bat 1 ?
Il faut regarder pour chacun des bat (1, 2 et 3) si ils ont le niveau requit ?
Et on boucle sur tous les autres bâtiments pour savoir si pour chacun de leurs pré requis sont atteints (avec à chaque fois la boucle ci-dessus) ?

Tu fais comme ça ou tu as trouvé une solution moins consommatrice ?
Sephi, je partais sur l'idée d'une table de jointure à la base, en effet Wink


RE: Comment gérer les pré requis des bâtiments ? - dryzd - 21-06-2010

Est-ce que ça ne serait pas plus rapide de gérer ça dans un cache plutot que de réinterroger les tables à chaque fois ?
Vous avez des idées ?
Wink


RE: Comment gérer les pré requis des bâtiments ? - christouphe - 22-06-2010

Quoi qu'il arrive, tu gères tes pré-requis lors de l'affichage de la page des bâtiments, donc lors du rechargement de cette même page. En passant par le cache, ce serait plus rapide, mais bon si tu fait la bonne requête, tu arrives à sortir l'information des bâtiments disponible en une fois.


RE: Comment gérer les pré requis des bâtiments ? - atra27 - 22-06-2010

Soit tu laissse le cache de mysql gere sa, soit on revient a ma solution: les fichiers...
Mysql c'est bien mais mysql sa consomme... Rien ne vaux un bon fichier pour les donnée statiques (quitte a la limite a le generer depuis des données sql)

Je te conseillerai d'ecrire un .php contenant un array des batiments+valeurs associées mais sephi va te conseiller un tableau en JSON comme c'est dit plus haut...

Perso je n'utilse pas JSON, il parait que c'est en natif sur php donc sa doit pas étre trop usine a gaz...

Encore une fois, la meilleure méthode est celle que tu sais mettre en place...


Edit: christouphe
Et pour 10 pages, j'ai 10 requetes...
Alors que si a la premiére requete tu ecrit un fichier, 1000pages=1requete...
Le cache dans une méme page est inutile dans le sens ou on fait rarement 2 fois la méme requete dans une méme page... et encore dans ces cas la le cache sql fonctionne bien :p


RE: Comment gérer les pré requis des bâtiments ? - php_addict - 22-06-2010

(22-06-2010, 08:28 AM)atra27 a écrit : Soit tu laissse le cache de mysql gere sa, soit on revient a ma solution: les fichiers...
Mysql c'est bien mais mysql sa consomme... Rien ne vaux un bon fichier pour les donnée statiques (quitte a la limite a le generer depuis des données sql)

pas si certain, j'avais fais ce genre de truc (un aray() dans une include)

finalement j'ai tout remis les parametres de mes batiments dans la base de donnée car j'avais besoin de faire des jointures mysql avec les données de mes batiments. et de plus je trouvais cela un peu "sale" de devoir inclure (include) des fichier de parametres un peu n'importe où et un peu n'importe comment...

mais dans un 1er temps les includes sont plus faciles a mettre en place c'est certain (en tout cas tel etait mon cas)