JeuWeb - Crée ton jeu par navigateur
BDD et soldats - 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 : BDD et soldats (/showthread.php?tid=1487)

Pages : 1 2


BDD et soldats - zigzog - 19-07-2007

Salut!

Me revoici pour vous demandez des petits conseils...
Ceux que vous m'avez donné jusqu'à present sont Cool

La derniere etape de mon jeu et le systeme de combat ainsi que tout ce qu'il y a autour, c'est à dire le stokage des infos sur les unités!

tbl_soldats
id_soldat nom................Les couts......force....rapidité
1 ..........colonel ............ ?????.............2.........10....
2 ..........fantasin ........... ?????.............3.........10....
3 ..........lance roquette .. ?????.............5.........10....
4 ..........espion ............. ?????.............9.........10....
5 ..........tireur elite ........ ?????.............1.........10....
6 ..........diplomate ......... ?????.............3.........10....
7 ..........colonisateur..... ?????.............3........10....
8 ..........avion1 ............ ?????.............2.........10....
9 ..........avion2 ............. ?????.............2.........10....
(ce ne sont pas les vrais valeurs c'est juste pour l'exemple....)

tbl_solvil (table ou je stocke le nombre de soldats appartenents au village)
Ma question est ici comment faire pour gerer cette table?
mon "cahier des charges":
-chaque village possede ses propres unités
-les unités peuvent etre en assistance dans d'autres villages
-les unités peuvent attaquer :good:

est de que je la fais ainsi:
1er idée
tbl_solvil
-id_village
-id_soldat_IN (soldat se trouvant sur le village)
-nb_soldat_IN
-id_soldat_ASS (soldat se trouvant en assistance)
-nb_soldat_ASS
_id_village_ASS (id du village assisté)
-id_soldat_ATT (soldats en attaque)
-nb_soldat_ATT
_id_village_ATT (id du village attaqué)

je trouva ça bordélique(une seule assistance possible, les attaques ne sont pas un probleme etant donné qu'elles sont limités)

2e Idée
je fais 3 tables
tbl_solvil
-id_village
-id_soldat_IN (soldat se trouvant sur le village)
-nb_soldat_IN

tbl_solASS
-id_village
-id_soldat_ASS (soldat se trouvant en assistance)
-nb_soldat_ASS
-id_village_ASS

tbl_solATT
-id_village
-id_soldat_ATT (soldats attaquant)
-nb_soldat_ATT
-id_village_ATT
probleme pour cette table, chaque type d'unité va attaquer independament les une des autres à moin que j'ajoute une 5e colone avec un numero de groupe...


Bon voila je suis un peu pommé! j'ai l'impression que toutes ces idées sont brouillons, ou mals optimisées...

Je vous demande donc de me filer un petit coup de main en me guidant sur la stratégie à adopter.

Merci d'avance!

Amicalement, ZigZog


RE: BDD et soldats - Armage - 19-07-2007

Bonjour,

J'aurais tendance à dire qu'il faut identifier la partie qui change et à l'extraire, à la séparer du reste.

Ici tu as des villages, des soldats (et ça ça change pas). A priori, un soldat est toujours associé à un et un seul village (et ça doit pas changer tout le temps, si ?) , donc j'aurais mis un champs vil_id (id du village) en plus dans la table soldat.

Par contre, à un instant T, le soldat est soit dans son village, soit en assistance dans un autre village, soit en attaque sur un autre village.

Donc une table intermédiaire avec l'id du soldat, l'id du village et un statut (autochtone, en assistance, attaquant). Si tu ne gères pas des soldats mais des groupes, il faut rajouter un champs nombre d'unités.

Ca te fait trois tables : soldat, village, et la table intermédiaire.

Il y a certainement d'autres méthodes, bon courage.


RE: BDD et soldats - zigzog - 19-07-2007

Citation :Par contre, à un instant T, le soldat est soit dans son village, soit en assistance dans un autre village, soit en attaque sur un autre village.
cela me fait penser que ce n'est pas le cas...
En effet il y a aussi les unités qui sont en chemins...

Plus je reflechi et plus je me pomme...
Un tio coup de main svp :malheureux:

merki!
A+


RE: BDD et soldats - MaGIKeR - 19-07-2007

Salut, j'ai un projet de jeu sur papier pour le moment qui comprend des unités, des attaques et de l'assistance ..., et je pense procédé ainsi :
  1. Une table pour la "description" des unites comme ta tbl_soldats en faite. J'irais pioché les info dont j'ai besoin en temps voulu.
  2. Et une table "joueur" qui possedera tout les "parametres" du joueur comme son nombre de ressource mais aussi ses unité IN et OUT.
Mon problème étant qu'il va faloir gérer plusieurs types d'unites : les unités IN, les unités mercenaires ( envoyé en "assistance" à d'autre joueur ) et les unités envoyé attaqué un joueur. Mais peut etre aussi les unités "en chemin" pour l'assistance et les unités "en chemin" pour l'attaque.
Ce qui donne 5 types d'unités différentes donc je vais peut etre créer une autre table (qui va surement me compliquer la vie) qui gerera ces unites pour chaque royaume.

Cela ne va peût être pas t'aidé mais bon..
Ton topic poura m'aidé à y voir clair sur le systeme que je vais adopter parce que je ne vois même pas comment identifier quel unités a été envoyé où quand plusieur unités attaque par exemple -.-


RE: BDD et soldats - Mysterarts - 19-07-2007

Hello !
Je vais un peu me répéter avec Armage je crois...
Moi je ferais :

TABLE JOUEUR :
id | nom |...

TABLE VILLAGE :
id | id_joueur | ...

TABLE SOLDAT
id | nom | Les couts | force | rapidité |...

Jusque la, rien de nouveau...

TABLE SOLDAT_JOUEUR
id | id_soldat | id joueur | id_ville | mode

Bien entendu, id_soldat correspond à une ID de la table soldat etc...
Pour finir, puisque tu parle de déplacement :

TABLE SOLDAT_DÉPLACEMENT
id | id_soldat | id_ville_destination | date_arrive

Voila comment j'imagine les tables sans trop chercher loin...
Dans la pratique :
(pour l'exemple, une entrée de la table soldat est : 25 | Cyberthek | 21 | 45 | 10 et
une entrée de la table village est : 7 | 1 existe déjà)

1- Un compte est créé, une entrée table joueur est ajouté (2 | Georges)
2- Un village est créé, une entrée table village est ajouté (8 | 2)
3- Un soldat est créé, une entrée table soldat_ville est ajouté (85 | 25 | 2 | 8 | 1) le mode 1 correspond à : dans sa ville, peinard
A ce moment la, Georges à donc un village avec un Cyberthek dedans.
Maintenant, il veut envoyer en assistance son Cyberthek dans la ville du joueur 1 :
4- Une entrée table soldat_déplacement est ajouté (36 | 85 |7 | 12211144)
5- l'entrée 85 de la table soldat_ville est UPDATE : (85 | 25 | 2 | | 2)
EN effet, quand le champ id_ville est vide, on comprend qu'il est en déplacement, et le mode 2 correspond au mode assistance.
Un fois que le soldat est arrivé, on met l'id de la ville de destination de la table de déplacement.

C'est un peu brouillon, mais vous voyais l'idée ^^

Mysterarts


RE: BDD et soldats - denisc - 19-07-2007

Bonnes idées.
J'ajoute ma part de commentaires:
la table SOLDAT_JOUEUR (= SOLDAT_VILLE dans tes exemples) n'a pas besoin d'identifiant. Elle doit être composée d'un identifiant double : id_soldat + id_ville (pourquoi rajouter le id_joueur? il y a redondance avec la table ville dans laquelle l'id_joueur est présent).
Il n'est pas nécessaire de modifier le champ id_ville dans la table puisque, à partir du moment où il est en déplacement (2) en retour (-2), en attaque (3), en retour d'attaque (-3)..., il n'est pas en ville!
Si tu veux garder un historique ordonné de tous les déplacements, alors la table SOLDAT_DÉPLACEMENT nécessite son id. Dans le cas contraire, il est également inutile.


RE: BDD et soldats - Mysterarts - 19-07-2007

De toutes manière c'est tout moi : Je mais toujours trop de truc dans mes BDD (je me sert de join que depuis peu par exemple !! Pas encore pris les habitudes...) résultat je passe des journées à optimiser mes tables après coup ! T'es précision sont juste denisc ^^

Mysterarts


RE: BDD et soldats - denisc - 19-07-2007

J'ajouterai également 2 champs dans la table déplacement:
date_depart => Qui sera utilisé pour calculer une nouvelle heure de retour en cas d'annulation du déplacement
duree_stationnement => Qui indique le temps pendant lequel l'unité sera posté dans la ville avant de revenir automatiquement

Au moment du retour, on ajoute un nouvel enregistrement dans la table des déplacements:
-> Une entrée table soldat_déplacement est ajouté avec la ville d'origine comme destination et une durée de stationnement à -1 (infini)
-> l'entrée 85 de la table soldat_ville est mise à jour avec -2 = retour déplacement

Tu pourras également prévoir une fonction "retour anticipé" pour forcer une unité à revenir avant que son temps de stationnement soit écoulé.


RE: BDD et soldats - Zamentur - 19-07-2007

comme je l'expliquais dans un autre sujet, il est possible d'utiliser la table déplacement pour signaler la position... Du coup on a pas besoin de id_ville dans TABLE SOLDAT_JOUEUR...

NB: Ici je considère id_ville comme la ville ou se trouve le soldat, si il s'agit de la ville d'appartenance dans ce cas on a plus besoin de id_joueur comme il a été dit précédemment (d'ailleurs d'un point de vue évolutif c'est mieux de garder id_ville comme ville d'appartenance dans le cas éventuel ou une ville pourrait être annexé...)

Et oui car il suffit de regarder TABLE SOLDAT_DÉPLACEMENT avec la dernière date_ depart et la vitesse concernant le soldat pour en déduire si il est en déplacement ou si il est déjà arrivé Smile

On diminue ainsi la répétition des données (toujours faire gaffe à cette répétition!)

Pour ce qui est de la duree_de_stationnement tout dépend si on souhaite une rentrée automatique ou pas, et même dans ce cas j'aurais plutôt tendance à mettre un champs rentrer automatique avec un script qui inverse le chemin...

Citation :Si tu veux garder un historique ordonné de tous les déplacements, alors la table SOLDAT_DÉPLACEMENT nécessite son id. Dans le cas contraire, il est également inutile.

Je suis mitigé quand à cette méthode, pour ma part je préfère dans ce cas faire un Update dans la table SOLDAT_DÉPLACEMENT et un INSERT dans le même temps dans une table archive (faite pour garder beaucoup de chose) car sinon çà peut à la longue poser des problèmes de taille de table...


Enfin bon comme toujours la blinde de solution le tout etant de trouver la plus adapté...[/quote]


RE: BDD et soldats - zigzog - 20-07-2007

Merci pour vos reponses!
Ces champs seront inutile pour moi
date_depart , car impossible de rappeler les troupes parties
duree_stationnement , car ce ne sera pas automatisé
Il faudra un ordre de l'assistant ou de l'assisté pour que les troupes repartent.

dans la table DEPLACEMENT il manque l'appartenance au village, autrement ils sont à personne, non?

Mais un probleme reste...je ne fonctionne pas avec un soldat mais avec plusieurs et de types differents, donc de id_soldat aussi. Le probleme n'existe pas pour l'assistance(on s'en fou que les untiés arrivent independament), par contre lors d'une attaque...

Le fait de creer un numero de groupe est elle une bonne idée?

Voici mon idée

TABLE SOLDAT_VILLE
id_soldat | nbre_soldat | id_ville_appartenance | id_ville_occupation


TABLE SOLDAT_DÉPLACEMENT
id_soldat | nbre_soldat | id_ville_appartenance | id_ville_destination | id_groupe | date_arrivé


exemple:
1- Un compte est créé, une entrée table joueur est ajouté (2 | Georges)
2- Un village est créé, une entrée table village est ajouté (8 | 2)

3- 5 soldats(id_soldat=25) sont crées, une entrée table soldat_ville est ajouté (25 | 5 | 2 | 2) (nbre_soldat +1 à chaque creation) les soldats sont chez eux car id_ville_appartenance=id_ville_occupation
4- 4 soldats(id_soldat=12) sont crées(dans le même village), une entrée table soldat_ville est ajouté (12 | 3 | 2 | 2)

TABLE SOLDAT_VILLE
id_soldat | nbre_soldat | id_ville_appartenance | id_ville_occupation
.....25...........5.....................2..................................2............
.....12...........4.....................2..................................2............

TABLE SOLDAT_DÉPLACEMENT
id_soldat | nbre_soldat | id_ville_appartenance | id_ville_destination | id_groupe | date_arrivé | mode


mode: 1=assistance, 2=attaque

il decide d'assister la ville qui a pour id_ville 99 avec 6 soldats(4 soldats avec id_soldat=25 et 3 soldats avec id_soldat=12)



TABLE SOLDAT_VILLE
id_soldat | nbre_soldat | id_ville_appartenance | id_ville_occupation
.....25...........1.....................2..................................2............
.....12...........1.....................2..................................2............

TABLE SOLDAT_DÉPLACEMENT
id_soldat | nbre_soldat | id_ville_appartenance | id_ville_destination | id_groupe | date_arrivé | mode

.....25............4......................2...............................99....................10............12211144.....
.....12............3......................2...............................99................... 10...........12211144......1...

Une fois les soldats arrivés:
TABLE SOLDAT_VILLE
id_soldat | nbre_soldat | id_ville_appartenance | id_ville_occupation
.....25...........1.....................2..................................2............
.....12...........1.....................2..................................2............
.....25...........4.....................2..................................99............
.....12...........3.....................2..................................99............

TABLE SOLDAT_DÉPLACEMENT
id_soldat | nbre_soldat | id_ville_appartenance | id_ville_destination | id_groupe | date_arrivé | mode



Je l'a pense bien comme ça...non?
Je ne suis pas sur de moi, des fois je comprend pas tout ce que vous voulez dire...j'ai l'experience en moin...

J'attend vos reactions.
Merci beacoup d'avance!
Amicalement, ZigZog