Frage

Seit einiger Zeit ich habe Herstellung eine 2d Kachel basierte SIM-Spiel, und es wird gut! Dank dieser Website und seine freundlichen Menschen (Sie!), Ich habe gerade den Weg zu finden, ein Teil des Spiels, was fantastisch ist! DANKE! ... Wie auch immer, auf die Frage.

Derzeit ist der Test pegel hart codiert in das Spiel. Offensichtlich muss ich wieder arbeiten diese. Meine Idee war, alle Variablen in meiner Klasse Spiel in eine Textdatei auf verschiedene Weise gespeichert zu haben. Ich könnte auch die Details der einzelnen Level in eine Datei für einen Level zu ladende schreiben. Meine Frage ist, sollte ich nur eine Textdatei mit werden, oder unter Verwendung von XML? Ich verstehe, was XML ist im Grunde, aber ich weiß wirklich nicht, wie ich es in Verbindung mit JAVA verwenden würde, oder warum es vorzuziehen ist oder nicht über eine einfache Textdatei. Ich hatte ein bisschen ein Google, und es gibt ganze Bücher auf XML und JAVA! Ich kann nicht sehen, ich brauche alles darüber zu wissen, wie mit JAVA XML zu verwenden, um diese Arbeit zu machen, aber ich brauche mehr zu wissen als ich.

Vielen Dank im Voraus für Ihre Hilfe bei dieser.

Edit: Ich werde einige der Ideen, die hier versuchen, bis ich den einen finden, die am besten funktioniert, und dann, dass als Antwort gewählt wird.

Bearbeiten: Wählen Sie xStream. Einfach und einfach!

War es hilfreich?

Lösung

Wenn Sie das Spiel Zustand in einem Objekt (zB eine HashMap, oder vielleicht ein Objekt von Ihrem eigenen Design), dann können Sie es schreiben, als XML-Datei trivialer mit Xstream , und es dann auf ein neues Objekt liest wieder mit XStream.

Es gibt eine 2 Minuten Tutorial Ihnen zu zeigen, wie / deserialise serialise. Es wird die meisten Objekte ohne Schwierigkeiten handhaben - Sie brauchen nicht zu implementieren oder eine bestimmte Schnittstelle angeben. Auch brauchen Sie JAXP, SAX, DOM etc.

Andere Tipps

Für ein 2D-Kachel-basiertes Spiel, XML ist wahrscheinlich übertrieben. XML ist gut für die hierarchische Speicherung von Daten und / oder markiert-up Text, aber es klingt wie Sie nur einen Weg zum Codieren ein 2D-Gitter von Fliesen Einstellungen benötigen, die weit einfacher ist, mit einer einfachen alten Textdatei zu tun.

Haben Sie einfach jede Zeile eine Reihe von Fliesen sein, und entscheiden, wie viele Zeichen pro Fliese wollen (wahrscheinlich ein oder zwei wäre in Ordnung). Dann entscheiden, wie die Objekte in Ihrer 2D-Welt in der Textdatei mit Zeichen darzustellen.

SokoBean (ein Spiel habe ich vor über 10 Jahren, so nicht, was würde ich meine nennen beste Arbeit, aber was auch immer) habe ich Textdateien, wie diese rel="nofollow. Neben einfacher ist als XML zu analysieren, können Sie auch einen einfachen alten Texteditor als Level-Editor verwenden.

Sie verwenden Dateien für einen internen Zwecke. Die kurze Antwort ist, solange das Dateiformat Ihren Zweck passt, es ist in Ordnung. Sie wollen tun, was Sie können, um sicherzustellen, dass das Format klar, so einfach wie möglich und erweiterbar. Das wichtigste Bit ist hier die Daten Lesen und Schreiben auf einen einzigen Punkt in dem Code zu extrahieren, die für das Lesen und Schreiben Sie das Dateiformat verantwortlich ist.

Die gängigen Formate sind häufig, weil sie einfach und gut unterstützt - Sie brauchen keine speziellen Code zu schreiben, Dateien (properties-Dateien zu analysieren, im Grunde nur eine Liste von Schlüssel-Wert-Paaren und XML-Dateien -Denken von xml Dateien als eine Möglichkeit, beliebig tief verschachtelte Wörterbücher des Schreibens).

Es hängt von Ihren Bedürfnissen natürlich, aber XML-Format bietet Ihnen viele Vorteile und ich würde wahrscheinlich wählte mich in einem solchen Projekt XML.

  • Es kann automatisch sein geprüft / von Werkzeugen überprüft zu machen sicher, dass es richtig ist und nach die Regeln richten Sie.
  • Es werden vorhandene Bibliotheken für Java analysieren, lesen und aktualisieren XML-Dokumente.
  • Das Format ist leicht ausziehbar für zukünftige Versionen des Programms, aber immer noch leicht zu halten Rückwärtskompatibilität
  • Es ist einfach für andere zu lesen und Ihre Dateien zu verstehen, wenn sie XML sind, anstatt einige speziell angepassten Text-Format

Wenn es rein eine Kachel-basiertes Spiel, eine gerade Textdatei ist wahrscheinlich der Weg zu gehen.

Sie werden wahrscheinlich feste Breite ints wollen, durch Leerzeichen getrennte mit Zeilenumbrüchen nach jeder Zeile. Leicht lesbar und einfach ohne die Notwendigkeit für eine XML-Bibliothek zu analysieren.

Edit:

Ein wichtiger Ratschlag:

Was auch immer Sie sich entscheiden, kapseln es! Machen Sie eine Leser-Schnittstelle, die generischen Eingangsstrom und kehrt (oder auffüllt) was auch immer Ihre Gitterstruktur braucht ist. Haben eine Schreiber-Schnittstelle, die eine Gitterstruktur und eine gattungsgemäße Ausgabestrom und Deponien, die Daten zu diesem Ausgabestrom erfolgt. Du wirst dich später danken sollten Sie Ihre Meinung ändern, wie Sie wollen, um die Datei zu implementieren, oder wenn Sie wollen Netzwerk spielen hinzufügen, etc.

In Bezug auf Ihre eigenen Sachen, vor allem Spiele, XML ist überbewertet. Wenn Sie wurden in einem großen Unternehmen zu arbeiten, wo andere Menschen brauchen den Text Ihrer Dateien anzuzeigen, XML Macht Sinn machen, aber selbst in diesem Fall würden Sie wahrscheinlich ein Level-Editor haben geschrieben, dass alles tun würde für Sie.

würde ich empfehlen, entweder eine einfache Textdatei mit Ihrer eigenen Konvention hat, oder mit java.io.ObjectOutputStream und java.io.ObjectInputStream nur Ihre Daten direkt in eine Datendatei schreiben oder java.util.Properties (wenn Sie eine Menge von Informationen oder Objekten), um Ihre Daten zu schreiben ( wenn Sie brauchen, um Primitive zu schreiben).

Viele der Menschen über Referenz, wie XML schön ist, weil es „automatische Serialisierung“ hat, aber ich glaube wirklich nicht, das ist erwähnenswert, wenn in Java arbeiten, da beide Methoden, die ich oben aufgeführten auch die automatischen, aber auf einem viel höheren Niveau.

Vergessen Sie auch nicht, dass eine 2D-Fliese Karte darstellt XML-Tags sehr intuitiv ist, während sie nur schriftlich Zeile für Zeile in einer Zeichendatei ist ziemlich einfach zu lesen und schreiben.

ex.)

WWWWWWWWWW  
WSWWWWW EW  
W W K WW W  
W W   WW W  
W WW WWWDW  
W  X     W  
WWWWWWWWWW  

Sie so etwas wie die oben tun könnte, wo W eine Mauer ist, S ist Start, ist E Exit K ist der Schlüssel, D ist Tür und X ist ein Monster. Genau dort, wo alles liegt und wie sich das Niveau sollte, ist sehr offensichtlich, auch als Textdatei festgelegt werden.

Ich habe Textdateien zwischen vielen professionellen Spieleprojekten verwendet. In der Tat habe ich verwendet, nur XML, wenn ich für jemanden Arbeit Vertrag getan habe, weil XML aussieht „professionellere“ obwohl in den meisten Fällen es verwendet es ist nicht notwendig und nur eine Verschwendung von Raum, die Dinge overcomplicates.

Ein weiteres Beispiel:

SpawnFrequency 0.1 20.5
HealthPoints 5
Stats 12 500 30 10 11  

Sie können sich vorstellen, was sonst passieren könnte. Dann, wie Sie die Datei in Java zu lesen, einfach BufferedReader.readLine() verwenden, um jeden Parameter zu erhalten, dann String.split() ein Array aller Werte für diesen Parameter zu erhalten. Dann wird eine große switch-Anweisung oder if / else Gruppierung den ersten Wert im Split-Array zu vergleichen bestimmen, welche Parameter Sie tatsächlich gelesen haben. Wenn Sie zu diesem Punkt zu gelangen, sind Sie XML Nützlichkeit nähern, aber es könnte noch für diesen Einsatz übermäßig aufgebläht sein. XML, könnte jedoch helfen, einige dieser geheimnisvollen Werte zu erklären, was sein könnten:

Das oben in XML:               

Oder vielleicht wie folgt aus:

`<GuyStuff>`  
    `<SpawnFrequencyMinimum>0.1</SpawnFrequencyMinimum>`  
    `<SpawnFrequencyMaximum>20.5</SpawnFrequencyMaximum>`  
    `<Health>5</Health>`  
    `<Strength>12</Strength>`  
    `<Agility>500</Agility>`  
    `<Stamina>30</Stamina>`  
    `<TechnoWizardry>10</TechnoWizardry>`  
    `<JavaSkillz>11</JavaSkillz>`  
`</GuyStuff>`  

Aber noch einmal, wenn Sie zu dieser Komplexität immer beginnen, könnte man genauso gut beginnt gerade java.io.Serializable verwenden, weil es sehr einfach ist.

Bearbeiten Hier ist ein Beispiel Serializable.

public class MySaveData implements java.io.Serializable //Serializable doesn't need any methods implemented, it simply says, "hey Java, my object can be written to a file."
{
    float data1;
    int data2;
    Object data3;
    //BufferedImage data4; //Note that in order for an object to serialize, it can't contain any data members that are not Serializable, so this would be illegal.
}

import java.io.*;
public class DataReader
{
    public void saveData(File loc, MySaveData obj1, MySaveData obj2, MySaveData obj3)
    {
        try
        {
            //You can use any type of OutputStream to create an OOS, so you can for
            //example use one when you're connected with Sockets or something similar.
            ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(loc));

            //Writing objects is tremendously easy, and so are primitives.
            //Note that the order you write them in is the same order you will read them.
            os.writeObject(obj1);
            os.writeObject(obj2);
            os.writeObject(obj3);
            os.writeDouble(someValueINeededToWrite);
            os.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public void loadData(File loc, PlaceToPutData place)
    {
        try
        {
            //ObjectInputStream follows the same rules as OOS mentioned above.
            ObjectInputStream is = new ObjectInputStream(new FileInputStream(loc));

            //Remember to read your data back the same order you wrote it.
            place.obj1 = is.readObject();
            place.obj2 = is.readObject();
            //If you don't want one of the objects for some reason and want
            //to get something after it, you can just read the next one but not use it.
            readObject();
            place.value = is.readDouble();
            is.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

Normalerweise Ihre Datei so etwas wie dieses wäre. new java.io.File("/Documents/MyGame/MyDataFile.whateverIFeelLikeAsLongAsItsConsistent")

Es hängt davon ab, wie viele Daten Sie speichern müssen und wie Sie brauchen, um es abzurufen.

XML kann leicht mit mehreren Bibliotheken zu java POJO die übersetzt werden, so dass ein Vorteil ist. Auch Sie werden feststellen, dass es einfach zu erlernen und zu bedienen, nur einige Tutorials versuchen.

Aber wenn Sie brauchen eine Menge Daten zu speichern, können Sie eine eingebettete Datenbank, oder einen separaten SQL-Server prüfen, mit, je nach Anwendung.

Wenn Sie die einzige Person sind, die die Datei ändern wird, verwenden Sie ein beliebiges Format Sie wollen. wenn Sie Benutzer oder Tester oder andere Menschen erwarten jedoch, dass es zu ändern, verwenden XML. Ein großer Vorteil von XML ist, dass es ein Standardformat, dass eine Menge Leute (auch viele Nicht-Programmierer) wissen, wie in Code.

Ich betrachte nur mit Hilfe von XML, wenn ein Teil des XML-Ökosystems ist ich brauche: Validierung, Transformation, automatische Serialisierung / Deserialisierung, etc. Aber ich weiß, was all diese Dinge sind, und ich weiß, wie sie verwenden, um recht gute Wirkung .

Wenn Sie dies nicht tun - und vom Tenor dieser Frage, die Sie vermute ich nicht - dann ist die eigentliche Frage ist, „soll ich lernen, all dieses Zeug einfach so, dass ich meine Daten in einem XML-Dokument speichern kann? " und die Antwort ist „Du an Sicherheit grenzender Wahrscheinlichkeit nicht sollte.“

Sie mögen denken, eine eingebettete Datenbank wie JavaDB über die Verwendung, befindet sich hier: http://developers.sun.com/javadb/

Es ist nur 2,5 MB es einbetten, und Sie können die Fähigkeit, finden alle Arten von Daten in einer strukturierten, zuverlässigen Art und Weise zu speichern sehr hilfreich.

Es gibt ORM-Frameworks wie Hibernate, die Sie mit den Daten nutzen könnten arbeiten, aber das ist wahrscheinlich übertrieben für Ihre Anwendung. Sie können stattdessen straight-forward JDBC verwenden.

Viel Glück und viel Spaß.

betrügt ein Problem? wenn ja, dann würde ich verschlüsseln whetever die Ausgabe irgendwie ist. Wenn es dann nicht nur im Klartext ausgegeben.

Was das Format geht, würde ich XML verwenden. Sie können, wie etwas tun

<Map>
    <Tile x="1" y="1" value="2"></Tile>
    <Tile x="1" y="2" value="1"></Tile>
    <Tile x="1" y="3" value="7"></Tile>
    ...
</Map>

Das wird ein schönes lesbares Format bietet und kann einiges an Daten sztore.

Ich verwende eine Klasse (implementiert java.io.Serializable), wo ich die Spielstatistiken speichern. Dann habe ich eine ObjectOutputSteam verwenden diese Klasse in eine Datei zu schreiben. Um diese Klasse laden Sie ein Object verwenden können.

Martijn

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top