Dialogbox im Spiel - Text in Blöcke aufteilen

it_is_all

Aktives Mitglied
Hi Leute,
ich bin gerade in der Planungsphase eines Adventure-Games.
Werde viele Dialoge umsetzen müssen, die ähnl. wie auf dem unteren Bild in einer Box dargestellt werden, deren Platz auf eine bestimmte Anzahl von Zeichen begrenzt ist.

Ich stelle mir das so vor, dass ich den Text in eine txt-Datei schreibe und eine Methode diesen dann in Blöcke von z.B. 300 Zeichen einteilt, die dann in der Box angezeigt werden und sobald man auf "weiter" klickt, den nächsten 300-Zeichen-Block des selben txt-Dokuments, usw. bis Text am Ende in der Datei. Würde dann viele versch. txt-Dateien erstellen...

Wie findet Ihr den Ansatz? Habt Ihr iwelche Methoden-Namen, sodass ich mich darin mal einlesen kann? Oder würdet ihr die Sache anders lösen?

Ich danke Euch wirklich von Herzen für Euer Bemühen im Voraus!
MFG Dennis


Secrets+of+Grindea+1.png
 

Blender3D

Top Contributor
Code:
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;

public class TextResource {
    private String source = null;

    /**
     * Manages string resource file structure.
     *
     * @param source
     */
    public TextResource(String source) {
        this.source = source;
    }

    /**
     * Appends data text to specified category.
     *
     * @param name
     *            Category name.
     * @param text
     *            Data text.
     * @return
     */
    public boolean add(String name, String text) {
        if (!createNameDirectory(name))
            return false;
        Vector<String> data = toCategoryStringVector(name);
        data.add(text.trim());
        return saveStringVector(name, data);
    }

    /**
     * Checks if name category directory and data file exist. If not they will
     * be created .
     *
     * @param name
     *            Category name.
     * @return True if successful.
     */
    private boolean createNameDirectory(String name) {
        boolean ok = true;
        String msg = "Can't create data category " + name;
        if (name == null || name.length() == 0)
            return error(msg);
        File file = new File(getLocationDirectoryString(name));
        if (!file.exists()) {
            file.mkdirs();

        }
        File data = new File(getLocationFileString(name));
        if (!data.exists()) {
            try {
                ok = data.createNewFile();
            } catch (IOException e) {
                return error(msg);
            }
        }
        if (!file.exists() || !ok)
            return error(msg);
        return true;
    }

    private boolean error(String msg) {
        System.err.println(msg);
        return false;
    }

    private boolean existsCategoryDirectory(String name) {
        if (name == null || name.length() == 0)
            return false;
        File dir = new File(getLocationDirectoryString(name));
        return dir.exists();
    }

    /**
     * @param name
     *            Category name.
     * @return String of categories directory location.
     */
    private String getLocationDirectoryString(String name) {
        return source + "/" + name + "/";
    }

    /**
     * @param name
     *            Category name.
     * @return String of categories data location.
     */
    private String getLocationFileString(String name) {
        return getLocationDirectoryString(name) + "data.txt";
    }

    /**
     * Gets data at position of specified category.
     *
     * @param name
     *            Category name.
     * @param pos
     *            Position's id.
     * @return String or null.
     */
    public String get(String name, int pos) {
        boolean ok = existsCategoryDirectory(name);
        if (!ok)
            return null;
        Vector<String> data = toCategoryStringVector(name);
        if (pos < 0 || pos >= data.size())
            return null;
        return data.get(pos);

    }

    /**
     * @return String[] containing available categories.
     */
    public String[] getAllCategories() {
        File tmp = new File(source);
        if (!tmp.exists())
            return null;
        return tmp.list();
    }

    public boolean insert(String name, String text, int pos) {
        if (!createNameDirectory(name))
            return false;
        Vector<String> data = toCategoryStringVector(name);
        if (pos >= data.size())
            return add(name, text);
        if (pos < 0)
            pos = 0;
        data.insertElementAt(text, pos);
        return saveStringVector(name, data);
    }

    /**
     * Removes data at position of specified category.
     *
     * @param name
     *            Category name.
     * @param pos
     *            Positions id.
     * @return Removed data if successful. Otherwise null.
     */
    public String remove(String name, int pos) {
        if (!createNameDirectory(name))
            return null;
        Vector<String> data = toCategoryStringVector(name);
        if (pos < 0 || pos >= data.size())
            return null;
        String text = data.remove(pos);
        return saveStringVector(name, data) ? text : null;
    }

    /**
     * Removes specified category.
     *
     * @param name
     *            Category name.
     * @return True if successful.
     */
    public boolean removeCategory(String name) {
        boolean ok = existsCategoryDirectory(name);
        if (!ok)
            return false;
        String dir = getLocationDirectoryString(name);
        FileOperation.deleteDirecoryContent(dir);
        return FileOperation.deleteFile(dir);
    }

    private boolean saveStringVector(String name, Vector<String> data) {
        if (data == null || name == null || name.length() == 0)
            return false;
        FileStreamOut out = new FileStreamOut(getLocationFileString(name), "write " + name + " error!");
        Iterator<String> it = data.iterator();
        while (it.hasNext())
            out.writeLine(it.next().trim());
        out.close();
        return true;
    }

    public int sizeOfCategory(String name) {
        boolean ok = existsCategoryDirectory(name);
        if (!ok)
            return 0;
        Vector<String> data = toCategoryStringVector(name);
        return data == null ? 0 : data.size();
    }

    /**
     * @param name
     *            Category name.
     * @return Vector<String> Containing categories data or null.
     */
    public Vector<String> toCategoryStringVector(String name) {
        String fileName = getLocationFileString(name);
        File f = new File(fileName);
        if (!f.exists())
            return null;
        FileStreamIn in = new FileStreamIn(fileName, "read " + name + " error!");
        String line = null;
        Vector<String> data = new Vector<String>();
        while ((line = in.readLine()) != null)
            data.add(line.trim());
        in.close();
        return data;
    }
}
Code:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.swing.JOptionPane;

public class FileStreamIn {
    private FileInputStream fin = null;
    private InputStreamReader in = null;
    private BufferedReader br = null;
    private String file = null;
    private String msg = null;

    public FileStreamIn(String file, String msg) {
        this.msg = msg;
        this.file = file;
        try {
            fin = new FileInputStream(file);
            in = new InputStreamReader(fin);
            br = new BufferedReader(in);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.err.println("open error " + file);
            Error();
        }
    }

    public void close() {
        try {
            br.close();
            in.close();
            fin.close();
        } catch (IOException e) {
        }
    }

    public boolean isValid() {
        return br != null;
    }

    public String readLine() {
        String line = null;
        if (br == null)
            return null;
        try {
            line = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("read error " + file);
            Error();
        }

        return line;
    }

    public void Error() {
        JOptionPane.showMessageDialog(null, file, msg,
                JOptionPane.INFORMATION_MESSAGE, null);
    }

    public BufferedReader getBr() {
        return br;
    }
}
Code:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JOptionPane;

public class FileStreamOut {
    private FileWriter fw = null;
    private BufferedWriter bw = null;
    private String file = null;
    private String msg = null;

    public FileStreamOut(String file, String msg) {
        this.file = file;
        this.msg = msg;
        try {
            fw = new FileWriter(file);
            bw = new BufferedWriter(fw);
        } catch (IOException e) {
            System.err.println("open error " + file);
            Error();
        }
    }

    public void close() {
        try {
            bw.close();
            fw.close();
        } catch (IOException e) {
        }
    }

    public boolean isValid() {
        return bw != null;
    }

    public void Error() {
        JOptionPane.showMessageDialog(null, file, msg,
                JOptionPane.INFORMATION_MESSAGE, null);
    }

    public BufferedWriter getBw() {
        return bw;
    }

    public boolean writeLine(String line) {
        if (line == null)
            return false;
        String lineSeparator = System.getProperty("line.separator");
        try {
            bw.write(line + lineSeparator);
        } catch (IOException e) {
            Error();
            return false;
        }
        return true;
    }
}

Code:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileOperation {

    /**
     * Deletes file.
     *
     * @param file
     * @return boolean
     */
    public static boolean deleteFile(final String file) {
        File dest = new File(file);
        if (!dest.exists() || dest.isDirectory())
            return false;
        return dest.delete();
    }

    /**
     * Deletes all files in directory dir.
     *
     * @param dir
     * @return Number of delete files.
     */
    public static int deleteDirecoryContent(final String dir) {
        int cnt = 0;
        if (dir == null)
            return 0;
        File directory = new File(dir);
        if (!directory.isDirectory() || !directory.exists())
            return 0;
        String[] list = directory.list();
        String seperator = getSystemFileSeperator();
        for (String file : list) {
            if (deleteFile(directory.getAbsolutePath() + seperator + file))
                cnt++;
        }
        return cnt;
    }


}
Die Klasse TextResource könnte Dir vielleicht helfen.
 

it_is_all

Aktives Mitglied
Hilft mir wenig die 1000 Zeilen Code :(
Hab mich bissel eingelesen in TextResource (Danke)...
Und wie bekomme ich das hin, dass ein Text in 200 Zeichen-Einheiten zerlegt wird?
MFG
 

Blender3D

Top Contributor
TextResource baut ein FileSystem auf. Du hast eine Datalocation .
z.B, TextResource tR = new TextResource( "./data" );
mittels

tR.add( "raum1", "Mein Text Nr0" );
tR.add( "raum1", "Mein Text Nr1" );
...
tR.add( "raum2", "Mein Text Nr0" );
tR.add( "raum2", "Mein Text ist hier Nr1" );
...
Baust Du Dir Deine Texte auf.
mittels
String text = tR.get( "raum2", 1 );
---> text = "Mein Text ist hier Nr1"
kannst Du die Texte wieder beziehen.
Im Prinzip wird ein File erzeugt das die Texte Zeilenweise beinhaltet.
Für Zeilenumbrüche verwende einfach eine Steuerzeichen das Du selbst auswertest.
z.B. "Zeile1|Zeile 2|Zeile 3"
so kannst Du für Dein Advendure für jeden Raum Deine Texte abspeichern und verwalten.
Der Vorteil ein Text der nur 5 Zeichen benötigt braucht nur 5 Zeichen. Wenn Du mehr als 300 Zeichen brauchst geht das auch.
;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
O Texas Hold'em Poker als Online-Spiel mit Freunden Spiele- und Multimedia-Programmierung 5
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
Excess Spiel abzugeben Spiele- und Multimedia-Programmierung 1
I Superhelden - Spiel Spiele- und Multimedia-Programmierung 14
E Hauptmenü und Spiel ???? Spiele- und Multimedia-Programmierung 2
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
R Interaktives Spiel Spiele- und Multimedia-Programmierung 5
L Spiel im Editor testen Spiele- und Multimedia-Programmierung 4
Jackii dispatchUncaughtException in Quiz Spiel mit GUI Layout Spiele- und Multimedia-Programmierung 6
D Textbasiertes Spiel Spiele- und Multimedia-Programmierung 8
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
L BrickBreaker Spiel Spiele- und Multimedia-Programmierung 3
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
S Connect6 Spiel - Code in ei Spiele- und Multimedia-Programmierung 2
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
G Welten Generierung 2D Spiel Spiele- und Multimedia-Programmierung 4
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
L Coordinate Space JavaFX 2d Spiel Spiele- und Multimedia-Programmierung 0
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
N Jump and run Spiel - wo anfangen / weitermachen? Spiele- und Multimedia-Programmierung 11
K Spiel zum zuordnen von Dienstgraden und Dienstgradabzeichen Spiele- und Multimedia-Programmierung 5
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
T 2d-Spiel Licht Spiele- und Multimedia-Programmierung 5
S Jump 'n' Run-Spiel Kollisionserkennung Spiele- und Multimedia-Programmierung 3
T Spiel rendern Spiele- und Multimedia-Programmierung 2
Grevak Sounds im Spiel Spiele- und Multimedia-Programmierung 5
B Fehlerhafte Mob Bewegungen in Tower Defense Spiel Spiele- und Multimedia-Programmierung 2
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
E GUI zum Spiel hinzufügen Spiele- und Multimedia-Programmierung 19
S 2D Spiel - Physics Spiele- und Multimedia-Programmierung 16
S 2D Spiel "Der Sprung" Spiele- und Multimedia-Programmierung 7
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
G Methode sleepen während das Spiel weiterläuft Spiele- und Multimedia-Programmierung 3
T Spiel Überprüfung Spiele- und Multimedia-Programmierung 3
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
W Spiel ist langsam/laggt Spiele- und Multimedia-Programmierung 18
J Ascii Spiel Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
O Vollständige Musik in Spiel einbauen (wav - Format) Spiele- und Multimedia-Programmierung 8
Y Quiz Spiel Spiele- und Multimedia-Programmierung 1
J Conways Spiel des Lebens nachprogrammiert Spiele- und Multimedia-Programmierung 1
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
S Spiel installeren lassen und organisieren Spiele- und Multimedia-Programmierung 3
J Lichtupdate in tile-basiertem Spiel Spiele- und Multimedia-Programmierung 4
P Erstes Spiel (Strategie) Spiele- und Multimedia-Programmierung 31
J Mein erstes Spiel [Spielevorstellung] Spiele- und Multimedia-Programmierung 2
Bananabert Spiel Renderer Images und Strings Spiele- und Multimedia-Programmierung 4
N Spiel Menü error ! Spiele- und Multimedia-Programmierung 5
S Anfangsmenü mit Spiel verknüpfen Spiele- und Multimedia-Programmierung 16
S Spiel ruckelt trotz 50 fps Spiele- und Multimedia-Programmierung 16
D Spiel-Bilddaten auswerten Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
Devil0s Spiel laggt trotz 90 FPS (bei der Anzeige) Spiele- und Multimedia-Programmierung 9
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
L Korrekte Darstellung von Wasser in 2D Spiel Spiele- und Multimedia-Programmierung 4
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
J wohin mit der Logik des Spiel Spiele- und Multimedia-Programmierung 2
R Experimente mit Quaxlis Spiel Spiele- und Multimedia-Programmierung 12
W Spiel-Grundlagen selbst austüfteln: Kollisionen? Spiele- und Multimedia-Programmierung 3
Kenan89 Java 2D Spiel Spiele- und Multimedia-Programmierung 39
M Automaten Spiel Spiele- und Multimedia-Programmierung 27
J Tic tac toe spiel Neustart Spiele- und Multimedia-Programmierung 5
S 2D Spiel im Vollbild langsamer als im Fenster Spiele- und Multimedia-Programmierung 11
A TicTacToe Spiel Spiele- und Multimedia-Programmierung 3
S Verbesserungvorschläge Spiel Z Spiele- und Multimedia-Programmierung 31
S Spiel abbrechen Spiele- und Multimedia-Programmierung 3
J Greenfoot "Little Crab" Spiel Erweiterungen Spiele- und Multimedia-Programmierung 6
P Spiel HUD erstellen Spiele- und Multimedia-Programmierung 6
E Spiel neustarten Spiele- und Multimedia-Programmierung 4
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
V Basisprinzipien Breakout-Spiel Spiele- und Multimedia-Programmierung 8
E Spiel startet nach exportieren nicht Spiele- und Multimedia-Programmierung 7
Gossi Erweiterung von Quaxlis Heli-Spiel Spiele- und Multimedia-Programmierung 16
M Hilfe bei Spiel Programmierung Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben