IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Problème d'organisation des données dans un jeu de stratégie


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut Problème d'organisation des données dans un jeu de stratégie
    Bien le bonjour,

    Je suis à sec sur la manière de stocker et gérer mes données. Pour la réalisation d'un jeu de stratégie j'ai besoin de stocker des informations relatives à des endroits sur la carte.

    Ces informations peuvent être de diverses natures, mais disons qu'il s'agit de stocker les valeurs de certains indicateurs tels que l'influence d'un joueur à un endroit précis ou encore la faiblesse d'un joueur ou les zones souvent traversées par tel ou tel joueur.

    Il n'est pas nécessaire que ces données soient stockées à l'unité près, c'est pourquoi j'avais dans l'idée de faire correspondre un tableau 2D avec ma carte. Le problème est que le tableau est vite démesuré. Pour que les données aient un quelconque sens, je devais prendre une granularité de tableau assez fine, d'où explosion de la mémoire. Qu'à cela ne tienne, je suis parti ensuite pour faire un quadtree et ainsi ne stocker que les zones contenant des données. Malheureusement je peux potentiellement avoir à stocker des données dans chaque case ou presque.

    De plus, je dois pouvoir avoir un accès rapide à une case du tableau et je dois pouvoir me balader facilement d'une case à l'autre.

    La solution viable serait de prendre un tableau démesuré, en diminuant la taille de la carte pour éviter de saturer la mémoire, mais cette solution n'est pas idéale.

    Avez-vous des autres idées plus pertinentes que les miennes ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    946
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 946
    Points : 1 844
    Points
    1 844
    Par défaut
    Vous avez peut-être de larges plages rectangulaires avec les mêmes valeurs?

  3. #3
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    un systeme plutot efficace et relativement generique est d'utiliser des cercles pour decrire l'info.
    avec une position et rayon et une petite interpolation, on peut obtenir de tres bon résultats.
    par contre, si tu utilise un map a base de cases, alors, les rectangles peuvent effectivement etre très efficaces pour reduire le taux d'info stockées.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  4. #4
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Il est possible que j'aie de grandes plages avec les mêmes valeurs, mais je ne veux faire aucune supposition de ce côté. Le modèle utilisé doit pouvoir refléter tous les cas de figure.

    L'idée des cercles me plait bien, d'autant que je n'utilise pas a priori de carte à base de cases. Ma carte est tout ce qu'il y a de plus continue.

  5. #5
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    L'idée d'utiliser des textures en tant que tableau te permettrait de ne regarder que la partie de ta carte visible à l'écran.
    M'enfin, ceci n'est qu'une idée rapide...

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 365
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 365
    Points : 20 401
    Points
    20 401
    Par défaut
    ? pour le problême exposé rien ne vaut les listes !
    Pour faire correspondre une entité au décor il suffit de transformer les coordonnées de l'entité x,y en fonction du "viewport" et savoir si ces coordonnées appartiennent à ce viewport ( nécessité de faire un "clipping")
    Je ne pige pas trop ou est le problème.
    Si tu veux faire un jeu de stratégie il faut utiliser des conteneurs comme std::list..etc
    C'est comme cela qu'ils ont fait dans Civilisation II Call to Power ( regarder dans le code source)
    Pour les entitées la POO est parfaite avec des classes en tout genre

    Citation Envoyé par khayyam90
    La solution viable serait de prendre un tableau démesuré, en diminuant la taille de la carte pour éviter de saturer la mémoire, mais cette solution n'est pas idéale.

    Avez-vous des autres idées plus pertinentes que les miennes ?
    faut procéder à un découpage et gérer des fenêtres de zone de vue ( viewport).
    Si on fait défiler l'écran alors le viewport change on ne fait apparaitre que les entités comprises dans ce viewport

  7. #7
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    L'idée de viewport ne convient pas à mes besoins, j'ai besoin de manipuler des zones de la carte qui ne sont pas forcément comprises dans le frustum. Ca sera d'ailleurs la grande majorité des cas. Je peux avoir à manipuler des données situées à des endroits très différents, notamments dans les traitements liés aux IA.

    L'idée de liste ne me convient pas non plus puisque j'aurais des accès en O(n) beaucoup trop longs. Il faut qu'avec une position (x,y) je puisse accèder très rapidement aux données d'un lieu.

  8. #8
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    si tu trie tes positions dans un multi set en fonctions de leur distance à l'origine du monde, tu peut avoir des temps d'acces très satisfaisant
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  9. #9
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 365
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 365
    Points : 20 401
    Points
    20 401
    Par défaut
    Citation Envoyé par khayyam90
    L'idée de viewport ne convient pas à mes besoins, j'ai besoin de manipuler des zones de la carte qui ne sont pas forcément comprises dans le frustum. Ca sera d'ailleurs la grande majorité des cas. Je peux avoir à manipuler des données situées à des endroits très différents, notamments dans les traitements liés aux IA.

    L'idée de liste ne me convient pas non plus puisque j'aurais des accès en O(n) beaucoup trop longs. Il faut qu'avec une position (x,y) je puisse accèder très rapidement aux données d'un lieu.
    Ah il fallait préciser que c'était un jeu 3d ; je pensais que c'était un jeu 2d de stratégie.
    C'est certain que les listes c'est pas trop adapté et que le viewport est géré par les fonctionnalités 3d
    J'aurais plutot une préférence pour les arbres binaires plutot que des conteneurs de la STL.
    Mais c'est plus complexe à mettre en oeuvre

Discussions similaires

  1. problème de récuperation des données dans l'url
    Par leclone dans le forum Langage
    Réponses: 8
    Dernier message: 13/03/2007, 10h20
  2. [MySQL] Problème de récupération des données dans une fonction
    Par highman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2006, 20h04
  3. Problème pour rentrer des données dans MySQL
    Par Sandara dans le forum Requêtes
    Réponses: 8
    Dernier message: 06/06/2006, 10h59
  4. [VB6]problème d'insertion des donneés dans une base d'Access2003
    Par lanbok dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/05/2006, 12h17
  5. [SWT]organisation des données dans un gridlayout
    Par whilecoyote dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/12/2005, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo