# Level abspeichern/erstellen



## NZPaul (15. Mai 2012)

Hallo zusammen,
ich schreibe grade als Übung ein Space Invaders Spiel. Nun klappt das auch schon alles sehr gut, jedoch möchte ich natürlich verschiedenen Level haben.  Wie mache ich das am besten? Soll ich für jedes Level eine extra Klasse haben, oder soll ich das iwie in eine Textdatei schreiben die ich dann immer auslese? Oder gibt es da noch einen ganz anderen Weg?


----------



## Landei (15. Mai 2012)

Level-Dateien in einem eigenen Format sind wesentlich flexibler. Oft reicht eine einfache Text-Datei, aber wenn du Metadaten einbinden willst, käme z.B. auch XML oder so in Frage. Wenn du später mal verhindern willst, dass jemand dran rummanipuliert, lassen sich diese über einen geeigneten Verschlüsselungs-Stream auch besser schützen als Class-Dateien (auch wenn es natürlich keinen perfekten Schutz gibt).


----------



## SlaterB (15. Mai 2012)

je nach erforderlichen Daten kann es auch direkt im Quellcode stehen,
anschaulich analog den Text-Datei-Inhalt einfach als Strings, was dann nur den Vorteil des eingesparten Einlese-Codes hat,

etwas intelligenter kann man die nötigen Objekte direkt initialisieren, dann auch Zahlwerte usw.,
neue Klassen erscheinen unnötig, neue Objekte bestehender Klassen mit anderen Werten ist der Standard für nahezu alles,
ohne Details aber kaum zu beschreiben, int gegnerAnzahl = 20, 40, 60 ..


----------



## Apo (15. Mai 2012)

Also ich finde es geht so viel ...
Kommt halt darauf an was du machen willst!
Bei ApoSheeptastic codiere ich jedes Level als String (weil es halt sehr einfach ist) und kann ihn so ganz leicht online in einer DB speichern. Bei aufwendigen Save-Games oder sehr anspruchsvollen Levels mit Skripten und Triggern oder so würde ich auch eine externe Datei anlegen. Ob als XML-File oder ein eigenes Format ... bleibt auch dir überlassen. Java bietet dir da so viel ...
Lange Rede kurzer Sinn es gibt hier kein richtig oder falsch, sondern mache es so wie du es am Besten kannst und wie es für das Spiel am Besten ist.


----------



## NZPaul (15. Mai 2012)

Wie erstelle ich denn Dateien mit einem eigenen Format also Verschlüsselt? Bietet Java da auch schon Möglichkeiten??


----------



## Landei (15. Mai 2012)

Man kann Ver- und Entschlüsselungsstreams über jeden normalen Stream (also auch FileInput/OutputStream) drüberstülpen. Ein Beispiel: Encrypting a File or Stream with DES : DESSecurityJava


----------



## Spacerat (16. Mai 2012)

Bei solchen Fragen schiesst mir immer das Egosoft-System in den Kopf. Das sind grösstenteils XML-Dateien, leicht editier- bzw. modifizierbar, keine Frage... aber...! Original-Dateien haben am Ende eine Base64 enkodierte Signatur, die mit MD5 erstellt und mit 2048-Bit RSA verschlüsselt wurde. Wenn auch nur eine Datei diese Signatur nicht hat, gilt der gesamte Spielstand als "modified" aber damit kann man zu Entwicklungszeiten stets recht gut Leben.


----------



## GeorgA (16. Mai 2012)

Hallo NZPaul,
ich verwalte die Levels in einer Klase. Die habe ich einfach (ohne Verschlüsselung) als Eigenschaften >>Properties<< gespeichert; -> bzw. lade ich die auch in der Form ins Spiel.
Beispiel:


```
public void save_Level()
    {
        Properties newPropinput1 = new Properties();
        FileOutputStream fileOut1 = null;
        // level = resourceManager.getLevel(); // wird bei mir in dee >>resourceManager<< Klasse verwaltet
        //int level_in = Integer.valueOf(level).intValue();
        //String level_st = String.valueOf(level_in - 1);
       level_st = "1"; // nur Test
       newPropinput1.put("LEVEL", level_st);
        try
        {
            fileOut1 = new FileOutputStream("Propdata_level.dat");
        }
        catch(IOException e)
        {
	// Error Handling 
        }
        newPropinput1.save(fileOut1, "Propdata_level.dat");
        try
        {
            fileOut1.close();
        }
        catch(IOException e)
        {
	//  // Error Handling 
        }
    }
```

Vielleicht hilf dir das in etwa
Gruß
Georg


----------

