Coucou
merci beaucoup pour le rappel de cet excellent outil

.
En fait, je réfléchis en ce moment sur l'élaboration d'une BDD, notamment pour du jeu vidéo de type online, avec pas mal d'infos concernant le personnage.
Est-ce que mon approche est la bonne ?
SI j'ai ce code (purebasic) :
(c'est juste un exemple pour voir comment je dois faire pour exporter ça vers une bdd) :
Code : Tout sélectionner
Structure sStatPerso
Vie.w
Force.w
Intelligence.W
Chance.w
Sagesse.w
EndStructure
Structure sQuest
id.w ; identifiant de la quete
State.a ; état d'avancement de la quête.
Param$ ; autre paramètres si besoin
EndStructure
Structure sSucces
id.w ; identifiant du succes
State.a ; état d'avancement du succes.
Array nb.w(0) ; le nombre rempli (pour chaque condition qui permettent de débloquer le succès)
EndStructure
Structure sEquipement
id.w
Used.a
stat.sStatPerso
EndStructure
Structure sInventaire
; objets de base, non modifiable
id.w
Nb.w
EndStructure
Structure sSkills
id.w
XP.w
EndStructure
Structure sPersonnage
Nom$
classe.a ; classe du personnage : guerrier, magicien, archer, etc.
; Statistique de base, lié à la classe choisie
; donc non sauvegardé.
stat.sStatPerso
; les points bonus qu'on a donné à nos stats
StatBonus.sStatPerso
; le nombre de point qui restent à donner
NbPointStat.w
; expérience et niveau
XP.i
Level.a
; puis, les tableaux ou list() nécessaires :
Array Quete.squest(0)
Array inventaire.sInventaire(0)
Array equipement.sEquipement(0)
Array skills.sSkills(0)
EndStructure
Est ce que cela signifie que je pourrais avoir ces tables dans la BDD ?
toutes les tables ont toujours un 1er champs "id_perso", qui est le même pour un compte (pour retrouver les infos de ce compte)
- table "personnage" avec les champs : nom, classe, statbonusvie, statbonusforce, statbonusintelligence, statbonuschance, statbonussagesse, NbPointStat, XP, Level.
Puis, des tables suivantes avec les champs de chaque structure associée
- table "quete"
- table "inventaire"
- table "equipement"
- table "skills"
- table "Succes" : pour celle-ci, comment faut-il faire car la structure contient un tableau : une autre table genre succesnb ?
Et ensuite, puis-je lier un personnage à une table ?
Ou alors, dans ma BDD, l'élement 34 de la table "personnage" est nécessaire lié aux éléments 34 des autres tables (inventaire, quete, equipement, etc) ?
Merci beaucoup pour les infos
EDIT :
voici un premier code, vous pensez que c'est comme ceci qu'il faut faire (en tout cas, que cette approche semble correcte) ?
Code : Tout sélectionner
; Dabord, pour créer et gérer un personnage, les structures.
Structure sStatPerso
Vie.w
Force.w
Intelligence.W
Chance.w
Sagesse.w
EndStructure
Structure sQuest
id.w ; identifiant de la quete
State.a ; état d'avancement de la quête.
Param$ ; autre paramètres si besoin
EndStructure
Structure sSucces
id.w ; identifiant du succes
State.a ; état d'avancement du succes.
Array nb.w(0) ; le nombre rempli (pour chaque condition qui permettent de débloquer le succès)
EndStructure
Structure sEquipement
id.w
Used.a
stat.sStatPerso
EndStructure
Structure sInventaire
; objets de base, non modifiable
id.w
Nb.w
EndStructure
Structure sSkills
id.w
XP.w
EndStructure
Structure sPersonnage
Nom$
classe.a ; classe du personnage : guerrier, magicien, archer, etc.
; Statistique de base, lié à la classe choisie
; donc non sauvegardé.
stat.sStatPerso
; les points bonus qu'on a donné à nos stats
StatBonus.sStatPerso
; le nombre de point qui restent à donner
NbPointStat.w
; expérience et niveau
XP.i
Level.a
; puis, les tableaux ou list() nécessaires :
Array Quete.squest(0)
Array inventaire.sInventaire(0)
Array equipement.sEquipement(0)
Array skills.sSkills(0)
EndStructure
; Puis, la BDD
Procedure DB_Init()
; basé sur un code de metalos lui même basé sur un code Progi1984 :)
Protected plFile.l
Protected psSQLRequest.s
UseSQLiteDatabase()
file$ = GetCurrentDirectory()+"personnagejeuMMORPG1.sqlite"
If FileSize(file$ ) < 0
plFile = CreateFile(#PB_Any, file$ )
If plFile
CloseFile(plFile)
EndIf
EndIf
glDBSQLite = OpenDatabase(#PB_Any, file$ , "", "", #PB_Database_SQLite)
If glDBSQLite = 0
MessageRequester("Erreur BDD jeux videos", DatabaseError())
End
ElseIf plFile
; table "create du personnage"
psSQLRequest = "CREATE TABLE IF NOT EXISTS personnage ("
psSQLRequest + "id_perso INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
psSQLRequest + "perso_nom TEXT Not NULL, "
psSQLRequest + "perso_classe INTEGER, "
psSQLRequest + "perso_statbonusvie INTEGER,"
psSQLRequest + "perso_statbonusforce INTEGER,"
psSQLRequest + "perso_statbonusintelligence INTEGER,"
psSQLRequest + "perso_statbonuschance INTEGER,"
psSQLRequest + "perso_statbonussagesse INTEGER,"
psSQLRequest + "perso_nbpointstat INTEGER,"
psSQLRequest + "perso_xp INTEGER,"
psSQLRequest + "perso_level INTEGER"
psSQLRequest + ")"
; Debug psSQLRequest
If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
MessageRequester("Jeu video1 - DB_Init() 1", DatabaseError())
End
EndIf
psSQLRequest = "CREATE TABLE IF NOT EXISTS inventaire ("
psSQLRequest + "id_perso INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
psSQLRequest + "inventaire_id INTEGER,"
psSQLRequest + "inventaire_nb INTEGER"
psSQLRequest + ")"
; Debug psSQLRequest
If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
MessageRequester("Jeu video1 - DB_Init() 2", DatabaseError())
End
EndIf
MessageRequester("Gestion de persos - DB_Init()", "Bdd initialisée")
EndIf
EndProcedure
DB_Init()