Le guide des jeux en ligne alternatifs
Comment créer son jeu et le gérer ?
Les Focus
Tech. : Le programmeur écologique
Tech. : automatisation et mails
Salon MondeDuJeu 2002
Revue de presse des JpC
Humour : 1001 raisons pour jouer
Ludique : le joueur parfait
Ludique : découverte du JpC
PHP : accès base de données
PHP : structure du site
Ludique : JpC et Temps réel
Jeux de rôles sans règles
Humour : astrologie du JpC
Tech. : Bases de données
MJ : les joueurs multiples
PHP : utilité pour un JpC
PHP : c'est quoi ?
Tech. : l'analyse des ordres
Ludique : débutants et vétérans
Tech. : archi Ultraball 2100
Ludique : les jeux de pronos
Tech. : le site Web d'un JpC
Humour : football et wargame
Présentation de TourDeJeu
Créer une base de données pour son jeu
Les clés
Evidemment, les données sont liées entre elles puisqu'elles forment un tout qui s'appelle Fish Race... une équipe appartient à un joueur (et à un seul). Comment faire apparaître cela ? Notre SGBD est relationnel, cela signifie qu'il sait bien gérer les relations entre les tables, au moyen des clés.
D'abord, toute table va devoir déterminer son identifiant = sa clé primaire : il s'agit d'une colonne, ou d'un ensemble de colonnes, qui déterminent de façon unique la ligne. Il n'y a qu'une ligne qui possède une valeur donnée de ces colonnes, et ces valeurs de colonnes suffisent à savoir sur quelle ligne on est.
Regardons la table JOUEUR. Quelle peut être la clé ? dans la vie courante, on identifie une personne par son nom, donc on pourrait choisir NOM comme clé primaire. Mais on sait bien que ce n'est pas un identifiant unique. Il peut y avoir plusieurs personnes avec un même nom. Même si c'est rare dans un JpC d'avoir 2 joueurs portant le même nom, il vaut mieux éviter le risque. EMAIL alors ? oui, c'est un identifiant unique. Il n'existe qu'une personne pour une adresse e-mail. Le problème,par contre, est que c'est une valeur changeante ! une personne peut changer d'adresse e-mail !
La solution la plus facile est alors de créer une autre colonne qui sera un numéro identifiant unique = un ID. Ce numéro sera public ou non : le joueur saura ou non qu'il porte un numéro. Il pourra s'identifier par son adresse e-mail dans les pages web du jeu, ou bien par son numéro, au choix du MJ (Il aura aussi un mot de passe, au fait). Mais dans la base de données, son identifiant sera ce numéro et rien d'autre. Il est courant, de plus, d'utiliser un numéro car ça prend moins de place à stocker que du texte, et il est plus facile de faire une recherche ou un tri dessus (pas de blancs inutiles, de majuscules/minuscules, etc). La table JOUEUR devient donc :
table JOUEUR | |||
---|---|---|---|
ID | NOM | MOTDEPASSE | |
1 | toto@hebergeur.fr | Vincent Clément | coucou |
2 | syl@autrehebergeur.fr | Sylvie Dujardin | monpass |
3 | bip@hebergeur.fr | Lucas Durand | maman |
A noter : l'ID pourra être attribué par le SGBD lui-même qui incrémentera le numéro lors de la création d'une ligne.
Dans la table EQUIPE aussi, nous avons besoin d'une clé primaire. On pourrait choisir NOM, mais il est plus simple d'utiliser là aussi un ID. Et puis, un joueur pourrait avoir envie de garder le même nom d'équipe entre 2 parties, ce qui nous poserait des problèmes si on gardait NOM comme clé ! L'ID de l'équipe sera sans doute un élément interne et privé de la base, le joueur ne connaîtra pas sa valeur, il n'en a rien à faire, c'est juste un élément technique de la base.
Revenons maintenant à notre relation entre EQUIPE et JOUEUR. Une équipe appartient à un joueur et à un seul, mais par contre un joueur peut avoir plusieurs équipes (dans différentes parties). Ce genre de relation se traduit par une clé étrangère : on va créer dans la table EQUIPE une colonne IDJOUEUR qui se référera à l'ID du joueur possédant l'équipe. La table EQUIPE devient donc :
table EQUIPE | ||||
---|---|---|---|---|
ID | NOM | ESPECE | IDJOUEUR | POINTS |
46 | Les vikings sanguinaires | Saumon | 1 | <250 |
47 | Olaf et compagnie | Saumon | 3 | 350 |
48 | No panic | Brochet | 2 | 100 |
De la même façon, on pourra avoir une table POISSON qui référencera la table équipe et contiendra parmi ses lignes :
table POISSON | |||
---|---|---|---|
ID | NOM | VITESSE | IDEQUIPE |
114 | BigFish | 6 | 46 |
115 | Nils | 2 | 46 |
116 | Vampirou | 5 | 48 |
117 | Vampirette | 5 | 48 |
On peut aussi décider que chaque poisson possède un numéro unique dans son équipe, qui apparaitra au joueur. Dans ce cas, au lieu de créer un ID global en clé primaire, on peut décider de créer un NUMERO de poisson dans l'équipe, et prendre comme clé primaire : IDEQUIPE+NUMERO. C'est une clé multi-colonnes. Cela veut dire que partout où l'on voudra référencer un poisson, on indiquera deux colonnes comme clé étrangère. Le choix entre les deux solutions doit se faire selon l'utilisation qu'on en aura. Si les joueurs doivent passer des ordres en ciblant les poissons ennemis, ce sera plus facile d'indiquer un numéro de poisson unique plutot qu'une équipe + un numéro de poisson dans l'équipe. Par contre, si seul le joueur possédant l'équipe a besoin de différencier ses poissons, il vaut mieux utiliser un numéro simple interne à l'équipe.