JeuWeb - Crée ton jeu par navigateur
prise de tete!! - 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 : prise de tete!! (/showthread.php?tid=952)



prise de tete!! - fiatt - 19-03-2007

Bonjour tout le monde.

Je suis en train de me prendre la tête depuis plusieurs jours et je n'arrive pas à trouver une solution satisfaisante.

Un joueur peut fabriquer et faire évoluer des machines.
Une machine est décomposée en 6 pièces qui sont évoluables jusqu'à un certain niveau.

Nous avons donc:

MACHINE 1
Pièce 1 => Niveau origine = 1 ; Niveau max = 3
Pièce 2 => Niveau origine = 1 ; Niveau max = 5
Pièce 3 => Niveau origine = 3 ; Niveau max = 4
Pièce 4 => Niveau origine = 1 ; Niveau max = 1
Pièce 5 => Niveau origine = 1 ; Niveau max = 2
Pièce 6 => Niveau origine = 2 ; Niveau max = 3

A chaque niveau correspond une valeur utilisée dans des calculs et ceci pour chaque pièce.

Le joueur peut faire évoluer chaque pièce indépendamment des autres. Par exemple il fait évoluer la pièce 1 au max en laissant toutes les autres au min.


Voici comment j'ai organisé ma bdd.

Une table 'valeurs' contient toutes les valeurs de toutes les pièces de tous les niveaux.

id_valeurs
nom_piece
niveau_piece
valeur_piece


La table suivante contient la composition des machines prédéfinies, au moment où le joueur la fabrique.

Cette table est nommée 'machines_de_base'.

id_machines_de_base
nom_machine
nom_piece
origine_max (0 ou 1) (permet de savoir si c'est le niveau d'origine ou le niveau max de la pièce)
niveau_piece


Vient ensuite la table contenant les machines des joueurs, quelles soient évoluées ou 100% d'origines.

Table 'machines_des_joueurs'

id_machines_des_joueurs
id_joueur
nom_machine
sufixe (permet de différencier les machines)
nom_piece
origine_max_actuel (0 1 ou 2)
niveau_piece
valeur
date_fin (champ où est indiqué la date de fin de fabrication/évolution)


Les 2 premières tables ne seront jamais modifiées. Ce sont les données "de départ". Le joueur aura la possibilité de modifier ses propres valeurs concernant ses machines qui seront stockées dans la table 'machines_des_joueurs'.

Chaque machine possédée est en fait divisée en 6 enregistrements de la table 'machines_des_joueurs' correspondant aux 6 pièces de la machine. 1 machine = 6 enregistrements
Comme cela l'évolution des pièces est très simple à faire car chaque enregistrement possède un champ 'date_fin' et un champ valeur.

Venons en maintenant à mon problème.

Je n'arrive pas à trouver une méthode efficace pour selectionner dans la base de données toutes les infos de la machine afin de valider sa fabrication...

nom machine -> pieces -> niveau origine/max -> valeurs

J'ai essayer avec des LEFT JOIN, des boucles dans des boucles ou des SELECT à la chaine mais il y a toujours un truc qui colle pas.

L'organisation de la BDD vous semble-t-elle judicieuse?


RE: prise de tete!! - Vinsento - 19-03-2007

Je n'arrive pas à trouver une méthode efficace pour selectionner dans la base de données toutes les infos de la machine afin de valider sa fabrication...

Je ne comprend pas trop...

D' apres ce que je comprend, tu voudrais que quand un joueur fabrique une machine, que tu puisse accepter cette fabrication ou la rejeter.
Est-ce cela?

Sinon tu peut m' enregistrer cela serait mieu.

vinsento@hotmail.fr


RE: prise de tete!! - Sephi-Chan - 19-03-2007

Tu as donc 2 tables qui contiennent des données constantes ? Pourquoi dans ce cas ne pas les mettre dans un array en PHP ? C'est simple d'utilisation et évite de faire des jointures et compagnie.


Sephi-Chan


RE: prise de tete!! - fiatt - 19-03-2007

Vinsento a écrit :D' apres ce que je comprend, tu voudrais que quand un joueur fabrique une machine, que tu puisse accepter cette fabrication ou la rejeter.
Est-ce cela?

Non ce n'est pas cela.

Mon problème se situe lors de la fabrication d'une machine "de base". Je veux sélectionner les infos dans les 2 tables "constantes" pour les recopiées dans la table "évolutive". Le problème est de savoir par quelles requètes, de quelle manière, je peux sélectionner ces infos dans 2 tables et interdépendantes, de façon optimale.

Citation :Tu as donc 2 tables qui contiennent des données constantes ? Pourquoi dans ce cas ne pas les mettre dans un array en PHP ? C'est simple d'utilisation et évite de faire des jointures et compagnie.

Peux-tu préciser ta pensée ?


RE: prise de tete!! - Sephi-Chan - 19-03-2007

Tu peux faire un array (à deux dimensions dans notre cas) en PHP de cette manière :

$machineDeBase = array(
1 => array("nomMachine" => "Tracteur", "nomPience" => "...", "origineMax" => "..."),
array("nomMachine" => "Camion", "nomPience" => "...", "origineMax" => "..."),
array("nomMachine" => "Voiture", "nomPience" => "...", "origineMax" => "...")
);

Ainsi :
Code PHP :
<?php 
echo machineDeBase[1][nomMachine]; // Renvoie Tracteur
echo machineDeBase[3][nomMachine]; // Renvoie Voiture

Si cette solution t'intéresse, tu peux lire la documentation sur la fonction array et la référence sur les arrays (plus générale mais tout aussi intéressante).].


Sephi-Chan


RE: prise de tete!! - fiatt - 19-03-2007

@Sepi-Chan:
la méthode du array m'obligerai à tout noter dans la page, ca risque de faire beaucoup!
Pour l'instant j'ai 10 machines avec 6 pièces chacunes. Chaque pièce possède de 3 à 5 niveaux chacunes....
Je préfère stocker tout ca dans la bdd pour pouvoir y faire des modifs facilement, sans toucher au code.
Merci quand même car ton idée va peut-être bien me servir Wink


RE: prise de tete!! - Sephi-Chan - 19-03-2007

Tu peux aussi le faire sous forme de fichier XML Smile, mais c'est plus compliqué.

L'utilisation de base de donnée risque de te donner du fil à retordre. C'est bien dommage, surtout pour des données statiques.
Et puis ça ne prendrait pas tant de place que ça dans un array, tu as juste à inclure cet array dans un fichier config.php que tu inclue en début de script...


Sephi-Chan, bonne chance en tout cas !


RE: prise de tete!! - denisc - 19-03-2007

Smile le XML est à la mode, donc!!!

Quand on parle de mettre les infos dans un tableau, ce tableau peut être chargé à partir de la BD avant les traitements. Ce qui te fait gagner du temps sur tes recherches et tes jointures à l'intérieur des données.