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

avec Java Discussion :

Comment vous organisez / structurez votre sauvegarde pour une grande carte de jeu ?


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Comment vous organisez / structurez votre sauvegarde pour une grande carte de jeu ?
    Bonjour à tous !

    Avant de commencer, je tiens à vous remercier de votre lecture et de votre aide.

    J'ai actuellement une carte de jeu vidéo qui s'organise avec trois classes des plus classiques :

    - Une classe Case qui représente les cases d'un plateau de jeu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import java.io.Serializable;
     
    public class Case implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	private int x, y;
     
    	public Case (int x, int y) {
    		this.x = x;
    		this.y = y;
    	}
     
    	public int getX () {
    		return x;
    	}
    	public int getY () {
    		return y;
    	}
    }
    - Une classe PlateauDeJeu où sont incorporées les cases précédentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import java.io.Serializable;
     
    public class PlateauDeJeu implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	private Case [][] plateau;
     
    	public PlateauDeJeu () {
    		plateau = new Case [10][10];
     
    		for (int y = 0; y < plateau.length; y++) {
    			for (int x = 0; x < plateau[0].length; x++) {
    				plateau[y][x] = new Case (x, y);
    			}
    		}
    	}
     
    	public Case getCase (int x, int y) {
    		return plateau[y][x];
    	}
     
    	public Case [][] getPlateau () {
    		return plateau;
    	}
    }
    - Et enfin une classe Carte qui contient des plateaux de jeu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import java.io.Serializable;
     
    public class Carte implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	private PlateauDeJeu [][] monde;
     
    	public Carte () {
    		monde = new PlateauDeJeu [100][100];
     
    		for (int y = 0; y < monde.length; y++) {
    			for (int x = 0; x < monde[0].length; x++) {
    				monde[y][x] = new PlateauDeJeu ();
    			}
    		}
    	}
     
    	public PlateauDeJeu getPlateauDeJeu (int x, int y) {
    		return monde[y][x];
    	}
    }
    Je souhaiterais que le jeu se déroule ainsi :

    Quand le personnage évolue sur la carte, le programme charge les zones de couleur jaune (représentant des plateaux de jeu)
    de ma classe sérializée Carte ; les zones rouges représentent les plateaux de jeu dont je n'ai pas besoin à ce moment, tout ceci, afin de
    rendre le chargement des zones de jeu plus légères pour mon PC plutôt que de charger en totalité la carte.

    Nom : Question1.png
Affichages : 186
Taille : 6,3 Ko


    Je me permet juste de rappeler ici que je suis un programmeur débutant, donc il-y-a beaucoup de subtilités qui m'échappent bien
    évidemment dans le comportement de mes objets et surtout dans les solutions potentielles que je ne verais pas : Aussi, pour résoudre mon problème,
    j'étais partit sur l'idée de crée autant de fichiers PlateauDeJeu que nécessite ma Carte, pour allez les chercher selon les déplacements du personnage
    pour le jeu, mais cela représente juste pour une Carte de 100 x 100 PlateauDeJeu un nombre de 10.000 fichiers de sauvegardes différents et je doute
    très fortement que cette méthode soit la bonne.

    Alors, je ne sais pas si il existe un moyen quand on a sauvegardé tout un monde de jeu, comme celui que je vous ai présenté, dans
    un même fichier de sauvegarde, tout en conservant une rapidité de sauvegarde / chargement (donc un déroulement dynamique de cette phase) pour
    permettre à un joueur d'y évoluer sans de temps de chargements trop lourds.
    Et je me permet de vous soumettre mon problème, en espérant que vous saurez peut-être m'orienter vers une façon de faire qui m'aiderait
    grandement, car là je vous avouerais que je ne vois pas du tout comment me dépétrer de cette situation.


    Encore une fois, je vous remercie de votre lecture et de votre aide.

    Edit :
    Je vous prie de bien vouloir m'excuser pour cet ajout, mais c'était pour préciser une chose qui pourrait vous paraître étrange : C'est que
    mes cases incorporont par la suite un identificateur pour y associer une image propre et ainsi construire un plateau de jeu plus esthétique que de simples
    carrés noirs sur un fond blanc.
    Voilà, c'était juste pour prévenir toute question, parfaitement justifiée par ailleurs, de pourquoi vouloir sauvegarder des cases qui en soit sont présentées
    ici comme vides.
    Merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    ben, c'est ce que fait Minecraft, et même si le jeu a des problèmes connus, ça n'a pas grand-chose à voir avec la manière dont il sauve la carte du monde.

    si tu trouves que 10.000 fichiers c'est trop pour une carte de 100 x 100 plateaux de jeux (en effet 10.000 fichiers c'est énorme, donc soit il faut les ranger dans des dossiers différents, soit ça doit être réservé à des cartes considérées comme anormalement gigantesques et dépassant les limites), si tu trouves que c'est trop, donc, tu as qu'à mettre 100 plateaux de jeux dans un fichier. Du coup 100 x 100 plateaux de jeux ne prennent plus que 10 fichiers.

    En résumé, ton découpage en classes différentes ne prend peut-être pas la bonne échelle si ton but est qu'il soit normal d'avoir des cartes de 100 x 100 plateaux de jeux. Peut-être qu'il faut mettre plus de cases, ou qu'il faut une classe conteneur de plus.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour Thelvin et merci pour ton aide !

    Quand j'ai lu ta réponse j'ai été très surprit, car si je cherchais un moyen de sauvegarder en un seul fichier la carte du jeu c'était justement
    parce-qu'il me semblait avoir lu que dans le domaine des jeux vidéos (et on peut y citer Minecraft effectivement, ou encore Terraria, Dwarf Fortress et
    tant d'autres)
    la sauvegarde des mondes de jeu se faisait en un seul fichier, et qu'il était très mal vu de diviser sa sauvegarde en plusieurs fichiers
    distincts (qu'en gros cela ne se faisait pas, ça n'était "pas propre"); bon bah ! Je crois pouvoir en déduire que j'ai très mal comprit ou interprété
    ce que j'ai lu ...

    Si je peux juste me permettre de te demander de jeter un coup d'oeil à cet exemple d'organisation de sous-dossiers de sauvegarde où j'ai respecter
    (il me semble) les conseils que tu as eu la gentillesse de me fournir, c'est juste pour être bien sûr de partir dans la bonne direction et que je ne me
    trompes pas inutilement en ayant mal comprit (encore une fois !) ce que tu m'as dit.

    Ici, j'ai organiser la conception de la sauvegarde selon un code classique de tout damier de jeu d'échec via un axe alphabétique et un axe
    numérique, où les sous-dossiers respectent ce code et contiennent les fichiers de sauvegarde correspond aux zones de la carte du jeu.

    Nom : Exemple.png
Affichages : 163
Taille : 9,3 Ko
    Nom : Arborescence.png
Affichages : 153
Taille : 1,4 Ko

    Je garde en note bien évidemment les remarques que tu m'as fournit sur la manière dont je devrais organiser mes cases et plateaux de jeux,
    à bien y réfléchir après ta lecture, je me rends compte que je ne devrais peut-être pas avoir besoin de pousser trop loin la conception de ma sauvegarde;
    mais quitte à soulever un problème autant que je prenne la peine d'y réfléchir jusqu'au bout pour au cas où j'en aurais besoin dans le futur.

    Encore une fois, merci Thelvin pour ton aide et au forum de Développez.com pour votre site qui est vraiment très utile (surtout la FAQ !), et
    je clôturais mon Sujet juste après ta réponse, enfin si tu as le temps d'y répondre, sinon je le clôturais demain soir.

    Merci et à bientôt !

  4. #4
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    pour sauvegarder un univers de jeu vidéo, tu dois séparer deux aspects qui le composent : l'aspect statique et l'aspect dynamique.
    L'aspect statique comprend les décors et les personnages fixes.
    L'aspect dynamique comprend le personnage joueur et son inventaire ainsi que tout ce qui a été modifié par rapport à l'aspect statique.
    L'aspect statique peut être sauvegardé en plusieurs fichiers afin de n'en charger que quelques-uns en mémoire au fur et à mesure de l'avancement du joueur
    mais l'aspect dynamique doit être sauvegardé en un seul fichier qui ajoute à l'aspect statique toutes les modifications apportées.
    C'est toi qui choisis ce que tu veux mettre dans la sauvegarde de l'aspect dynamique.
    Il y aura entre autres la position du joueur, son inventaire, les dialogues qu'il a fait, son expérience, ses quêtes, etc...
    Dans l'aspect statique, il y aura la position des décors, leur agencement, les lieux de quêtes, les personnages non joueurs, etc...
    Le nombre de fichiers que tu alloues pour la sauvegarde de l'aspect statique dépend de ce que tu veux voir chargé en mémoire simultanément.
    La gestion de mémoire la plus économique est d'attribuer un fichier par plateau, ce qui fait beaucoup de fichiers mais occupe peu de place en mémoire.
    Tu peux aussi regrouper plusieurs plateaux dans une archive mais l'archive prendra plus de place en mémoire si tu la charges en entier.
    Par contre, tu peux lire le fichier archive au fur et à mesure.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour Anadoncamille !

    Merci beaucoup de ta réponse Anadoncamille tu ajoutes un complément d'information très intéressant sur l'aide que m'a apporté Thelvin
    précédemment. Ton explication prenant en compte l'aspect "statique" et "dynamique", lors de la programmation d'un jeu vidéo, est quelque chose
    que je n'avais pas encore lu et que je trouve vraiment très utile dans la vision que l'on doit avoir pendant la conception de celui-ci (j'en prends bonne note !).

    Et aussi merci de m'avoir proposé différentes manières de composer le ou les fichiers sauvegardes selon la gestion de la mémoire, cela vient
    bien confirmer ce que disait Thelvin, et je me trouve ainsi rassuré pour la conception de la partie sauvegarde de mon jeu.

    Un grand merci à vous deux pour votre lecture, votre temps et votre aide sur ma question !

    Je termine en remerciant encore une fois le site Développez.com et La communauté de celui-ci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/07/2016, 13h27
  2. comment forcer l'exécution des macros pour une seule base ?
    Par tristan_sauvage dans le forum Access
    Réponses: 4
    Dernier message: 21/08/2006, 11h59
  3. comment afficher cursor: hand sous FF pour une image?
    Par Death83 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/09/2005, 08h48
  4. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42
  5. Comment vous organisez-vous ?
    Par fredero dans le forum Langage
    Réponses: 4
    Dernier message: 17/05/2005, 20h33

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