[QUOTE=_Michael;104856]
Zum einen müsstest Du wissen wie viele Elemente einzulesen sind - evtl. eine zusätzliche Property speichern.
Zum anderen musst Du Land und Geschlecht aus der Property extrahieren und interpretieren, da man ja nicht einfach einen String in ein Enum wandeln kann…[/QUOTE]
Das ist das größte Problem.
Ich würde an dieser Stelle dann mit String Split arbeiten, beispielsweise hier:
String[] teile = string.split(";");
String land = teile[0];
String geschlecht = teile[1];```
Das Problem davor ist jedoch weiterhin, dass ich mir noch eine seriöse Schleife basteln muss, die überhaupt einen String zum Splitten einliest.:twisted:
@SlaterB : Sorry, dass ich das nicht erwähnt habe. Restkartengast ist die Anzahl der Gastkarten, die da sind. Er stellt 100 wiederher. Die Zahl 100 selbst stellt er übrigens direkt aus der Speicherdatei wiederher, weil die in dem Spiel, was wiederhergestellt wird bereits gezählt wurden.
So ist mein aktueller Komplettcode:
```package spiel;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.util.*;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import static spiel.Gastkarte.*;
public class CafeRoot extends JFrame {
private static final long serialVersionUID = 2463407896592093246L;
// Anfang Attribute
private int spielangefangen = 0;
private int restkartentisch = 0;
private int restkartengast = 0;
private int restbarplaetze = 0;
private int handkartenspieler1 = 0;
private int handkartenspieler2 = 0;
private int punktespieler1 = 0;
private int punktespieler2 = 0;
private int spieler = 0;
private String spielername1 = "Spieler 1";
private String spielername2 = "Spieler 2";
private List<Gastkarte> gastkarten = new ArrayList<Gastkarte>();
private JList<Gastkarte> jListGastkarten = new JList<Gastkarte>();
private DefaultListModel<Gastkarte> jListGastkartenModel = new DefaultListModel<Gastkarte>();
private JScrollPane jListGastkartenScrollPane= new JScrollPane(jListGastkarten);
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 boolean spielernamenkorrekt = false;
private JButton jButtonNeustart = new JButton();
// Ende Attribute
public CafeRoot(String title) throws IOException {
// Frame-Initialisierung
super(title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
Reader reader = new BufferedReader(new FileReader("neuesspiel.txt"));
Properties neuesspiel = new Properties();
try {
neuesspiel.load(reader);
}catch(FileNotFoundException ex){
ex.printStackTrace();
System.out.println("Die Datei neuesspiel.txt existiert nicht!");
}
reader.close();
Reader reader2 = new BufferedReader(new FileReader("spielstand.txt"));
Properties spielstand = new Properties();
try {
spielstand.load(reader2);
}catch(FileNotFoundException ex){
ex.printStackTrace();
System.out.println("Die Datei spielstand.txt existiert nicht!");
}
reader.close();
int frameWidth = 506;
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
jLabelRestkartenTisch.setBounds(25, 10, 100, 30);
cp.add(jLabelRestkartenTisch);
jLabelRestkartenGast.setBounds(25, 35, 100, 30);
cp.add(jLabelRestkartenGast);
jLabelRestbarplaetze.setBounds(25, 60, 120, 30);
cp.add(jLabelRestbarplaetze);
jLabelHandkartenSpieler1.setBounds(25, 85, 140, 30);
cp.add(jLabelHandkartenSpieler1);
jLabelHandkartenSpieler2.setBounds(25, 110, 140, 30);
cp.add(jLabelHandkartenSpieler2);
jLabelPunkteSpieler1.setBounds(25, 135, 140, 30);
cp.add(jLabelPunkteSpieler1);
jLabelPunkteSpieler2.setBounds(25, 160, 140, 30);
cp.add(jLabelPunkteSpieler2);
jLabelSpieler.setBounds(25, 185, 140, 30);
cp.add(jLabelSpieler);
jListGastkarten.setModel(jListGastkartenModel);
jListGastkartenScrollPane.setBounds(25, 210, 300, 100);
cp.add(jListGastkartenScrollPane);
jButtonNeustart.setBounds(320, 16, 105, 41);
jButtonNeustart.setText("Nouveau!");
jButtonNeustart.setMargin(new Insets(2, 2, 2, 2));
jButtonNeustart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
jButtonNeustart_ActionPerformed(evt);
} catch (IOException e) {
e.printStackTrace();
}
}
});
cp.add(jButtonNeustart);
//=============================
String string_spielangefangen = spielstand.getProperty("spielangefangen", "0");
int spielangefangen = Integer.parseInt(string_spielangefangen);
if(spielangefangen == 0) {
do{
namensfrage();
}while(spielernamenkorrekt == false);
System.out.println("Spieler 1 heißt: "+spielername1);
System.out.println("Spieler 2 heißt: "+spielername2);
neuesspiel();
gastkartenmischen();
}
else{
spielstand();
}
// Ende Komponenten
setVisible(true);
addWindowListener(new MyWindowListener(this, spielstand));
//=============================
Random wuerfel1 = new Random(); //Würfeltest
int wuerfel = wuerfel1.nextInt(49)+1; //Würfeltest
System.out.println(wuerfel);
}
// Anfang Methoden
public void jButtonNeustart_ActionPerformed(ActionEvent evt) throws IOException {
final JFrame Neustart = new JFrame("Ein Frame zum Schließen");
Neustart.setTitle("Spiel neustarten");
Object[] options = {"Neustarten", "Abbrechen"};
int neustart = JOptionPane.showOptionDialog(null,
"Möchtest Du das Spiel wirklich neustarten?
Dein Spielstand wird verloren gehen!",
"Café International neustarten?",
JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, options, options[0]);
if(neustart == 0) {
gastkarten.clear();
jListGastkartenModel.clear();
neuesspiel();
gastkartenmischen();
}
}
private void neuesspiel() throws IOException{
Reader reader = new BufferedReader(new FileReader("neuesspiel.txt"));
Properties neuesspiel = new Properties();
try {
neuesspiel.load(reader);
}catch(FileNotFoundException ex){
ex.printStackTrace();
System.out.println("Die Datei neuesspiel.txt existiert nicht!");
}
reader.close();
String string_restkartentisch = neuesspiel.getProperty("restkartentisch", "24");
restkartentisch = Integer.parseInt(string_restkartentisch);
jLabelRestkartenTisch.setText("Resttische: "+restkartentisch);
String string_restkartengast = neuesspiel.getProperty("restkartengast", "0");
restkartengast = Integer.parseInt(string_restkartengast);
jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
String string_restbarplaetze = neuesspiel.getProperty("restbarplaetze", "21");
restbarplaetze = Integer.parseInt(string_restbarplaetze);
jLabelRestbarplaetze.setText("Barplätze übrig: "+restbarplaetze);
String string_handkartenspieler1 = neuesspiel.getProperty("handkartenspieler1", "0");
handkartenspieler1 = Integer.parseInt(string_handkartenspieler1);
jLabelHandkartenSpieler1.setText("Karten "+spielername1+": "+handkartenspieler1);
String string_handkartenspieler2 = neuesspiel.getProperty("handkartenspieler2", "0");
handkartenspieler2 = Integer.parseInt(string_handkartenspieler2);
jLabelHandkartenSpieler2.setText("Karten "+spielername2+": "+handkartenspieler2);
String string_punktespieler1 = neuesspiel.getProperty("punktespieler1", "0");
punktespieler1 = Integer.parseInt(string_punktespieler1);
jLabelPunkteSpieler1.setText("Punkte "+spielername1+": "+punktespieler1);
String string_punktespieler2 = neuesspiel.getProperty("punktespieler2", "0");
punktespieler2 = Integer.parseInt(string_punktespieler2);
jLabelPunkteSpieler2.setText("Punkte "+spielername2+": "+punktespieler2);
String string_spieler = neuesspiel.getProperty("spieler", "1");
spieler = Integer.parseInt(string_spieler);
if(spieler == 1){
jLabelSpieler.setText("Am Zug: "+spielername1);
}
else{
jLabelSpieler.setText("Am Zug: "+spielername2);
}
System.out.println("Neues Spiel gestartet");
}
private void spielstand() throws IOException{
Reader reader2 = new BufferedReader(new FileReader("spielstand.txt"));
Properties spielstand = new Properties();
try {
spielstand.load(reader2);
}catch(FileNotFoundException ex){
ex.printStackTrace();
System.out.println("Die Datei spielstand.txt existiert nicht!");
}
reader2.close();
JOptionPane.showMessageDialog(null, "Ein Zwischengespeichertes Spiel wird wiederhergestellt!", "Weiterspielen", JOptionPane.INFORMATION_MESSAGE);
String spielername1 = spielstand.getProperty("spielername1", "Nicht vorhanden");
String spielername2 = spielstand.getProperty("spielername2", "Nicht vorhanden");
String string_restkartentisch = spielstand.getProperty("restkartentisch", "0");
restkartentisch = Integer.parseInt(string_restkartentisch);
jLabelRestkartenTisch.setText("Resttische: "+restkartentisch);
String string_restkartengast = spielstand.getProperty("restkartengast", "0");
restkartengast = Integer.parseInt(string_restkartengast);
jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
String string_restbarplaetze = spielstand.getProperty("restbarplaetze", "21");
restbarplaetze = Integer.parseInt(string_restbarplaetze);
jLabelRestbarplaetze.setText("Barplätze übrig: "+restbarplaetze);
String string_handkartenspieler1 = spielstand.getProperty("handkartenspieler1", "0");
handkartenspieler1 = Integer.parseInt(string_handkartenspieler1);
jLabelHandkartenSpieler1.setText("Karten "+spielername1+": "+handkartenspieler1);
String string_handkartenspieler2 = spielstand.getProperty("handkartenspieler2", "0");
handkartenspieler2 = Integer.parseInt(string_handkartenspieler2);
jLabelHandkartenSpieler2.setText("Karten "+spielername2+": "+handkartenspieler2);
String string_punktespieler1 = spielstand.getProperty("punktespieler1", "0");
punktespieler1 = Integer.parseInt(string_punktespieler1);
jLabelPunkteSpieler1.setText("Punkte "+spielername1+": "+punktespieler1);
String string_punktespieler2 = spielstand.getProperty("punktespieler2", "0");
punktespieler2 = Integer.parseInt(string_punktespieler2);
jLabelPunkteSpieler2.setText("Punkte "+spielername2+": "+punktespieler2);
String string_spieler = spielstand.getProperty("spieler", "1");
spieler = Integer.parseInt(string_spieler);
if(spieler == 1){
jLabelSpieler.setText("Am Zug: "+spielername1);
}
else{
jLabelSpieler.setText("Am Zug: "+spielername2);
}
/*for (int n=0;n<restkartengast;n++) {
String gastkartewiederhergestellt = spielstand.getProperty("gastkarten" + n, gastkarten.get(n) + "");
System.out.println(gastkartewiederhergestellt);
//gastkarten.add(new Gastkarte(gastkartewiederhergestellt))
}*/
System.out.println("Ein altes Spiel wurde wiederhergestellt");
}
private void namensfrage() {
JTextField spielername01 = new JTextField(new MaxSizeDocument(12), "", 0);
JTextField spielername02 = new JTextField(new MaxSizeDocument(12), "", 0);
Object[] namensfrage = {"Name von Spieler 1", spielername01, "Name von Spieler 2", spielername02};
JOptionPane pane = new JOptionPane(namensfrage, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION);
pane.createDialog(null, "Wie heißen die Spieler?").setVisible(true);
spielername1 = spielername01.getText();
spielername2 = spielername02.getText();
if(spielername1.equals("") || spielername2.equals("")) {
JOptionPane.showMessageDialog(null, "Bitte gib beide Spielernamen ein!", "Unvollständige Eingabe", JOptionPane.ERROR_MESSAGE);
System.out.println("Es wurden nicht alle Spielernamen eingetragen");
namensfrage();
}
else if(spielername1.equalsIgnoreCase(spielername2)) {
JOptionPane.showMessageDialog(null, "Bitte benenne die Spieler unterschiedlich!", "Namensgleichheit", JOptionPane.ERROR_MESSAGE);
System.out.println("Es wurde bei beiden Namen \""+spielername1+"\" eingetragen");
namensfrage();
}
else{
spielernamenkorrekt = true;
}
}
private void gastkartenmischen() {
for(int j=0;j<2;j++){
for(Land land : Land.values()) {
int anzahl = 2;
if (land == Land.Joker) {
anzahl = 1;
}
for(int i = 0; i < anzahl; i++) {
for(Geschlecht geschlecht : Geschlecht.values()) {
gastkarten.add(new Gastkarte(geschlecht, land));
restkartengast = restkartengast + 1;
}
}
}
}
/*Gastkarte eineGastkarte = gastkarten.get(0);
Geschlecht geschlecht = eineGastkarte.geschlecht;
Land land = eineGastkarte.land;
if(land == Land.Chinese) {
System.out.println("Nihao!");
}*/
jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
Collections.shuffle(gastkarten);
for(int n=0;n<gastkarten.size();n++){
jListGastkartenModel.addElement(gastkarten.get(n));
}
System.out.println("Die Gastkarten wurden gemischt");
System.out.println(gastkarten);
}
// Ende Methoden
public static void main(String[] args) throws IOException {
new CafeRoot("CafeRoot");
} // end of main
public class MyWindowListener implements WindowListener {
private Properties spielstand;
private CafeRoot cRoot;
public MyWindowListener(CafeRoot cRoot,Properties spielstand) {
this.cRoot = cRoot;
this.spielstand = spielstand;
}
@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("Spiel beenden");
Object[] options = {"Speichern", "Beenden", "Abbrechen"};
int beenden = JOptionPane.showOptionDialog(null,
"Möchtest Du das Spiel wirklich beenden?
Dein Spielstand wird verloren gehen!",
"Café International beenden?",
JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, options, options[0]);
if(beenden == 0)
{
try {
spielangefangen = 1;
spielstand.setProperty("spielangefangen",spielangefangen + "");
spielstand.setProperty("restkartentisch",restkartentisch + "");
spielstand.setProperty("restkartengast",restkartengast + "");
spielstand.setProperty("restbarplaetze",restbarplaetze + "");
spielstand.setProperty("handkartenspieler1",handkartenspieler1 + "");
spielstand.setProperty("handkartenspieler2",handkartenspieler2 + "");
spielstand.setProperty("punktespieler1",punktespieler1 + "");
spielstand.setProperty("punktespieler2",punktespieler2 + "");
spielstand.setProperty("spielername1",spielername1);
spielstand.setProperty("spielername2",spielername2);
spielstand.setProperty("spieler",spieler + "");
for (int n=0;n<restkartengast; n++) {
spielstand.setProperty("gastkarten" + n, gastkarten.get(n) + "");
}
spielstand.store(new FileWriter("spielstand.txt"),"Gespeichertes Spiel");
System.out.println("Das Spiel wurde beendet und der Spielstand abgespeichert");
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
}
else{
if(beenden == 1) {
try {
spielangefangen = 0;
spielstand.setProperty("spielangefangen",spielangefangen + "");
spielstand.store(new FileWriter("spielstand.txt"),"Keine Speicherdatei");
System.out.println("Das Spiel wurde beendet, aber kein Spielstand gespeichert");
} catch (IOException e) {
e.printStackTrace();
}
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
In der Methode Gastkartenmischen ab Zeile 291 wird immer hochgezählt bei jeder neuen Karte:
restkartengast = restkartengast + 1;
Und wiederhergestellt wird der Wert auch:
restkartengast = Integer.parseInt(string_restkartengast);
jLabelRestkartenGast.setText("Restgäste: "+restkartengast);```
Glaub mir, das Programm zeigt dann auch 100 an, das stimmt erstmal so. ;)
Gruß
Lukas
PS: Ich hab Deinen Beitrag nur bis zum ersten -------- gelesen, bis dahin war er, als ich hier angefangen habe zu schreiben.
Damit der Beitrag erstmal nicht überladen ist, antworte ich darauf gleich in einem neuen Beitrag, wenn ich das bearbeitet habe.