JeuWeb - Crée ton jeu par navigateur
[Réglé]Gérer base de données - 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 : [Réglé]Gérer base de données (/showthread.php?tid=1461)

Pages : 1 2


[Réglé]Gérer base de données - zigzog - 11-07-2007

Salut à tous,

Voici mon 2e post! Le pemier est pour un probleme de positionnement sur la carte...

J'explique mon "probleme", c'est plutot des conseils que j'ai besoin, je pense.

Mon jeu est entre ogame et travian sur le principe. Il y 3 peuples: mutant, robot, humain. Le joueur pourra posséder un nombre infinie de territoire(village, planete pour recadrer l'idée)(en theorie...).
Je voudrais savoir comment faire mes tables...

Mon idée:
-table 1(profil):id,pseudo, mdp,description,date derniere visite, ...

-table 2(territoire1):id,pseudo,niveau batiment1, niveau batiment2,..., niv combatant1, niv combatant2, ..., nombre combatant1, nbre combatant2, ...,.... (il y en a 40 environ)

-table3(territoire2): la même chose que pour la table2
...et ainsi jusque sont dernier village.

Mes tables ne sont elles pas trop grandes?
Est ce qu'on peu stocker les données plutot dans des fichiers?

Mon idée est elle faisable? si non, avez vous des idées?

Merci d'avance!


RE: Gérer base de données - alfanor - 11-07-2007

Euh tu veux faire une table qui liste tout les bâtiments ? Tu en as que 5-6 alors j'espère ? Tongue

Ce qu'il faut faire c'est une entrée dans une table PAR bâtiment. En gros une table contenant :

- id_joueur
- id_village (ou carte, ou planète, ou enfin le truc quoi)
- batiment
- niveau_batiment

...


RE: Gérer base de données - zigzog - 11-07-2007

alfanor a écrit :Ce qu'il faut faire c'est une entrée dans une table PAR bâtiment. En gros une table contenant :

- id_joueur
- id_village (ou carte, ou planète, ou enfin le truc quoi)
- batiment
- niveau_batiment

...
pourquoi dans la table mets tu, batiment et niv_batiment? niv_batiment est le seul utile, non?

alfanor a écrit :Euh tu veux faire une table qui liste tout les bâtiments ? Tu en as que 5-6 alors j'espère ? Tongue

Ce qu'il faut faire c'est une entrée dans une table PAR bâtiment.
En faite chaque table comporte tous les details d'un village:
-niveau de chaque batiment(j'en ai 20)
-nombre de combatants du village(les presents et ceux en attaque)(9 types de combatants)
-niveau des 9 types de combatants
-quantité de chaque ressource dans le village(4 ressources)


RE: Gérer base de données - alfanor - 11-07-2007

Ouai, mais cette technique t'obligeras à modifier à chaque fois la Base De Donnée pour ajouter une unité dans ton ou un bâtiment ...

Sinon je met "batiment" car il faut bien savoir quelle est le bâtiment qui a le niveau "niveau_batiment", car un "niveau_batiment" pommé dans la cambrousse il peut appartenir à n'importe qui (donc à personne en l'occurrence)


RE: Gérer base de données - Single Dark - 11-07-2007

Ah tiens c'est pas comme technique çà.

Moi aussi je tourné avec une entré par planete, donc a chaque changement, je n'avais juste qu'à modifier la table qui correspondait.


RE: Gérer base de données - zigzog - 11-07-2007

Je crois qu'on ne s'est pas bien compris
exemple d'un bout de ma base de donnée

**********************************
--id--pseudo--niv_bat1--niv_bat2--niv_bat3--
***********************************
--1--george-- 5 -- 2 -- 4 --
***********************************
--2-- bibou -- 2 -- 1 -- 5 --
***********************************

Quand je vais interroger le le niveau du batiment 2 de bibou j'aurais bien 1 donc pas besoin de nommer le batiment, non?

Mais autrement oui à chaque fois qu'une unité va se creer je l'ajouterais au total(enfin à chaque actualisation).

tu as une idée de comment faire si le gars à 50 villages?


RE: Gérer base de données - Mysterarts - 12-07-2007

J'ai du mal à comprendre ton problème (et j'ai l'impression de ne pas être le seul ^^)
Pour ce qui est des bâtiments, pour éviter d'avoir des tables à rallonge, on préfère habituellement la technique :
TABLE JOUEURS
id - nom
1 - Mysterarts
2 - zigzog

TABLE BATIMENTS
id - nom
1 - Mine d'or
2 - Mine de charbon

TABLE BAT_JOUEUR
id_joueur - id_batiment - nivo
2 - 1 - 5

Avec ces 3 tables, on trouve alors que le joueur zigzog à 1 mine d'or niveau 5.
Mais je n'ai pas l'impression que cela soit ton problème ^^
Tu nous parle de niveau de bâtiment, puis dans la phrase d'après, d'unité => ??
Et je ne comprend pas si cette question à un rapport avec le nombre de village (bref j'y comprend rien XD).
Ce que je ferai pour avoir plusieurs village pour un joueur, c'est :
TABLE JOUEURS
id - nom
1 - Mysterarts
2 - zigzog

TABLE VILLAGES
id - id_joueur
1 - 2
2 - 1
3 - 2

Dans cet exemple, on voit que le joueur zigzog à 2 village, et Mysterarts 1 seul...
Donc si tu pouvais essayer de ré expliquer ton problème si je suis à coté de la plaque...

Mysterarts


RE: Gérer base de données - Roworll - 12-07-2007

Juste un petit soucis de design de base de données apparemment.
D'après ce que j'ai compris :
un joueur peut avoir plusieurs villages.
un village est composé de plusieurs batiments.
un village abrite plusieurs unités
un village possède plusieurs stocks de ressources

La structure que tu utilises Zigzog n'est pas assez souple et ne permet pas de gèrer une infinité de villages pour un joueur.

Je vais beaucoup paraphraser Mysterarts en essayant d'aller un peu plus loin dans les explications.
On commence par la table joueurs
Table Joueurs
joueur_id....joueur_nom
1............Zigzog
2............Mysterarts
3............Autrejoueur


Jusqu'ici, rien de bien compliqué.

Maintenant, il faut ajouter la notion de village.
Comme un joueur peut en avoir plusieurs,il est recommandé de faire une table spécialement pour les villages.
De plus, un village n'appartenant qu'à un seul joueur, inutile de faire une table de liaison à ce niveau.
Comme il y a peu de chance que de nouvelles ressources voient le jour et que tous les villages ont les même ressources, je les inclue dans la table village

Table Village
village_id....joueur_id....nb_or....nb_bois....nb_fer....nb_pierre....village_nom
1.............1............2000.....1000.......250.......2300.........ZigzogTown
2.............1............5000.....100........1000......300..........ZigzogCity
3.............2............2300.....2000.......1500......4000.........MysterartsCapital


On voit ici que Zigzog possède deux villages (ZigzogTown et ZigzogCity) et Mysterarts un seul (MysterartsCapital). On voit également en ligne la quantité de ressources dont ils disposent
Jusqu'ici, pas de gros changements avec ce que propose Mysterarts.

Vient ensuite le problème des batiments.
Je suppose que tous les villages ne possèdent pas dès le départ tous les bâtiments.
Pour éviter de polluer la base de donées avec des informations inutiles, on va commencer par faire une table qui référence tous les bâtiments puis une table de liaison qui indiquera quel village possède quel bâtiment (et à quel niveau)

En découpant ta base de données de cette manière, tu gagneras en souplesse mais aussi en place. Dans ta méthode initiale, tu dis avoir 40 champs pour stocker les batiments et les unités. comme un village à sa création ne possèdera pas tous les bâtiments et unités disponibles, cela fera un beau gachis d'espace dans la base de données.

Mais revenons à la structure de la table :
Table Batiments
batiment_id....batiment_nom
1..............Ecurie
2..............Grenier
3..............Caserne


Ensuite, il faut faire la table qui va contenir les informations associées à un bâtiment donné pour un village donné.

Table village_batiments
village_id....batiment_id....niveau
1.............1..............2
1.............2..............4
3.............1..............1
3.............3..............5


On voit grâce à cette table que
- le village 1 (ZigzogTown, qui appartient à Zigzog, cf table Village) possède une écurie niveau 2 et un grenier niveau 4.
- MysterartsCapital (village 3) possède un grenier niveau 1 et une caserne niveau 5
On peut éventuellement inclure dans le design de cette table le joueur_id. Ca peut être utile si jamais tu as besoin de savoir rapidement combien un joueur donné possède casernes/écuries/etc à travers tous ses villages.

Cette structure souple te permet de
- possèder plusieurs villages pour un joueur
- rajouter des types de bâtiments sans avoir à changer ta base de données
- connaître le type de bâtiment et leur niveau pour chacun des villages de ta base de données.
- économiser de la place dans la base de données car seuls les informations pertinentes y sont enregistrées.

Il est conseillé d'utiliser cette même structure pour les unités également (une table unités qui liste les types d'unités existant et une table village_unités qui fait le lien).

Cette modélisation permet encore une fois une grande souplesse dans l'évolution de ton projet. Rajouter une nouvelle unité ou un type de bâtiment se fera le plus simplement du monde.

Après, il faut connaître un minimum le SQL pour faire des jointures correctes entre les tables et ainsi récupérer ce qui t'intéresse


RE: Gérer base de données - zigzog - 12-07-2007

Re!
Merci de prendre le temps de me repondre, c'est sympa! (h)

Je me rexplique.
Chaque joueur à plusieurs villages.
Sur chaque village on peut construire des batiments et des unités. Les unités appartiennent au village et ne peuvent pas etre transferés, sauf pour assister d'autre village et attaquer.
Donc je dois connaitre les villages de chaque joueur et les batiments qu'il y a sur chacun d'eux.
je met ceci pour vous montrez comment je pensais faire ma table.


[Image: table110.jpg][/code][/php]

Ton idée me semble bien mais seulement si je n'ai qu'un village, mais compliqué à gerer avec 50 villages.
Merci d'avance pour vos reactions!

Je suis là toute la journée pour plus de details

ps: je suis noob quand même, je n'ai que 1semaine de connaissance

edit: oups je me suis trompé d'image!
En plus on a été plus rapide que moi!:respect:


edit2:
Je viens de lire le post de Roworll qui ma fait comprendre celui de Mysterarts.
J'ai très bien compris ce que tu as dit Roworll(enfin j'espere:heuuuSmile
C'est vrai qu'au niveau organisation cela sera beaucoup plus simple!
Direction site du zero pour jongler entre mes bases de données!

Merci beaucoup à vous de m'avoir aidé!
Je reviendrais poster pour expliquer ce que j'ai fait!

Amicalement, ZigZog


RE: Gérer base de données - Mysterarts - 12-07-2007

Pffff... Roworll qui me ridiculise en expliquant mieux que moi !! ^^
Enfin, bref, c'est ce que je voulais dire ^^
Tu as vu les (superbes) explication de Roworll après ton post, alors je ne sais pas si tu as compris, en tout cas, tu n'avais pas compris ce que je proposais au vue de ton shéma ^^
On ne te propose pas de créer une table par village !!! (Très mauvaise idée !) Mais 1 table qui recense tout les village, que cela soit le premier ou le 20em village du joueur ! Si tu veux, tu peux ajouter un champ "numéros" à ta table village, pour connaitre le numéros du village (logique ^^). TOUT dans la même table, j'insiste ^^
zigzog a écrit :ps: je suis noob quand même, je n'ai que 1semaine de connaissance
On est tous passé par là, pas de problème ^^

Mysterarts