Accueil > Forum > > > > Gestion inventaire/équipement dans un jeu via php/Mysql
Gestion inventaire/équipement dans un jeu via php/Mysql
mercredi 24 novembre 2010 à 16:57:40 |
Gestion inventaire/équipement dans un jeu via php/Mysql

monoski
|
Bonjour à tous !
Voila je reprends depuis peu la programmation d'un mini jeu de rôle. Dans celui-ci les personnages évoluent un peu à la manière d'un personnage de world of Warcraft. Ils peuvent obtenir des objets à placer dans leur inventaire, puis en équiper d'autre sur leur personnage.
J'aimerai savoir qu'elle est la meilleur façon d'aborder les choses, alors voici quelques questions que je soumet à la sagesse de cette merveilleuse communauté :
- Comment gérer d'une part l'inventaire dans la BDD, je précise : dois-je intégrer l'inventaire de chaque personnage au sein de la table qui résume ses informations personnelles ? Si oui, dois-je créer une entrée au sein de la table par emplacement disponible dans l'inventaire ou puis-je compresser les données au sein d'une seule entrée tout en conservant la possibilité d'éditer une partie des informations qui y sont contenues (lors de la suppression d'un objet de l'inventaire par exemple). Je dois préciser qu'il sera possible d'augmenter le nombre d'emplacement d'inventaire disponible.
- Pour cela il faut tenir compte aussi du fait que je dois aussi utiliser les objets au sein de l'inventaire afin de les équiper sur mon personnage (casque) ou de les consommer (potion par exemple).
Pour le moment, j'ai créer une table pour les utilisateurs, et une table des objets qui répertorie l'ensemble des objets (nom, type, effet). Je pense d'autre part scinder cette table en deux, une pour les objets consomptibles, une autre pour les objets d'équipements.
Alors oui, toi développeur chevronné je requiert ton aide qui me sera précieuse. Quelles fonctions utiliser comment approcher la mise à jour de la BDD selon les hypothèses.
Je sais c'est large comme question et je ne fournis pas de code :'(
Merci à tous ceux qui m'ont lu !
Bonne journée à tous =)
|
|
jeudi 25 novembre 2010 à 03:02:27 |
Re : Gestion inventaire/équipement dans un jeu via php/Mysql

Dav_c
|
Vite dememe je dirais :
Code PHP : Comment gérer d'une part l'inventaire dans la BDD, je précise : dois-je intégrer l'inventaire de chaque personnage au sein de la table qui résume ses informations personnelles ?
Moi je ferais une table contenant tous les objets posible.
Une table des personnage comportant un champ pour chaque type d'objet
-Casque - torse ect...
Ansi qu'un table de configuration des personnage:
Genre le nombre d'emplacement disponible par sac ect...
Code PHP : Si oui, dois-je créer une entrée au sein de la table par emplacement disponible dans l'inventaire ou puis-je compresser les données au sein d'une seule entrée tout en conservant la possibilité d'éditer une partie des informations qui y sont contenues (lors de la suppression d'un objet de l'inventaire par exemple). Je dois préciser qu'il sera possible d'augmenter le nombre d'emplacement d'inventaire disponible.
Je vais me faire chialler après j'imagine mais je mettrais tous les ids des objet possèder dans le meme champ avec un split(';', $var);
Peutaire les séparer par sac dependament de ta vision.
Code PHP : Pour cela il faut tenir compte aussi du fait que je dois aussi utiliser les objets au sein de l'inventaire afin de les équiper sur mon personnage (casque) ou de les consommer (potion par exemple).
D'ou lutilisation d'un split pour traiter et enlever les objets sans devoir créer/supprimer un nouvelle insert a chaque utilasation.
Personnelement je ne couperais pas en 2 la table des objets + code pour rien je crois.
Pour finir tu peut developper un peu comment tu fais le moteur de jeux sa m'interresse.
|
|
jeudi 25 novembre 2010 à 03:06:23 |
Re : Gestion inventaire/équipement dans un jeu via php/Mysql

Dav_c
|
A oui aussi si tu veut un exemple essait de faire un serveur priver world of warcraft...
Ils function justement par db
|
|
jeudi 25 novembre 2010 à 21:10:43 |
Re : Gestion inventaire/équipement dans un jeu via php/Mysql

monoski
|
Merci très sympas pour les infos, tu peux m'en dire un petit peu plus sur le split le fonctionnement de cette fonction ? Puis je récupérer chaque objet sous forme de constante par la suite ?
En fait tu as décris le type de bdd à laquelle je pensais mais la fonction split dont tu me parles pourrait solver tous mes problèmes merci :-)
|
|
vendredi 26 novembre 2010 à 00:37:27 |
Re : Gestion inventaire/équipement dans un jeu via php/Mysql

TychoBrahe
|
Réponse acceptée !
Salut,
je mettrais tous les ids des objet possèder dans le meme champ avec un split(';', $var);
Non !
Dans une base de donnés relationnelle on en fait surtout pas ça, on créé une autre table avec, si besoin, une table de liaison, afin de faire une jointure (cf Des bases de données relationnelles et multivaluées). Si on commence à partir sur une chaîne dégueu que l'on devra spliter, le projet va très vite devenir ingérable.
@monoski : voici un petit modèle fait vite fait :
(lien vers l'image)
On part de la table Characters qui sert à stocker un personnage. Un perso dispose d'un nom, d'un niveau et d'une race. Pour sa race, on utilise l'id de la race correspondante dans la table Races.
Une race dispose d'un nom et peut avoir zéro, un ou plusieurs effets (la race du perso influant dessus). On joint donc la table Races à la table Effects grace à la table de liaison Races_has_Effects qui permet de metrte en relation un id de race avec un id d'effet.
Un perso pouvant avoir 0 ou plusieurs objets, on utilise également une table de liaison pour le lier à la table Items. La table de liaison dispose ici d'une quantité afin d'éviter de se taper des entrées en doublon. Afin de gérer le port d'un objet (un perso pouvant avoir 2 armes sur lui mais ne se servir que d'une seule par exemple), on pourra par la suite rajouter le numéro du slot utilisé.
Un item ayant un (et un seul) type, il est lié à la table Item_types (si plusieurs tyeps sont possible, une table de liaison est nécessaire). Un item disposant également de 0 ou plusieurs effets, il est lié à ta table Effects par la table de liaison Items_has_Effects.
Voilà, en quelques minutes on fait une ébauche de ce que l'on cherchais.
|
|
vendredi 26 novembre 2010 à 12:30:58 |
Re : Gestion inventaire/équipement dans un jeu via php/Mysql

monoski
|
Ce schéma semble optimisé et tu as l'air de savoir de quoi tu parles.
Petite question, dans la table character has items, en fait à chaque fois qu'un objet est acquis par un individu je fais une nouvelle entrée dans la table, après je spécifie dans la table characters le nombre d'objet maximum ramassable, sachant que je vais faire en sorte que l'empilage de certains objets soit possible (ça ce sera géré en php).
Ou bien j'ai rien compris et dans la table character has items tu fais une ligne par character ?
D'autre part, je maîtrise pas du tout le joint (j'ai très peu d'expérience dans les bdd et j'ai toujours fais des doubles requêtes pour arriver à mes fins sachant pertinemment qu'une solution plus "propre" existait, pourrais tu me faire un petit exemple en utilisant les tables et les id présents en l'espèce ? (Je t'en demande beaucoup mais un exemple sera plus explicatif que toute les sources du web).
D'autre part, pour ce qui est de la table effects ça me parait un peu juste puisque à part le nom rien n'est pris en compte, enfin on peut pas déterminer à partir de la bdd quel sera l'effet concret de l'objet, dois-je en conclure que le traitement des effets se fait à partir d'une page php qui assignerait à chaque nom ou id d'effet un effet réeel, ou bien la table est incomplète et je dois rajouter ce qui me semble judicieux en son sein ?
Je te remercie énormément pour ton travail, puis-je savoir à l'aide de quel logiciel tu as pu matérialiser ce magnifique petit schéma ? :-) Je ne suis qu'un petit programmeur amateur, juriste et j'ai pas énormément de temps, j'admire l'aide complète que tu m'as apporté. Merci beaucoup !
Bonne journée à tous =)
|
|
vendredi 26 novembre 2010 à 13:50:37 |
Re : Gestion inventaire/équipement dans un jeu via php/Mysql

TychoBrahe
|
dans la table character has items, en fait à chaque fois qu'un objet est acquis par un individu je fais une nouvelle entrée dans la table
Tout à fait.
après je spécifie dans la table characters le nombre d'objet maximum ramassable
Seulement si c'est aléatoire. En effet, si ce nombre est fixe ou peut être calculé, alors
il ne faut pas lui faire un champ spécifique.
pourrais tu me faire un petit exemple en utilisant les tables et les id présents en l'espèce ?
Juste pour faire la remarque, une petite erreur s'est glissée dans la table Items_has_Effects : le champ Items_Item_types_id ne doit pas être présent (soucis de table auto-générée). J'ai également ajouté quelques tuples afin de tester tout ça. Ceci dit, voici quelques exemples :
Sélectionner le nom de chaque personnage ainsi que sa race :
Code : mysql> SELECT Characters.name AS 'name', Races.name AS 'race' FROM Characters INNER JOIN Races ON Characters.Races_id = Races.id;
+--------------+--------+
| name | race |
+--------------+--------+
| Loveandpeace | Pony |
| Blastator | Goblin |
+--------------+--------+
2 rows in set (0.00 sec)
Sélectionner le nom de tous les items dont dispose un personage donné, ainsi que le type de l'objet et sa quantité.
Code : mysql> SELECT
-> Items.name AS 'Item',
-> Item_types.name AS 'type',
-> Characters_has_Items.quantity AS 'quantity'
-> FROM (((Characters INNER JOIN Characters_has_Items
-> ON Characters.id = Characters_has_Items.Characters_id)
-> INNER JOIN Items
-> ON Characters_has_Items.Items_id = Items.id)
-> INNER JOIN Item_types
-> ON Items.Item_types_id = Item_types.id)
-> WHERE Characters.id = 1;
+---------------------------+--------+----------+
| Item | type | quantity |
+---------------------------+--------+----------+
| Shield of the undead pony | shield | 1 |
| Fire sword | fire | 1 |
+---------------------------+--------+----------+
2 rows in set (0.00 sec)
mysql> SELECT
-> Items.name AS 'Item',
-> Item_types.name AS 'type',
-> Characters_has_Items.quantity AS 'quantity'
-> FROM (((Characters INNER JOIN Characters_has_Items
-> ON Characters.id = Characters_has_Items.Characters_id)
-> INNER JOIN Items
-> ON Characters_has_Items.Items_id = Items.id)
-> INNER JOIN Item_types
-> ON Items.Item_types_id = Item_types.id)
-> WHERE Characters.id = 2;
+------------+------+----------+
| Item | type | quantity |
+------------+------+----------+
| Pony dress | cold | 3 |
+------------+------+----------+
1 row in set (0.00 sec)
Sélectionner tous les effets dont dispose un perso donné, donc aussi bien les effets raciaux que les effets des objets.
Code : mysql> SELECT Effects.name AS 'Effect'
-> FROM (((Characters
-> INNER JOIN Races
-> ON Characters.Races_id = Races.id)
-> INNER JOIN Races_has_Effects
-> ON Races.id = Races_has_Effects.Races_id)
-> INNER JOIN Effects
-> ON Races_has_Effects.Effects_id = Effects.id)
-> WHERE Characters.id = 1
->
-> UNION
->
-> SELECT Effects.name AS 'Effect'
-> FROM ((((Characters
-> INNER JOIN Characters_has_Items
-> ON Characters.id = Characters_has_Items.Characters_id)
-> INNER JOIN Items
-> ON Characters_has_Items.Items_id = Items.id)
-> INNER JOIN Items_has_Effects
-> ON Items.id = Items_has_Effects.Items_id)
-> INNER JOIN Effects
-> ON Items_has_Effects.Effects_id = Effects.id)
-> WHERE Characters.id = 1;
+-------------+
| Effect |
+-------------+
| kamiblast |
| poney power |
| bonus X |
| karapatate |
+-------------+
4 rows in set (0.00 sec)
D'accord ça fait des grosses requêtes mais :
- Avec un peu d'habitude ça s'écrit facilement et rapidement.
- C'est carrément plus simple, plus rapide et plus propre que de gérer ça manuellement avec PHP (ou autre) derrière.
|
|
vendredi 26 novembre 2010 à 14:09:54 |
Re : Gestion inventaire/équipement dans un jeu via php/Mysql

monoski
|
Aïe là j'ai un petit soucis conceptuel, tu envoies directement tes requête mySQL, moi je passais uniquement par PHP pour faire ça, comment peux tu faire en sortes d'envoyer directement la requête sans passer par un formulaire php (enfin j'utilise AJAX pour que ça soit agréable visuellement mais bon c'est du php au final).
D'autre part, pour ce qui est de la table effects ça me parait un peu juste puisque à part le nom rien n'est pris en compte, enfin on peut pas déterminer à partir de la bdd quel sera l'effet concret de l'objet, dois-je en conclure que le traitement des effets se fait à partir d'une page php qui assignerait à chaque nom ou id d'effet un effet réeel, ou bien la table est incomplète et je dois rajouter ce qui me semble judicieux en son sein ?
Bonne journée à tous =)
|
|
vendredi 26 novembre 2010 à 14:10:42 |
Re : Gestion inventaire/équipement dans un jeu via php/Mysql
|
vendredi 26 novembre 2010 à 14:17:22 |
Re : Gestion inventaire/équipement dans un jeu via php/Mysql

TychoBrahe
|
Aïe là j'ai un petit soucis conceptuel, tu envoies directement tes requête mySQL, moi je passais uniquement par PHP pour faire ça, comment peux tu faire en sortes d'envoyer directement la requête sans passer par un formulaire php (enfin j'utilise AJAX pour que ça soit agréable visuellement mais bon c'est du php au final).
Tu envoie tes requêtes comme tu l'a fait avant, ce n'est pas parce que j'ai utilisé la console mysql que ça t'empêche de faire autrement.
ou bien la table est incomplète et je dois rajouter ce qui me semble judicieux en son sein ?
C'est cela, c'était juste un exemple minimaliste que j'ai pris, donc forcément incomplet (d'autant plus que je ne sais pas ce que tu recherches exactement).
Sinon petite parenthèse : pour concevoir ses tables, MySQL Workbench c'est bien !
|
|
Cette discussion est classée dans : table, personnage, objets, inventaire, sein
Répondre à ce message
Sujets en rapport avec ce message
Choix d'implémentation [ par freekid ]
Bonjour,Je suis face à un probléme ou j'ai le choix entre plusieurs implémentations j'aurais voulu savoir la meilleur pour optimiser au maximum.Voila
formalaire de recherche dans 3 tables [ par aurochs18 ]
Bonjour à tous,Voilà, je suis néo dans PHP et je me suis embarqué dans un truc où je ne vois pas le bout du tunnel. HELP!!!!!Voici le soucis. J'ai un
égaliter entre 2 objets [ par nemetos ]
Bonjour,je crée un objet. Après l'avoir initialiser, je veux le mettre dans un tableau.Voici ma procédure :$i=0;$a = new objet1;$b = Array(new objet1)
Affichage Table ordonnées par Date de derniere modification [ par Kaotic21 ]
Bonjour, voila j'ai effectué une requete m'affichant les différentes tables de ma base de données, à coté de chacune d'elle je voudrais que sa fiche l
create table innodb [ par fakoly77 ]
bonjour,j'arrive pas à créer une table qui comporte une clé étrangère d'une première table.create table client (id_client VARCHAR(255) NOT NULL PRIMAR
remplir une table [ par kelm_by ]
salut tous le monde,j'ai 2table ou il ya id client 1 a2 b3 cclient idc a 0b 0c 0je veux remplir la 2eme table a ce
recuperer donnees de deux table dans une boucle [ par bubbledesavon ]
bonjour,voici mon souci ,ja i cree un petit moteur de recherche par date,qui fonctione tres bien ,mais ou ,dans le resultat , j aimerais y ajouter une
liste deroulante [ par georgesm ]
Bonjour,Je cherche de l'aide après avoir bien explorer le forum. Voici mon "petit"problème.J'ai une bd avec trois tables: table UN , table DEUX et tab
XSS dans requete sql un peu spéciale [ par mickadevelop ]
Bonjour à tous et toutes,J'ai une question concernant les requete mysql et la sécurité relative au injections sql.(cette requete est utilisé que pour
lister les colonnes d'une table SQL [ par garfield26 ]
Bonjour,je cherche à lister le nom des colonne et le contenu d'une table sql pour en créer une nouvelle requete.exemple : j'ai la table test avec les
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|