Base de données et visualisation

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Base de données et visualisation

Message par blendman »

Salut

En ce moment, je regarde un peu les BDD (je commence avec SQLite).
Savez-vous s'il existe des codes quelque part pour visualiser et modifier une BDD ?

Merci :)
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Base de données et visualisation

Message par Marc56 »

Tu as l'excellent exemple de falsam:
SQLite Explorer
:wink:
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Base de données et visualisation

Message par blendman »

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()


Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Base de données et visualisation

Message par Ollivier »

Salut Blendman, après une petite lecture en diagonale, parce qu'impossible d'allumer un ordi, juste cette succinte suggestion :

Comme c'est en réseau, il y a des délais qui s'imposent. Et le temps dans un système on-line peut provoquer des distortions qu'il est nécessaire de corriger. Alors, je ne connais aucun jeu on-line, mais il y a sûrement des jeux qui implémentent ces mises à jour dans le game-play ou dans le scénario. Ça peut être une piste assez ludique pour toi.

Pour cerner ces distortions, tu peux abstraire le temps à l'espace : imagine une maison à 4 pièces 2 à 2. Chaque pièce a donc 2 portes intérieures pour atteindre 2 pièces voisines. Rien ne t'empêche en 3D en local de faire un jeu où il y a 5 pièces ou bien plus encore, en total désaccord avec la mécanique spatiale. Dans la réalité, si tu traverses 3 pièces dans une maison dont le plan de masse est occupé par 2 fois 2 pièces mitoyennes, tu as fait le tour de la maison, et tu es donc dans la pièce initiale. Dans un jeu de fiction, tu peux outrepasser cette règle d'occupation spatiale et imaginer que ta maison a 5 pièces.

Avec le temps, c'est un peu pareil.

On va imaginer que ta maison à 4 pièces collées 2 à 2, est remplacée par un chateau à 4 donjons 2 à 2 : pour les relier, au lieu d'une simple porte, c'est un couloir, et donc, au lieu, au lieu de passer d'une pièce à l'autre instantanément, il faut parcourir le couloir avec une durée minimum.

Dans ce cas, où le game-play comporte de telles temporisations, tu peux te permettre de créer la gestion d'un donjon par ordinateur dans un réseau à quatre ordinateurs.

Ça te donne une idée de ce que tu dois avoir dans quasiment toutes tes structures d'objet/sujet :
- un ID global (integer)
- une liste de PFS (positions, vitesses, accélérations, décisions logiques) pour chaque caractéristique quantitative de ton objet/sujet (santé, popularité, crédibilité, offense, défense, richesse, etc...)
- une liste d'attributs pour les caractéristiques qualitatives (nom, code de forme, code de texture, etc...)

Autre détail : inventer un faux hasard. C'est-à-dire une fonction pseudo-aléatoire rapide qui soit commune à toutes les machines, avec une unité de temps, par exemple la microseconde.

Comme ça, quelque soit la bécane,
Rnd(500 [microsecondes]) ça sera toujours (au pif) 0.613

De telle sorte que des coupures temporaires ne neutralisent pas tout ton jeu.

Autre détail : Avoir un ensemble de données protégé de départ de jeu (date, heure, etc...) qui soit partagé et commun par et à tous les ordinateurs. Cet ensemble doit être crypté et bien protégé pour éviter qu'il ne servent à des fins malveillantes.

Voilà ce qui me semble devoir avoir dans un système réseau de base. Bon courage à toi.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Base de données et visualisation

Message par Ollivier »

Tu vois par exemple, là, Youtube est en panne. Tous les deux ans en moyenne, ils doivent améliorer l'algo de génération pseudo-aléatoire qui se fait toper par un nerveux.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Base de données et visualisation

Message par Ollivier »

Et là, c'est bon... Il est plus en panne...
Répondre