Enregistrer le Jeu de données - Java
J'ai créé un rudimentaire jeu avec quelques objets. Je tiens à donner à l'utilisateur du programme, la capacité de charger et d'enregistrer l'état du programme.
J'ai recherché plusieurs articles et de lire beaucoup de overstack postes. J'ai été surpris par la quantité de méthodes, et de la complexité de chacune de ces méthodes.
La plupart des méthodes nécessitent la création d'un cadre ou un squelette de tous les objets que je veux sauver, et ensuite les charger, ligne par ligne, l'appel de chaque objet manuellement, puis le jetant en arrière dans son type de données et catégorie.
Oui, je suis nouveau en programmation. Mais je ne suis pas demander une aumône. Je demande une explication concise.
J'ai lu l'article, comme je l'ai exploré l'idée de la sortie à un fichier XML.
http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/
Comme je l'ai dit, je suis nouveau en programmation. Dois-je apprendre XML en tandem avec Java?
Ma question est la suivante:
A) Ne pas mon IDE, lors de la compilation, de savoir combien d'objets que j'ai, leur type de données, et quelle classe ils appartiennent?
B) Est-il un moyen d'enregistrer TOUS les objets sans les spécifier individuellement.
c) Ai-je overdramitized la complexité de l'enregistrement d'un programme simple?
Peut-être jeter un oeil à la Sérialisation
Désolé pour l'ambiguïté. Je veux sauver le jeu. Je veux que l'utilisateur soit en mesure de sauver le jeu, en congé pour un jour, de revenir, et de charger leurs jeu où ils ont commencé, avec tous les objets pleine intacte.
Vous pouvez utiliser des fichiers XML ou JSON pour la sérialisation de données dans le texte. Vous pouvez également utiliser
Serializable
interface et ObjectOutputStream
en bytecode(?), mais JSON est plus fiable. Si vous avez un collectif GameModel
classe qui contient toutes les entités qui sont pertinentes à l'état de jeu actuel, alors vous pouvez sérialiser que l'on classe, et tous les autres seront sérialisés de manière récursive.Merci à tous pour les commentaires. Je suppose que la réponse est que c'est absolument comme accablant que je pensais. On dirait que je vais être à regarder youtube sur la façon de convertir état de jeu en JSON
OriginalL'auteur Joseph Erickson | 2015-03-09
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de raison, à moins que vous voulez apprendre XML ou pensez XML est une bonne option pour votre application. Il existe de nombreuses façons de sérialiser sans XML.
Non, il n'est pas obligatoire. Depuis les allocations sont fait de façon dynamique en Java, il existe des situations où il est même impossible de savoir cette information de manière statique.
(Combien de
Foo
s ont été créés? Le compilateur ne sait pas.)Certainement le compilateur sait beaucoup de choses sur la types de données.
Avec peut-être Sérialisable. Fondamentalement, vous aurez mis tout votre programme d'état à l'intérieur d'un seul objet. Lorsque vous sérialiser cet objet unique, tout le reste est sérialisée de manière récursive.
Le même concept s'applique probablement à la sérialisation d'autres systèmes tels que le JSON, XML, etc.
Vous avez besoin de bien réfléchir à ce que vous mettez dans l'état de l'objet, puisque tout ce qui en elle sera enregistrée.
Pas vraiment. Programme d'économie d'état peut être compliqué si ce n'est pas seulement un quelques valeurs.
OriginalL'auteur Radiodef
A) Ne pas mon IDE, à succès de la compilation, de savoir combien d'objets que j'ai, leur type de données, et quelle classe ils appartiennent?
Chargement de l'état du programme n'a rien à voir avec l'IDE ou de compilation. Vous commencez votre programme et il est déjà en cours d'exécution, vous voulez le changer c'est l'état par le chargement de l'état à partir du fichier.
Si vous utilisez la sérialisation, vous pouvez faire face à des problèmes liés à des versions et des classes d'incompatibilité - par exemple, si vous décidez d'ajouter un nouveau champ à une classe, vous aurez besoin d'écrire du code supplémentaire pour être en mesure de charger un ancien état, qui n'ont pas ce champ. Si d'autres formats comme XML, JSON ou texte en clair (et de faire la conversion vous-même) peut être une meilleure idée.
B) Est-il un moyen d'enregistrer TOUS les objets sans les spécifier individuellement.
Bien, théoriquement, il devrait être possible d'enregistrer l'état de l'ensemble de la JVM et la charge plus tard. C'est un sujet avancé et il y aurait beaucoup de problèmes à cause de tous les trucs forts se passe à l'intérieur de la JVM (tels que le Just-In-Time compiler, la collecte des ordures et différents à la volée optimisations). Je ne recommande pas d'aller vers le bas de cette façon. Très probablement, vous ne serez pas en mesure de modifier votre code à tout - par exemple, si vous ajoutez un nouveau bouton dans votre interface utilisateur, le chargé version ne vais pas l'avoir, parce qu'il sera charger de vieilles versions des classes. Donc il ne sera pas possible de charger un vieux jeu de l'état dans la nouvelle version du jeu.
C) Ai-je overdramitized la complexité de l'enregistrement d'un programme simple?
Disons que votre jeu a classe appelée
Game
avec le constructeurGame(String name)
(et quelques autres paramètres). Pour la première fois, vous pouvez le créer par appeler justenew Game("firstGame")
. Mais maintenant, vous voulez créer cet objet à partir de certains sauvé de l'état. Vous pouvez sérialiser l'objet, puis la charge, le résultat sera l'objet lui-même. Ou vous pouvez lire le fichier pour obtenir cette chaîne et il suffit d'appeler le constructeur vous-même à l'aide de cette chaîne. Aller plus loin dans ce sens il y a des bibliothèques qui peut convertir l'objet en JSON et JSON pour objet (comme Jackson sérialiseur).OriginalL'auteur Jaroslaw Pawlak
Avoir une classe qui peut enregistrer l'état actuel du jeu.
lorsque l'utilisateur quitte, en charge de cette classe avec les données pertinentes. Car une fois le jeu se termine, le souvenir s'efface, vous devez le sauver dans un fichier.
La sérialisation est un moyen de stocker des Objets sur le disque(essentiellement dans les fichiers), de telle sorte que, lorsque vous dé-sérialiser en utilisant les fonctions de la bibliothèque, vous directement récupérer l'objet à l'état actuel.
vérifier
http://www.tutorialspoint.com/java/java_serialization.htm pour plus de détails
OriginalL'auteur prasad vsv