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



Alliance - Lord_Mortacus - 27-04-2009

Bonjour à tous,
Voila, pour la création de mon jeu, j'aimerai qu'il y ai une sorte d'alliance que les joueurs peuvent créer et recruter d'autres joueurs pour la rejoindre... Tout ce qu'un alliance basique apporte quoi...
Mais... je suis confronté a un problème majeur, je ne sais pas le faire !! ^^...

Si vous trouvez un tuto qui me permette de le faire sur le web, je suis prenneur, car j'ai cherché, mais je n'ai pas trouvé...


RE: Alliance - keke - 27-04-2009

Hoy hoy,

Alors, je pense qu'avant de chercher un tuto, il faut que tu définisses exactement ce que peut faire "ton alliance".
Pour t'aider, imagine toi devoir expliquer cette "chose" à ta maman ^^. (je ne veux pas me facher avec elle, mais je ne l'imagine pas Hard Gameuse à Wow ou Daoc Smile )

Ensuite, les choses seront peut-être plus facile pour toi. Il ne me semble pas que tu vas trouver un Tuto pour faire exactement ce que tu cherches, mais il se pourrait qu'il existe des tuto dont la synthèse pourrait t'aider à réaliser ton projet.

Kéké


RE: Alliance - Rodrik - 27-04-2009

Ce serait plus un clan en somme non?

Si tu ne prévois pas d'interactions diplomatiques entre ces clans (type guerre, alliance, PNA) c'est très facile à modéliser, dans la mesure où un joueur ne peut appartenir qu'à un seul clan à la fois. Il te suffit d'une table clan et d'une table joueur, avec une relation 1:n entre clan et joueur, 1:1 entre joueur et clan. En clair une clé étrangère dans la table joueur qui pointe vers la table clan.

Je ne pense pas que tu trouveras un tuto pour modéliser ce genre de chose, dans la mesure où c'est trivial.


RE: Alliance - Lord_Mortacus - 27-04-2009

En effet, ce n'est pas une hard gameuse a wow, daoc ou dofus xD...

Eh bien en fait, j'aimerai une alliance, je sais pas si tu as joué a gladiatus, mais dans le même genre que celles de gladiatus (avant la prochaine mise a jour).

C'est a dire:
Une page de présentation de l'alliance ou l'on peut entrer un texte d'à peut près 50 000 caractères (on leur demande pas un roman pour présenter leur alliance ^^); ou il y a un résumé des choses principales de l'alliance, a savoir l'honneur actuel de l'alliance (l'honneur de tous les joueurs réunis dans l'alliance), l'or donné à l'alliance, le nombre de membres de l'alliance, le nombre maximum de personnes que l'alliance peut compter et le lien vers le forum de l'alliance (que le fondateur doit renseigner).
Lorsque l'on fait parti de l'alliance, on peut envoyer des messages aux membres de cette alliance.

Une page ou, si on est membre de l'alliance, on peut voir tous les membres qui la composent ainsi que l'or qu'ils ont donné a l'alliance, leur honneur et leur niveau respectif.

Une page ou l'on enregistre certains messages que l'on veut garder pour toute l'alliance, la différence avec la sorte de messages en haut, c'est que eux restent, ceux plus haut, c'est qu'ils vont dans la boite de messages et sont supprimés au bout d'un certain temps. Il faut bien sur être membre de l'alliance afin de les poster...

Une page "bâtiment de l'alliance" ou l'on ferait des dons afin qu'au bout d'un moment, a un certain niveau d'or atteind, on puisse la développer et en la développant, on pourrait recevoir plus de joueurs...

Mais, je ne sais comment coder tout ça ^^

Edit: Si, je prévois des interactions diplomatiques, guerres, alliances, pna comme tu as dis, sont prévus aussi...
Mais je ne compte pas coder quelque chose qui fait que deux membres d'alliances sous PNA ne puissent pas s'attaquer...


RE: Alliance - Zamentur - 27-04-2009

#Phase de conception
Il y a quand même quelques imprécision:
Citation :Une page "bâtiment de l'alliance" ou l'on ferait des dons afin qu'au bout d'un moment, a un certain niveau d'or atteint, on puisse la développer et en la développant, on pourrait recevoir plus de joueurs...
L'or disparait quand on développe l'alliance? je suppose que oui.
Comme tu as mis bâtiment sans s je suppose que c'est le bâtiment qui se développe (et non qu'il y a création de nouveau bâtiment). Par exemple par niveau (niveau qui pourront être retranscrit autrement ensuite)


Citation :Edit: Si, je prévois des interactions diplomatiques, guerres, alliances, pna comme tu as dis, sont prévus aussi...
Mais je ne compte pas coder quelque chose qui fait que deux membres d'alliances sous PNA ne puissent pas s'attaquer...
Je sais pas ce qu'est pna...
Mais pour le reste on va dire qu'il doit être possible de savoir si son alliance est ennemis, allié ou neutre envers une autre.


#Création des tables
Ok maintenant que c'est décris un peu mieux il est possible, comme le propose Rodrik, d'attaquer la création des tables correspondant à ce système d'alliance.

#Le MCD
En théorie, quand on a une description comme tu l'as faites, il faut, pour pouvoir transformer çà en tables, faire le MCD (Modèle Conceptuel de Donnée).

Personnelement, je ne le fais désormais plus que pour les grosses bases, car à force d'erreur j'ai désormais des réflexes. Cependant je vais faire une exception.

Tout d'abord j'ai lu l'ensemble des besoin exprimés, puis je les ai pris de façon détaillé en les transcrivant en uml.

Citation :Une page de présentation de l'alliance ou l'on peut entrer un texte d'à peut près 50 000 caractères (on leur demande pas un roman pour présenter leur alliance 34);
Ici j'ai créer une classe nommée `alliance` avec un attribut présentation représentant ce fameux texte de 50 000 caractères... J'ai extrapolé et me suis dit que l'alliance avait certainement un petit nom.
[Image: P1000548_p_u1240867072.jpg]

Citation :ou il y a un résumé des choses principales de l'alliance, a savoir l'honneur actuel de l'alliance (l'honneur de tous les joueurs réunis dans l'alliance),
Donc la j'ai modélisé la classe joueur, tu as certainement déjà créé la table qui lui correspond donc il faut considéré qu'il y a déjà tout les attribut indiqué dans ta table. Là tu parle de l'attribut honneur donc je l'ai ajouté.

Comme une alliance contient des joueurs j'ai mis un lien entre les 2 classes.
Du coté joueur j'ai mis 1..* ce qui veux dire qu'il peux y avoir 1 à plusieurs joueurs dans une alliance. Si il y a 0 joueur il n'y a plus d'alliance donc.

Du coté alliance il y a un 0..1 ce qui signifie que j'ai considéré qu'un joueur ne pouvait être que dans une alliance à la fois.
[Image: P1000549_p_u1240867072.jpg]

Citation :le nombre de membre de l'alliance
Là j'ai créé une méthode à la classe alliance et pas un attribut, en effet on peut calculer le nombre de joueur appartenant à l'alliance grâce à la relation qui lie les 2 classes. Il n'y a donc nul besoin d'un attribut.
NB: un attribut correspond souvent à une colonne et une méthode à une requête. Ici la requête serait du type
SELECT COUNT(*) FROM joueur WHERE id_alliance='$id_alliance'
[Image: P1000550_p_u1240867072.jpg]

Citation :l'or donné à l'alliance, le nombre maximum de personnes que l'alliance peut compter et le lien vers le forum de l'alliance
Pour l'instant j'ai ajouté 2 attributs à alliance (mais j'y reviendrait par la suite)

[Image: P1000552_p_u1240867072.jpg]
Citation : (que le fondateur doit renseigner).
Ah donc là il faut rajouter un lien entre la classe joueur et la classe alliance pour identifier celui qui dirige ou administre l'alliance.
NB: il y a une erreur c'est une relation (alliance) 0..1 - 1 (joueur)

[Image: P1000553_p_u1240867072.jpg]
Citation :Lorsque l'on fait parti de l'alliance, on peut envoyer des messages aux membres de cette alliance.
Bon alors là j'ai juste mis une méthode dans joueur, j'ai considéré qu'un système de messagerie çà se définit, or la on a juste çà comme info. Il est notamment possible d'utiliser les classes du forum...

[Image: P1000554_p_u1240867072.jpg]

Citation :Une page ou, si on est membre de l'alliance, on peut voir tous les membres qui la composent ainsi que l'or qu'ils ont donné a l'alliance, leur honneur et leur niveau respectif.
Bon j'ai rajouté l'attribut niveau à joueur, mais surtout j'ai viré or_recu pour créer une notion plus fine de compte.

Donc j'ai fait une classe `ligne_de_compte` et d'après le schéma chaque ligne de compte possède un `compte` débité et/ou un `compte` crédité. Si il n'y en a qu'un sur les 2 celà signifie que c'est de largent qui entre ou sort du jeu.

Une méthode solde() sur la classe compte permet de calculer la somme sur le compte en additionnant toutes les rentrée et en soustrayant les sorties.

Les alliances et les joueurs possèdent un compte d'où le trait entre leur classe respective et la classe compte. par contre un compte ne peux pas appartenir à une alliance et un joueur en même temps du coup on indique un XOR (OU exclusif).
NB: si une autre entité venait à pouvoir posséder un compte

[Image: P1000555_p_u1240867072.jpg]
Citation :Une page ou l'on enregistre certains messages que l'on veut garder pour toute l'alliance, la différence avec la sorte de messages en haut, c'est que eux restent, ceux plus haut, c'est qu'ils vont dans la boite de messages et sont supprimés au bout d'un certain temps. Il faut bien sur être membre de l'alliance afin de les poster...
Idem que pour la boite de message j'ai considéré que c'était à créer en connaissance des tables du forum

Citation :Une page "bâtiment de l'alliance" ou l'on ferait des dons afin qu'au bout d'un moment, a un certain niveau d'or atteind, on puisse la développer et en la développant, on pourrait recevoir plus de joueurs...
Donc là j'ai viré l'attribut limit_place pour un attribut niveau bâtiment. La limite de place pouvant être calculer en fonction de ce niveau. J'ai mis une méthode augmenter_niveau() qui créera la ligne débitante sur le compte de l'alliance et augmentera niveau_batiment

[Image: P1000556_p_u1240867072.jpg]
Citation :Edit: Si, je prévois des interactions diplomatiques, guerres, alliances, pna comme tu as dis, sont prévus aussi...
Mais je ne compte pas coder quelque chose qui fait que deux membres d'alliances sous PNA ne puissent pas s'attaquer...
Bon là j'ai mis une association sur la classe alliance, avec une classe d'association "statut"
Ainsi une alliance peut considéré comme ennemie ou allié d'autre alliance.
On ne créer pas de statut neutre cependant car dans ce cas on ne fait rien...
NB il y a un erreur aussi ici la relation c'est N à N et non 1 à N
[Image: P1000557_p_u1240867072.jpg]


#Le MLD
Maintenant qu'on a un MCD il faut traduire çà en modèle logique de donnée (donc sous forme de table presque)

On commence par la classe alliance:
On met les attributs de celle ci comme colonne.
On sait aussi qu'une alliance peux éventuellement changer de nom, donc on définit une clé artificiel (#id)
On a une relation (alliance) 0..1 - 1 (joueur) donc on choisis de le mettre du coté alliance(dirigeant=>joueur,) car sinon il y aurait des null pour tous les joueurs nétant pas dirigeant
Une alliance possédant un compte on définit aussi une clé compte qui sera le numéro du compte.
Citation :alliance(#id,nom,présentation,niveau,lien_forum,niveau_batiment,dirigeant=>joueur,compte=>compte)

Pareil on met les attributs comme colonne
puis on met une colonne alliance car la relation était de type (alliance) 0..1 - 1..n (joueur) si on avait voulu mettre la colonne dans alliance nous n'aurions pas pus car une colonne ne contient qu'une valeur or une alliance à plusieurs joueurs
Idem pour le compte que pour alliance
Citation :joueur(#id,honneur,niveau,alliance=>alliance,compte=>compte)

On créé la table compte qui sert juste à répertorier les id de compte, pour l'auto incrément.
Les liens à ligne_de_compte ne peuvent être matérialiser dans compte à cause de la relation 1 à plusieurs. (c'est le même cas que pour la colonne joueur impossible à mettre dans alliance)
Citation :compte(#id)

On met l'attribut somme comme colonne
Et on matérialise les liens aussi comme colonne
Citation :ligne_de_compte(#id,debite=>compte|Null,credite=>compte|Null,somme)
Comme on a une relation N à N on est obligé de créer une classe, comme il y a un élément (type) attaché avec une classe d'association on donne le nom de la classe d'association à la table.
Et on créé 2 colonnes l'une pour l'alliance qui as définit un statut l'autre pour l'alliance qui fait l'objet de ce statut.
NB: ici il est possible qu'une alliance considère comme alliés une alliance qui la considérerai comme ennemie.
Citation :statuts(#considérant=>alliance,#considéré=>alliance,type=ennemis|alliés)
Bref maintenant on a presque nos table SQL, il ne reste plus qu'à définir les types,les contraintes (unicité) etc... et les valeurs par défauts.

#Coder les actions possible
Il va donc falloir désormais coder les différentes fonctions représentant chacune une action, j'ai identifié dans ton texte:
- créer alliance
- indiquer un nouveau lien de forum
- changer la présentation de l'alliance
- augmenter le niveau du bâtiment de l'alliance
- lister les joueurs dans l'alliance et leur caractéristique
- compter le nombre de membre
- définir un statut sur une autre alliance
- Lister les statuts de l'alliance envers les autres
- écrire un message sur permanent

- adhérer à une alliance
- envoyer_message_à _alliance
- donner d l'or à l'alliance

- transférer de l'or d'un compte à un autre
- calculer le solde du coffre

Donc si tu code toutes ces actions, il ne te restera plus qu'à créer les affichage qui vont bien avec et ce sera quasiment dans la poche.


RE: Alliance - Argorate - 28-04-2009

Perso, mais peut etre que c'est parceque j'ai plus de facilité ou tout simplement l'habitude, je trouve l'étapes papier assez inutile pour des réalisations simpliste comme celle-ci. (déja que meme pour les complexes je m'en passe...)
Et je ne suis absoluement pas persuadé que quelqu'un qui ne sais pas visualiser l'algorithme dans sa tete pour une alliance, soit aidé par un MCD et autre conception papier.

La seul chose que je peux recommender, c'est affectivement de réfléchir et de noter sur feuille (ou bloc note) les idées des fonctionalités: "qu'es ce qu'une allience doit etre capable de faire?"
Une fois qu'on a répondu a ça, le tour est casiment jouer, il faut assuite l'implémenter.
Mais bon c'est pas censé etre le plus dur... c'est juste des INSTER, UPDATE, DELETE...


RE: Alliance - Zamentur - 28-04-2009

Je pensais la même chose au début, parce que moi j'ai appris (comme beaucoup ici) sur le tas... Et à force on a des automatismes.

Mais j'ai été convaincue dernièrement en voyant des gens qui ne connaissait pas les bdd utiliser ce genre de méthode et s'en sortir plutôt bien.

A vrai dire j'ai pas fait çà uniquement pour Lord_Mortacus mais plutôt pour ceux qui n'ont pas les automatismes en questions.
Cela dit c'est encore assez incomplet.

Là les vrai questions traité sont en fait, comment éviter les redondances (on le vois avec or_recu et limit_place qui sont supprimé. Ainsi qu'avec les méthodes nombre_de_membre() et solde().

Il manque en fait quelques choses sur le positionnement des clés.

Cela dit je suis d'accord, que l'étape mcd se fait de manière intuitive la plus part du temps.

Mais je me suis dit que çà pourrait peut être aider, à comprendre le mécanisme de pensé qui traduit un texte en des tables


RE: Alliance - rorchar - 28-04-2009

Ah ba moi ça m'aide vachement je pense que ça t'a pris du temps de préparer tout ça et je voulais t'en félicité merci beaucoup Zamentur!!:good: