Einen wunderschönen Guten Tag,
ich muss als Unterrichtsprojekt innerhalb eines Jahres ein kleines Spiel meiner Wahl in Java entwerfen. Java hatten wir in der Schule jetzt fatalerweise nur 3 Monate kurz angeschnitten, weshalb ich manchmal etwas amateurhaft mal nachfragen muss, was ich wo falsch gemacht habe. Es geht aktuell sehr gut voran!
Eine Frage hätte ich da. Ich möchte gerne meinen Spielstand abspeichern, wenn ich das Spiel schließe und beim erneuten Öffnen den Spielstand wieder abrufen.
Hierzu habe ich in mein Javaverzeichnis die Datei “spielstand.txt” integriert. Das Spiel bezieht sich auf zahlreiche Integer, die im Hintergrund alle möglichen Algorithmen des Spiels steuern.
Meine Textdatei sieht zum Beispiel so aus:
gastkarten:100
laenderkarten:24
spieleramzug:2
punktespieler1:37
punktespieler2:45
Durch den Doppelpunkt getrennt sind einerseits die einzuspeichernde Variable und auf der rechten Seite stehts der Wert, den ich einfügen möchte.
Was ich erreichen möchte ist nun, dass das Programm beim aufrufen sofort überprüft, ob spielstand.txt vorhanden ist und dann die Zeilen absucht und in die Variablen abspeichert.
Also hab ich beispielsweise die Variable punktespieler1 und er soll die Zeile suchen und die Zahl die hinter dem Doppelpunkt steht brav in den gleichnamigen Integer reinschreiben.
Ich hab viel gegooglet, aber ehrlich gesagt bisher nicht viel verstanden, was dort alles erklärt wird. Kann mir da jemand kurz weiterhelfen?
Mein bisheriger Programmcode ist dieser:
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
public class CafeRoot extends JFrame {
// Anfang Attribute
private JLabel jLabelRestkartenTisch = new JLabel();
private JLabel jLabelRestkartenGast = new JLabel();
private JLabel jLabelRestbarplaetze = new JLabel();
private JLabel jLabelHandkartenSpieler1 = new JLabel();
private JLabel jLabelHandkartenSpieler2 = new JLabel();
private JLabel jLabelPunkteSpieler1 = new JLabel();
private JLabel jLabelPunkteSpieler2 = new JLabel();
private JLabel jLabelSpieler = new JLabel();
private JList jListGastkarten = new JList();
//private DefaultListModel jListGastkartenModel = new DefaultListModel();
//private JScrollPane jListGastkartenScrollPane = new JScrollPane(jListGastkarten);
// Ende Attribute
public CafeRoot(String title) {
// Frame-Initialisierung
super(title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 468;
int frameHeight = 434;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setResizable(false);
Container cp = getContentPane();
setTitle("Café International");
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setLocationRelativeTo(null);
cp.setLayout(null);
// Anfang Komponenten
int restkartentisch = 24;
jLabelRestkartenTisch.setBounds(25, 10, 100, 30);
jLabelRestkartenTisch.setText("Resttische: "+restkartentisch);
cp.add(jLabelRestkartenTisch);
//=============================
int restkartengast = 0; //werden noch gemischt
jLabelRestkartenGast.setBounds(25, 35, 100, 30);
jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
cp.add(jLabelRestkartenGast);
//=============================
int restbarplaetze = 21;
jLabelRestbarplaetze.setBounds(25, 60, 120, 30);
jLabelRestbarplaetze.setText("Barplätze übrig: "+restbarplaetze);
cp.add(jLabelRestbarplaetze);
//=============================
int handkartenspieler1 = 0;//werden noch ausgeteilt
jLabelHandkartenSpieler1.setBounds(25, 85, 140, 30);
jLabelHandkartenSpieler1.setText("Karten Spieler 1: "+handkartenspieler1);
cp.add(jLabelHandkartenSpieler1);
//=============================
int handkartenspieler2 = 0;
jLabelHandkartenSpieler2.setBounds(25, 110, 140, 30);
jLabelHandkartenSpieler2.setText("Karten Spieler 2: "+handkartenspieler2);
cp.add(jLabelHandkartenSpieler2);
//=============================
int punktespieler1 = 0;
jLabelPunkteSpieler1.setBounds(25, 135, 140, 30);
jLabelPunkteSpieler1.setText("Pkt. Spieler 1: "+punktespieler1);
cp.add(jLabelPunkteSpieler1);
//=============================
int punktespieler2 = 0;
jLabelPunkteSpieler2.setBounds(25, 160, 140, 30);
jLabelPunkteSpieler2.setText("Pkt. Spieler 2: "+punktespieler2);
cp.add(jLabelPunkteSpieler2);
//=============================
int spieler = 1;
jLabelSpieler.setBounds(25, 185, 140, 30);
jLabelSpieler.setText("Am Zug: Spieler "+spieler);
cp.add(jLabelSpieler);
//=============================
DefaultListModel jListGastkartenModel = new DefaultListModel();
JList jList = new JList(jListGastkartenModel);
JScrollPane jListGastkartenScrollPane = new JScrollPane(jListGastkarten);
jListGastkarten.setModel(jListGastkartenModel);
jListGastkartenScrollPane.setBounds(25, 210, 297, 121);
cp.add(jListGastkartenScrollPane);
jListGastkarten.setVisible(true);
// Ende Komponenten
setVisible(true);
addWindowListener(new MyWindowListener(this));
//=============================
String[] laender = {"Deutscher", "Franzake", "Brite", "Ami", "Türke", "Inder", "Chinese", "Russe", "Spanier", "Kuba", "Afrikaner", "Italiener", "Joker"};
String[] geschlecht = {"m", "w"};
String[][] a = new String [2][(laender.length+1)*(geschlecht.length+1)*(4)];
for(int k=0;k<4;k++)
{
for(int i=0; i<13; i++)
{
for(int j=0; j<=1; j++)
{
a[0][(i+1)*(k+1)*(j+1)]=laender**;
a[1][(i+1)*(k+1)*(j+1)]=geschlecht[j];
//jListGastkarten.addElement(**[j]);
jListGastkartenModel.addElement(laender**+" ; "+geschlecht[j]);
restkartengast = restkartengast + 1;
}
}
}
jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
//Collections.shuffle(a[0]);
}
// Anfang Methoden
// Ende Methoden
public static void main(String[] args) {
new CafeRoot("CafeRoot");
} // end of main
public class MyWindowListener implements WindowListener {
private CafeRoot cRoot;
public MyWindowListener(CafeRoot cRoot) {
this.cRoot = cRoot;
}
@Override
public void windowActivated(WindowEvent arg0) { }
@Override
public void windowClosed(WindowEvent arg0) {
cRoot.setVisible(false);
}
@Override
public void windowClosing(WindowEvent evt)
{
final JFrame Beenden = new JFrame("Ein Frame zum Schließen");
Beenden.setTitle("Programm beenden");
Object[] options = {"Ja", "Nein"};
/*int beenden = JOptionPane.showConfirmDialog(null,
"Wollen Sie das Programm wirklich beenden?
Ihr Spielstand wird verloren gehen!",
"Café International Beenden?",
JOptionPane.WARNING_MESSAGE,
JOptionPane.YES_NO_OPTION);*/
int beenden = JOptionPane.showOptionDialog(null,
"Wollen Sie das Programm wirklich beenden?
Ihr Spielstand wird verloren gehen!",
"Café International Beenden?",
JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, options, options[0]);
if(beenden == 0)
{
//cRoot.dispose();
System.exit(0);
}
}
@Override
public void windowDeactivated(WindowEvent arg0) { }
@Override
public void windowDeiconified(WindowEvent arg0) { }
@Override
public void windowIconified(WindowEvent arg0) { }
@Override
public void windowOpened(WindowEvent arg0) { }
}
} // end of class CafeRoot
Ich hab bereits gelernt, dass man für meine Zwecke diesen Importbefehl oben mit einbauen muss:
import java.io.*;
Aber bisher waren mit die Quellen zu kompliziert. Kann mir jemand erklären, wie ich das machen soll und wo der dazu passende Code in meiner Datei reingehört?
Quellen waren bisher für mich:
Java, Werte aus .txt Datei nacheinander einlesen - ComputerBase Forum
Zahlen aus Textdatei lesen und in Konsole ausgeben
Integer aus Textdatei auslesen und in Variable speichern
Vielen Lieben Dank!
Gruß
Lukas
PS: Wenn jemand Zeit hat, wäre ich begeistert, wenn man dahinter kurz //kommentieren könnte, was wozu da ist. Ich möchte hier nicht einfach die “Copycat” spielen, die sich die Codes geben lässt aber keine Ahnung hat, wozu der da ist, dann präge ich mir das ja nie ein.