JeuWeb - Crée ton jeu par navigateur
Représentation d'un arbre technologique en BdD - 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 : Représentation d'un arbre technologique en BdD (/showthread.php?tid=3106)

Pages : 1 2


Représentation d'un arbre technologique en BdD - Argorate - 27-09-2008

Hello world,

je suis entrain de voir comment passer de mon arbre tech sur papier à la BDD, et j'aimerai avoir vos avis pour essayer d'obtenir la solution la plus optimisé.

merci.
Pour vous aider a voir de quoi je parle:

[Image: Arbre-Passive-Magic.jpg]

Si on a un systeme comme celui-ci, qu'un element peut avoir besoin d'un ou plusieurs elements pour etre "débloqué".

Comment représenter cela en BDD?


RE: Representation arbre tech en BDD - Stefff - 27-09-2008

Mon idée est peut être foireuse (même certainement), mais en tant que petit noob, je ferai comme ca :

id compétence points_comp1_requis points_comp2_requis, etc ...

Evidement, la première comp a des zéros partout ... je sais pas si je suis très clair, et je sais pas si mon système est bon Tongue


RE: Representation arbre tech en BDD - Hakushi - 27-09-2008

competence_id - int - auto-increment
nb_points - int
name - text
level - int (note : représente le niveau de ta compétence dans ton arbre)
parent - int ( note: id de la competence parente)
reached - boolean (note: competence acquise ou non)

Donc en gros pour un arbre de type:
Code :
Comp 1 (id : 1)
   |
Comp 2 (id : 2)
   |
Comp 3 (id : 3) ___ Comp 4 (id: 4)
   |                          |
Comp 5 (id: 5)        Comp 6 (id : 6)
Tu as
Code :
id | nb_point | name | level | parent | reached
---------------------------------------------
1  | 2           | t      | 0      | NULL   |  1
---------------------------------------------
2  | 2           | r      | 1      | 1        | 1
--------------------------------------------
3  | 2           | w     | 2      | 2        | 1
---------------------------------------------
4  | 2           | as    | 2      | 2        | 0
--------------------------------------------
5  | 2           | ts    | 3      | 3        | 1
--------------------------------------------
6  | 2           | rs    | 3      | 4        | 0
--------------------------------------------



RE: Representation arbre tech en BDD - Argorate - 27-09-2008

Stefff: effectivement c'est une methode qui marche, mais qui est mauvaise, et qui limite le nombre d'ellement parent...

Hakushi: tu ne regle pas le cas où il y a plusieurs parent là...


RE: Representation arbre tech en BDD - Hakushi - 27-09-2008

La solution facile est d'avoir une table competence_parent
competence_id
parent_id

Comme ca on peut setter plusieurs parents sur une competence donnee

Code PHP :
<?php 
class Competence extends MySQL
{
private
$id;
private
$nb_point;
private
$name;
private
$level;
private
$parent = array(); //Array de Competence
private $reached;


public function
__construct($id = 0)
{
$this->table_name = 'competences';
if(
$id != 0)
{
$res = $this->selectOne(array('competence_id','=',$id));
$this->id = $res['competence_id'];
$this->nb_point = $res['nb_point'];
$this->name = $res['name'];
$this->level = $res['level'];
$this->reached = $res['reached'];

$this->setParents();
}
}

//Getters & setters.....


public function setParents()
{
$query = "SELECT parent_id FROM competence_parent WHERE competence_id = %d";
$res = $this->select(sprintf($query, $this->id));

foreach(
$res as $parent)
{
$this->parent[] = new Competence($parent['parent_id']);
}
}


public function
isTakable()
{
foreach(
$this->parent as $requis)
{
$takable = false;
if(
$requis->getReached()) $takable = true;
}

return
$takable;
}
}



RE: Representation arbre tech en BDD - Argorate - 27-09-2008

Heurk... que c'est moche! de l'objet php pour faire ça... :p
(c'est rien, n'y vois rien de perso, je n'aime pas me servir de l'objet quand il n'y a pas de quoi en tiré un reel avantage).

Bref, je prensais justement a 2 tables a la base, comme tu le suggeres, une pour constituer l'arbre, et l'autre pour les autre info a donner a chaque element.
Par contre j'aurais fais une 3eme table pour dire quel perso a quel magie.

C'est vraiment ce qu'il y a de mieux?


RE: Representation arbre tech en BDD - Hakushi - 27-09-2008

(hs : Hehe, ouais je sais, je suis un grand partisant du tout objet, mais j'ai ete eleve au C# , donc j'ai vraiment l'habitude de tout considerer comme un objet, et je trouve vraiment ca pratique :p Et bon j'ai du mal a sortir ce genre de chose du contexte objet faut dire :x )

Oui c'est certains, je ne tenais compte que de la gestion de l'arbre, il est sur qu'il faut une table pour faire un suivi des competences sur le personnage.

Pour ce qu'il y a de mieux, je sais pas, mais pour moi c'est la solution la plus obvious, et comme je suis un pourri de scientifique, pour moi la solution la plus simple me parait toujours etre la bonne.

[edit] Sephi-Chan : Tu viens de combler un trou de memoire. J'avais lu cet article sur developpez.com, mais pas moyen de me souvenir des details du fonctionnement, n'y d'ou j'avais lu ca


RE: Representation arbre tech en BDD - Sephi-Chan - 27-09-2008

Étrange ta vision du développement… Si représenter une compétence par un objet ne te paraît pas correct/utile, qu'est-ce qui peut l'être ?

Concernant ton problème, je te suggère la représentation intervallaire, décrite dans ces deux articles :

Par contre, cette modélisation ne permet pas d'avoir plusieurs parents, en l'état. On peut simuler ce comportement, toutefois, mais je pense que l'approche de Hakushi est plus pertinente en ce cas.

Je ne fais qu'ouvrir une piste. Wink


Sephi-Chan


RE: Representation arbre tech en BDD - Argorate - 28-09-2008

En l'occurrence, je n'ai besoin que de connaitre quel élément le joueur possède, sachant que dans mon cas il n'en procède qu'un, il est complètement inutile de perdre du temps a créer des classes et des objets pour quelque chose que l'on récupère dans une simple variable après un SELECT...

Bref, je pars donc sur se qu'on a dit, car les piste que tu fournis pourrons certainement aider dans d'autres cas, mais en l'occurrence, cela n'est pas applicable.

Merci Smile


RE: Representation arbre tech en BDD - Lord-Gargoyle - 08-10-2008

Hello,

Bon, je ne suis pas une référence, mais juste pour donner des idées.
Alors d'abord pour la table "joueur" tu as (je vois lol) 2 solutions, soit tu fais un truc sur 1 ligne :
id / joueur / lvl comp1 / lvl comp2 etc
ou bien sur plusieurs lignes
joueur / lvl comp1
joueur / lvl comp2

Et pour les liens, soit tu codes en dur (à chaque fois qu'une compétence est atteinte, tu regardes les compétences débloquées et par exemple tu les fait passer de -1 à 0 pour dire qu'on peut les upgrader)
Ou alors par exemple si pour avoir épée de feu il faut magie + épée, et pour avoir fleche magique il faut magie + arc
Tu crées une autre table "liens":
épée de feu / magie
épée de feu / épée
fleche magique / magie
fleche magique / arc

Moi pour ma part, je coderais en dur et je ferais une Table avec "une seule" ligne (pour chaque joueur sous entendu)...

Sinon il a l'air sympa ton jeu, le screen de ton arbre vient de ton jeu, ou c'est un arbre qui va juste ressembler au tien ?