hi, habe ein programm geschrieben, dass noch nicht ganz fertig ist.
ich möchte mich nun daran machen, das ganze zu gliedern, da ich es bisher leider gottes alles in 3 klasse hatte.
ich habe auch schon etwas gegliedert, aber den quellcode habe ich leider nicht hier, sondern an meinem studienort, wo ich erst wieder in einer woche sein werde...
lange rede kurzer sinn:
das programm beginnt mit der klasse Startingbildschirm, wo die spielernamen und die spieleranzahl abgefragt wird.
in der nächsten klasse "Reading" ist der spielablauf geregelt, die erstellung des gui, ...quasi alles...
die klasse Spieler wird genutzt, um drei Spieler-Objekt zu bilden.
Ich muss auf jeden Fall die Klasse Reading unterteilen. Ich hatte gedacht sie in eine klasse zu teilen, die den zufallsbegriff erzeugt, eine klasse, die das gui mit werten beliefert und jeweils eine klasse, die für DREHEN, VOKAL RATEN und LÖSEN zuständig ist. dann noch eine, die die eingaben auf korrekheit prüft.
es geht mir nicht darum, ob irgendwas im programm noch nicht richtig funzt, es geht mir vor allem darum, eine sinnvolle gliederung vorzunehmen.
ich habe auch schon versucht das ganze ein bisschen mvc-technisch zu lösen, aber das übersteigt meine fähigkeiten.
ich wäre sehr dankbar, wenn mir jemand denkanstöße geben würde, da ich bereits etliche stunden damit verbracht habe, das ganze zu gliedern, um des dann wieder völlig anders zu machen, um dann wieder da anzukommen, wo ich am tag davor war...
abgesehen davon macht das spiel bestimmt sogar spaß, wenn erst einmal alles implementiert ist
die sources+ die textdateien mit den begriffen hab ich auch unter www.sprachen-hilfe.de/aktuell2.zip online gestellt.
wenn ich mich nicht irre fehlt da die klasse zum begriffe hinzufügen, die ich bereits fertig habe. die liegt aber leider auch an meinem studienort aufm rechner.
da ich von morgen bis dienstag im urlaub bin, kann ich erst dann auf anregungen reagieren, also nicht ungeduldig werden, falls sich tatsächlich jemand mit meinen problemen befassen sollte
zu meiner verteidigung muss ich sagen, dass es mein erstes programm ist, dass eine gui besitzt und über 100 zeilen quelltext geht
grüße an die genervten roar, EagleEye und wie sie alle heißen
ich möchte mich nun daran machen, das ganze zu gliedern, da ich es bisher leider gottes alles in 3 klasse hatte.
ich habe auch schon etwas gegliedert, aber den quellcode habe ich leider nicht hier, sondern an meinem studienort, wo ich erst wieder in einer woche sein werde...
lange rede kurzer sinn:
das programm beginnt mit der klasse Startingbildschirm, wo die spielernamen und die spieleranzahl abgefragt wird.
in der nächsten klasse "Reading" ist der spielablauf geregelt, die erstellung des gui, ...quasi alles...
die klasse Spieler wird genutzt, um drei Spieler-Objekt zu bilden.
Ich muss auf jeden Fall die Klasse Reading unterteilen. Ich hatte gedacht sie in eine klasse zu teilen, die den zufallsbegriff erzeugt, eine klasse, die das gui mit werten beliefert und jeweils eine klasse, die für DREHEN, VOKAL RATEN und LÖSEN zuständig ist. dann noch eine, die die eingaben auf korrekheit prüft.
es geht mir nicht darum, ob irgendwas im programm noch nicht richtig funzt, es geht mir vor allem darum, eine sinnvolle gliederung vorzunehmen.
ich habe auch schon versucht das ganze ein bisschen mvc-technisch zu lösen, aber das übersteigt meine fähigkeiten.
ich wäre sehr dankbar, wenn mir jemand denkanstöße geben würde, da ich bereits etliche stunden damit verbracht habe, das ganze zu gliedern, um des dann wieder völlig anders zu machen, um dann wieder da anzukommen, wo ich am tag davor war...
abgesehen davon macht das spiel bestimmt sogar spaß, wenn erst einmal alles implementiert ist
die sources+ die textdateien mit den begriffen hab ich auch unter www.sprachen-hilfe.de/aktuell2.zip online gestellt.
wenn ich mich nicht irre fehlt da die klasse zum begriffe hinzufügen, die ich bereits fertig habe. die liegt aber leider auch an meinem studienort aufm rechner.
da ich von morgen bis dienstag im urlaub bin, kann ich erst dann auf anregungen reagieren, also nicht ungeduldig werden, falls sich tatsächlich jemand mit meinen problemen befassen sollte
zu meiner verteidigung muss ich sagen, dass es mein erstes programm ist, dass eine gui besitzt und über 100 zeilen quelltext geht
grüße an die genervten roar, EagleEye und wie sie alle heißen
Code:
import java.io.*;
import java.util.Vector;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class startingbildschirm extends JFrame implements ActionListener, ItemListener
{
JLabel obenText, untenText;
private JButton ok;
private JComboBox auswahl;
int zahl;
String n1, n2, n3;
private JPanel unten, unten1, untenGeteilt;
public startingbildschirm()
{
initialisiereAttribute();
erzeugeMenue();
// Fenstergroesse setzen
setSize(800,600);
// und anzeigen
setVisible( true );
}
private void initialisiereAttribute()
{
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
unten = new JPanel();
unten1 = new JPanel();
untenGeteilt = new JPanel();
untenGeteilt.setLayout(new BorderLayout());
// kein JLabel bAnzeige...weils dann null-pointer gibt!
obenText = new JLabel("Glücksrad", JLabel.CENTER);
obenText.setFont(new Font("Tahoma", Font.BOLD, 48));
obenText.setForeground(Color.blue);
JComboBox auswahl = new JComboBox();
auswahl.addItemListener(this);
auswahl.addItem( "Ein Spieler" );
auswahl.addItem( "Zwei Spieler" );
auswahl.addItem( "Drei Spieler");
untenText = new JLabel("Spielerzahl wählen und mit OK bestätigen, um ein neues Spiel zu starten!", JLabel.CENTER);
untenText.setFont(new Font("Verdana", Font.BOLD, 14));
JButton ok = new JButton("ok");
ok.setActionCommand("ok");
ok.addActionListener(this);
Image gRad = getToolkit().getImage("gRad.jpg");
unten.add(auswahl);
unten.add(ok);
unten1.add(untenText);
untenGeteilt.add(unten, BorderLayout.NORTH);
untenGeteilt.add(unten1, BorderLayout.SOUTH);
contentPane.add(obenText, BorderLayout.NORTH);
contentPane.add(new JLabel(new ImageIcon(gRad)), BorderLayout.CENTER);
contentPane.add(untenGeteilt, BorderLayout.SOUTH);
}
void erzeugeMenue()
{
// Menüpunkt "Neues Spiel"
JMenuItem mi_neu = new JMenuItem( "Neues Spiel" );
mi_neu.setActionCommand( "Neues Spiel" );
// neues Spiel mit Ctrl-N
mi_neu.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_N,
ActionEvent.CTRL_MASK) );
mi_neu.addActionListener( this );
// Menüpunkt "Ende"
JMenuItem mi_ende = new JMenuItem( "Ende" );
mi_ende.setActionCommand( "Ende" );
// Ende mit Ctrl-E
mi_ende.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_E,
ActionEvent.CTRL_MASK) );
mi_ende.addActionListener( this );
JMenuItem mi_begriffe = new JMenuItem( "Begriff hinzufügen" );
mi_begriffe.setActionCommand( "Begriffe" );
// Neuen Begriff mit strg+B
mi_begriffe.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_B,
ActionEvent.CTRL_MASK) );
mi_begriffe.addActionListener( this );
JMenuItem mi_about = new JMenuItem( "Über das Projekt" );
mi_about.setActionCommand( "About" );
// About-Fenster mit strg+A
mi_about.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_A,
ActionEvent.CTRL_MASK) );
mi_about.addActionListener( this );
JMenuItem mi_hilfe = new JMenuItem( "Spielablauf" );
mi_hilfe.setActionCommand( "Hilfe" );
// About-Fenster mit strg+A
mi_hilfe.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_A,
ActionEvent.CTRL_MASK) );
mi_hilfe.addActionListener( this );
JMenu m_spiel = new JMenu( "Spiel" );
m_spiel.add( mi_neu );
m_spiel.add( mi_ende );
JMenu m_begriffe = new JMenu( "Begriffe" );
m_begriffe.add( mi_begriffe);
JMenu m_hilfe = new JMenu( "Hilfe" );
m_hilfe.add( mi_hilfe );
JMenu m_about = new JMenu( "About" );
m_about.add( mi_about );
JMenuBar dieMenueleiste = new JMenuBar();
dieMenueleiste.add( m_spiel );
dieMenueleiste.add( m_begriffe );
dieMenueleiste.add( m_hilfe);
dieMenueleiste.add( m_about);
setJMenuBar( dieMenueleiste );
}
public void itemStateChanged(ItemEvent e)
{
JComboBox selectedChoice = (JComboBox)e.getSource();
zahl = selectedChoice.getSelectedIndex();
}
public void actionPerformed(ActionEvent e)
{
String aktion = e.getActionCommand();
if(aktion.equals ("ok"))
{
switch (zahl)
{
case 0:
n1 = JOptionPane.showInputDialog(this, "Spieler 1, wie ist dein Name?", "Bitte Namen eingeben",JOptionPane.QUESTION_MESSAGE);break;
case 1:
n1 = JOptionPane.showInputDialog(this, "Spieler 1, wie ist dein Name?", "Bitte Namen eingeben",JOptionPane.QUESTION_MESSAGE);
n2 = JOptionPane.showInputDialog(this, "Spieler 2, wie ist dein Name?", "Bitte Namen eingeben",JOptionPane.QUESTION_MESSAGE);
this.dispose();
reading r = new reading(n1,n2, n3);
break;
case 2:
n1 = JOptionPane.showInputDialog(this, "Spieler 1, wie ist dein Name?", "Bitte Namen eingeben",JOptionPane.QUESTION_MESSAGE);
n2 = JOptionPane.showInputDialog(this, "Spieler 2, wie ist dein Name?", "Bitte Namen eingeben",JOptionPane.QUESTION_MESSAGE);
n3 = JOptionPane.showInputDialog(this, "Spieler 3, wie ist dein Name?", "Bitte Namen eingeben",JOptionPane.QUESTION_MESSAGE);
this.dispose();
r = new reading(n1,n2,n3);
break;
}
}
else if(aktion.equals ("Neues Spiel"))
{
this.setVisible(false);
}
else if (aktion.equals ("Ende"))
{
System.exit(0);
}
else if (aktion.equals ("Begriffe"))
{
terms t = new terms();
}
else if (aktion.equals ("Hilfe"))
{
JOptionPane.showMessageDialog(this,"Ein Spieler ist solange dran, bis er\n- auf das Feld 'Pleite' oder
'Aussetzen' kommt\n- einen Buchstaben rät, der nicht vorhanden ist oder schon aufgedeckt wurde\n
den zu erratenden Begriff falsch auflöst\n\nEine Spielrunde ist vorbei, wenn der zu erratende Begriff gelöst
wurde.\nGewonnen hat der Spieler, der am Ende aller gespielten Runden die meisten Runden gewonnen hat.\n
Um in die Highscore-Liste zu kommen, spielt nur das erspielte Geld eine Rolle.\n\n
Besonderheiten:\n-
Vokale kosten 300$\n- Umlaute 'ä', 'ü', 'ö' werden zu 'ae', 'ue', 'ae'\n- 'ß' wird zu ss\n- Zwischen Groß- und Kleinschreibung wird nicht unterschieden",
"So funktioniert das Spiel", JOptionPane.INFORMATION_MESSAGE);
}
else if(aktion.equals ("About"))
{
JOptionPane.showMessageDialog(this,"Dieses Projekt ist im Rahmen des Java-Kurses im
Sommersemester 2005 enstanden.\n
Entworfen haben dieses Programm Stefan Martens, Julia Schweppe und Alexandra Marquardt.", "About", JOptionPane.INFORMATION_MESSAGE);
}
}
public static void main (String args[])
{
new startingbildschirm();
}
}
Code:
import java.io.*;
import java.util.Vector;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class reading extends JFrame implements ActionListener
{
String[] bereiche= { "FilmundFernsehen.txt", "Orte.txt", "Sport.txt", "Wissenschaft.txt", "Geschichte.txt",
"Universität.txt", "Literatur.txt", "Lebensmittel.txt", "Umwelt.txt", "Sprichwörter.txt" };
private String felder[] = { "Pleite :-P", "500", "200", "1000", "200", "Aussetzen", "Extradreh", "2000", "Pleite :-P",
"500", "200", "5000", "1000", "Aussetzen", "Extradreh", "2000"};
boolean vorhanden;
JButton erzeugen;
private String betrag;
JLabel bAnzeige, dran, erdreht;
JLabel snr1, snr2, snr3;
JTextField[] anzeige;
String s,t, eingabe, textdatei = "";
int zeilen, bereich, zufallsZeile, wLaenge, zahl;
char key;
JTextField buchstabe = new JTextField();
JButton ok;
String begriff;
JTextField konto1, konto2, konto3;
JButton drehen;
Vector buchstaben;
Spieler s1,s2,s3;
private Spieler aktuellerSpieler;
private JTextField aktuellesKonto;
String vokalString, konsonantString ="";
int anzahlBuchstaben, anzahlBuchstaben1;
boolean extradreh;
int aktuellerBetrag;
String n1, n2, n3;
JPanel obenGeteilt, mitte, untenGeteilt, untenUnten, untenOben, obenOben, obenUnten;
JLabel rad;
ImageIcon icon;
public reading(String n1, String n2, String n3)
{
this.n1 = n1;
this.n2 = n2;
this.n3 = n3;
s1 = new Spieler(n1,"",0,0,false,false,false, this);
s2 = new Spieler(n2,"",0,0,false,false,false, this);
s3 = new Spieler(n3,"",0,0,false,false,false, this);
initialisiereAttribute();
// Fenstergroesse setzen
setSize(800,600);
// und anzeigen
setVisible( true );
}
private void initialisiereAttribute()
{
icon = new ImageIcon("test.gif");
rad = new JLabel(icon);
einlesen();
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
obenGeteilt = new JPanel();
obenGeteilt.setLayout(new BorderLayout());
mitte = new JPanel();
mitte.setLayout(new FlowLayout());
untenGeteilt = new JPanel();
untenGeteilt.setLayout(new BorderLayout());
untenUnten = new JPanel();
untenOben = new JPanel();
obenOben = new JPanel(new FlowLayout());
obenUnten = new JPanel();
dran= new JLabel(this.n1+" beginnt!");
erdreht = new JLabel("Erdrehter Betrag: ");
bAnzeige = new JLabel();
anzeige = new JTextField[begriff.length()];
buchstaben = new Vector();
buchstaben.setSize(begriff.length());
obenUnten.add(bAnzeige);
/* Es werden genausoviele Textfelder erzeugt, wie der gesuchte Begriff Buchstaben
* hat. Leerzeichen werden, um Übersichtlichkeit zu wahren, optisch abgegrenzt.
*/
for (int i = 0; i<begriff.length(); i++)
{
anzeige[i] = new JTextField(2);
anzeige[i].setFont(new Font("comic sans ms", Font.BOLD, 14));
anzeige[i].setEditable(false);
anzeige[i].setHorizontalAlignment(anzeige[i].CENTER);
if (begriff.substring(i, i+1).equals(" "))
{
anzeige[i].setOpaque(false);
}
else if (begriff.substring(i, i+1).equals("."))
{
anzeige[i].setText(".");
}
else if (begriff.substring(i, i+1).equals(","))
{
anzeige[i].setText(",");
}
else if (begriff.substring(i, i+1).equals("-"))
{
anzeige[i].setText("-");
}
else if (begriff.substring(i, i+1).equals("'"))
{
anzeige[i].setText("'");
}
else
{
anzeige[i].setBackground(Color.white);
// erhöhe die Anzahl der tatsächlichen Buchstaben im Begriff.
anzahlBuchstaben++;
}
obenOben.add(anzeige[i]);
}
buchstabe = new JTextField(1);
JButton erzeugen = new JButton("Auflösen");
erzeugen.setActionCommand("create");
erzeugen.addActionListener(this);
JButton ok = new JButton("ok");
ok.setActionCommand("ok");
ok.addActionListener(this);
// Bereich aus dem der gesuchte Begriff kommt wird angezeigt (ohne die Endung '.txt').
bAnzeige.setText("Bereich "+bereiche[bereich].substring(0, bereiche[bereich].length()-4));
bAnzeige.setFont(new Font("Arial", Font.BOLD, 16));
snr1 = new JLabel(s1.getName());
snr1.setForeground(Color.blue);
snr2 = new JLabel(s2.getName());
snr3 = new JLabel(s3.getName());
konto1 = new JTextField(String.valueOf(s1.getRundenKontostand()),6);
konto2 = new JTextField(String.valueOf(s2.getRundenKontostand()),6);
konto3 = new JTextField(String.valueOf(s2.getRundenKontostand()),6);
konto1.setEditable(false);
konto2.setEditable(false);
konto3.setEditable(false);
JButton vokal = new JButton("Vokal kaufen");
vokal.setActionCommand("vokal");
vokal.addActionListener(this);
JButton drehen = new JButton("drehen");
drehen.setActionCommand("drehen");
drehen.addActionListener(this);
untenUnten.add(erzeugen);
untenUnten.add(drehen);
untenUnten.add(vokal);
untenOben.add(snr1);
untenOben.add(konto1);
untenOben.add(snr2);
untenOben.add(konto2);
untenOben.add(snr3);
untenOben.add(konto3);
obenGeteilt.add(obenOben, BorderLayout.NORTH);
obenGeteilt.add(obenUnten, BorderLayout.SOUTH);
untenGeteilt.add(untenOben, BorderLayout.NORTH);
untenGeteilt.add(untenUnten, BorderLayout.SOUTH);
contentPane.add(obenGeteilt, BorderLayout.NORTH);
contentPane.add(rad, BorderLayout.CENTER);
contentPane.add(untenGeteilt, BorderLayout.SOUTH);
if (n3 == null)
{
konto3.setVisible(false);
snr3.setVisible(false);
}
// Initialisieren des aktuellen Spielers - sonst Null-Pointer!
aktuellerSpieler = s1;
aktuellesKonto = konto1;
}
// hier findet die Ereignisverarbeitung der Buttons statt
public void actionPerformed(ActionEvent event)
{
String getAC = event.getActionCommand();
// das kann man zu einer methode zusammenfassen
if (getAC.equals ("drehen"))
{
getBetrag();
konsonantRaten();
}
// Ereignisverarbeitung wenn der Spieler lösen möchte.
if(getAC.equals ("create"))
{
loesungPruefen();
}
if(getAC.equals ("vokal"))
{
vokalRaten();
}
}
private boolean istVokal()
{
String vokale = new String("aeiou");
int retVal = vokale.indexOf(vokalString);
if (retVal >= 0)
return true;
else
return false;
}
private boolean istKonsonant()
{
String konsonanten = new String("bcdfghjklmnpqrstvwxyz");
int retVal = konsonanten.indexOf(konsonantString);
if (retVal >= 0)
return true;
else
return false;
}
// Raten des Vokals wird simuliert.
public void vokalRaten()
{
vorhanden = false;
/* Hat der Spieler weniger als 300 auf dem Konto, so wird er darauf hingewiesen,
* er ist allerdings noch weiterhin dran.
*/
if (aktuellerSpieler.getRundenKontostand() < 300)
{
JOptionPane.showMessageDialog(this,"Du hast nicht genügend Geld um einen Vokal zu kaufen!",
"Ups...", JOptionPane.INFORMATION_MESSAGE);
}
/* Hat der Spieler genug Geld, so wird geprüft, ob es sich um einen regulären
* Vokal handelt.
*/
else
{
vokalString = JOptionPane.showInputDialog(this,"Na "+aktuellerSpieler.getName()+ ",
welcher Vokal soll es sein?","Bitte Vokal eingeben...", JOptionPane.QUESTION_MESSAGE);
if(vokalString == null)
{
System.out.println("User hat Dialogfeld abgebrochen :-(");
}
else if (!istVokal())
{
JOptionPane.showMessageDialog(this,"Das ist kein gültiger Vokal!", "Ups...", JOptionPane.INFORMATION_MESSAGE);
naechster();
}
/* Handelt es sich um einen regulären Vokal, so ziehe dem Konto des aktuellen
* Spielers 300 ab.
*/
else
{
aktuellerSpieler.setRundenKontostand(aktuellerSpieler.getRundenKontostand() -300);
aktuellesKonto.setText(String.valueOf(aktuellerSpieler.getRundenKontostand()));
checkBuchstabe(vokalString);
}
}
}
public void checkBuchstabe(String string)
{
/* checken, ob der Buchstabe schon im Begriff vorhanden ist.
* Sollte das der Fall sein, so weise darauf hin.
* Hat der Spieler einen Extradreh, so ist er weiterhin dran.
*/
if (buchstaben.contains(string))
{
if (!aktuellerSpieler.getExtradreh())
{
JOptionPane.showMessageDialog(this,"Guck mal ordentlich hin, der Buchstabe ist doch schon vorhanden!",
"Glück gehabt...", JOptionPane.INFORMATION_MESSAGE);
naechster();
}
else
{
JOptionPane.showMessageDialog(this, "Der Buchstabe ist zwar schon vorhanden, aber du hast ja einen Extradreh. Du bist weiterhin dran!",
"Glück gehabt...", JOptionPane.INFORMATION_MESSAGE);
aktuellerSpieler.setExtradreh(false);
}
}
/* Ist der Buchstabe noch nicht vorhanden, so gehe den Begriff einzeln durch
* und schau, ob der Buchstabe vorhanden ist. Zeige ihn gegebenfalls an.
*/
else
{
for (int i =0; i<begriff.length(); i++)
{
// Wenn der Buchstabe im Begriff enthalten ist..
if(string.equalsIgnoreCase(begriff.substring(i,i+1)))
{
buchstaben.insertElementAt((Object)string,i);
anzeige[i].setText(begriff.substring(i,i+1));
/* Sollte es ein Konsonant sein, addiere die erdreht Summe so oft auf das Spieler-
* konto wie der Buchstabe vorkommt.
*/
if (string == konsonantString)
{
aktuellerSpieler.setRundenKontostand(aktuellerBetrag+aktuellerSpieler.getRundenKontostand());
aktuellesKonto.setText(String.valueOf(aktuellerSpieler.getRundenKontostand()));
}
// Buchstabe ist vorhanden!
vorhanden = true;
//Anzahl der aufgedeckten Buchstaben wird erhöht.
anzahlBuchstaben1++;
}
}
/* Ist der Buchstabe nicht vorhanden, so prüfe ob der aktuelle Spieler
* einen Extradreh hat. Hat er einen, ist er weiterhin dran, hat er keinen,
* so ist der nächste Spieler dran.
*/
if (!vorhanden)
{
if (!aktuellerSpieler.getExtradreh())
{
JOptionPane.showMessageDialog(this,"Der Buchstabe ist nicht vorhanden!", "Schade,
schade...",JOptionPane.INFORMATION_MESSAGE);
naechster();
}
else
{
JOptionPane.showMessageDialog(this, "Der Buchstabe ist zwar nicht vorhanden, aber du hast ja einen Extradreh. Du bist weiterhin dran!",
"Glück gehabt...", JOptionPane.INFORMATION_MESSAGE);
aktuellerSpieler.setExtradreh(false);
}
}
// test, um zu sehen, was im vector vorhanden ist.
System.out.println(buchstaben.toString());
/* Wenn die Anzahl der Buchstaben im Begriff den aufgedeckten Buchstaben
* gleichen, so weise drauf hin, dass der Begriff gelöst wurde!
*/
if (anzahlBuchstaben == anzahlBuchstaben1)
{
JOptionPane.showMessageDialog(this, "Sauber, damit hat "+aktuellerSpieler.getName()+" gewonnen!", "Juuhuuu...", JOptionPane.INFORMATION_MESSAGE);
aktuellerSpieler.setRundenKontostand(aktuellerSpieler.getRundenKontostand() + 1000);
}
}
}
// In dieser Klasse wird das Raten eines Konsonanten nach dem Drehen simuliert.
public void konsonantRaten()
{
// vorhanden wird auf false gesetzt - prüfen, ob das nötig ist..
vorhanden = false;
if (betrag.equals("Pleite :-P"))
{
aktuellerSpieler.setRundenKontostand(0);
aktuellesKonto.setText(String.valueOf(aktuellerSpieler.getRundenKontostand()));
if (!aktuellerSpieler.getExtradreh())
{
JOptionPane.showMessageDialog(this, "Mist - '"+betrag+"'!", "Oh nein...", JOptionPane.INFORMATION_MESSAGE);
naechster();
}
else
{
JOptionPane.showMessageDialog(this,"Oh nein - 'Pleite'! Naja immerhin hast du einen Extradreh. Dreh gleich nochmal!", "Glück gehabt...",JOptionPane.INFORMATION_MESSAGE);
aktuellerSpieler.setExtradreh(false);
}
}
else if (betrag.equals("Aussetzen"))
{
if (!aktuellerSpieler.getExtradreh())
{
JOptionPane.showMessageDialog(this, "Mist - '"+betrag+"'!","Oh nein...",JOptionPane.INFORMATION_MESSAGE );
naechster();
}
else
{
JOptionPane.showMessageDialog(this, "Aussetzen - aber du hast ja einen Extradreh! Du bist weiterhin dran!", "Glück gehabt...",JOptionPane.INFORMATION_MESSAGE);
aktuellerSpieler.setExtradreh(false);
}
}
else if (betrag.equals("Extradreh"))
{
aktuellerSpieler.setExtradreh(true);
JOptionPane.showMessageDialog(this, "Extradreh - Kann man immer gut gebrauchen!", "Praktisch...", JOptionPane.INFORMATION_MESSAGE);
}
else
{
aktuellerBetrag = Integer.parseInt(betrag);
konsonantString = JOptionPane.showInputDialog(this,"Na "+aktuellerSpieler.getName()+ ", welcher Konsonant soll es für "+betrag+" sein?","Bitte Konsonant eingeben...", JOptionPane.QUESTION_MESSAGE);
if(konsonantString == null)
{
System.out.println("User hat Dialogfeld abgebrochen :-(");
}
// Wenn es ein Konsonant ist und dieser nicht schon im Wort vorkommt, überprüfe
// ob er im Begriff vorhanden ist.
else if (!istKonsonant())
{
if (!aktuellerSpieler.getExtradreh())
{
buchstabe.setText("");
JOptionPane.showMessageDialog(this,"Das ist kein gültiger Konsonant!");
naechster();
}
else
{
JOptionPane.showMessageDialog(this, "Das ist zwar kein gültiger Konsonant, aber du hast ja einen Extradreh..du bist weiterhin dran!", "Glück gehabt...",JOptionPane.INFORMATION_MESSAGE);
aktuellerSpieler.setExtradreh(false);
}
}
else
{
checkBuchstabe(konsonantString);
}
}
}
// Hier wird die eingebene Lösung auf Richtigkeit geprüft.
public void loesungPruefen()
{
String loesung = JOptionPane.showInputDialog(this,"Und "+aktuellerSpieler.getName()+", wie lautet deiner Meinung nach die Lösung?","Lösen", JOptionPane.QUESTION_MESSAGE);
if (loesung.equalsIgnoreCase(begriff))
{
JOptionPane.showMessageDialog(this,"Herzlichen Glückwunsch! Damit hat "+aktuellerSpieler.getName()+ " die Runde gewonnen!", "And the winner is...", JOptionPane.INFORMATION_MESSAGE);
for (int i = 0; i<begriff.length(); i++)
{
anzeige[i].setText(begriff.substring(i,i+1));
anzeige[i].setBackground(Color.white);
}
// Wird richtig gelöst, wird dem Spieler 1000 gutgeschrieben.
aktuellerSpieler.setRundenKontostand(aktuellerSpieler.getRundenKontostand() + 1000);
aktuellesKonto.setText(String.valueOf(aktuellerSpieler.getRundenKontostand()));
}
else if(konsonantString == null)
{
System.out.println("User hat Dialogfeld abgebrochen :-(");
}
else
{
JOptionPane.showMessageDialog(this, "Das war leider nicht richtig!", "Damn.", JOptionPane.INFORMATION_MESSAGE);
naechster();
}
}
// Diese Methode bestimmt den Spieler, der als nächstes dran ist.
public void naechster2()
{
if (aktuellerSpieler == s1)
{
snr2.setForeground(Color.blue);
snr1.setForeground(Color.black);
aktuellerSpieler = s2;
aktuellesKonto = konto2;
}
else if (aktuellerSpieler == s2)
{
snr1.setForeground(Color.blue);
snr2.setForeground(Color.black);
aktuellerSpieler = s1;
aktuellesKonto = konto1;
}
}
public void naechster3()
{
if (aktuellerSpieler == s1)
{
snr2.setForeground(Color.blue);
snr1.setForeground(Color.black);
aktuellerSpieler = s2;
aktuellesKonto = konto2;
}
else if (aktuellerSpieler == s2)
{
snr3.setForeground(Color.blue);
snr2.setForeground(Color.black);
aktuellerSpieler = s3;
aktuellesKonto = konto3;
}
else if (aktuellerSpieler == s3)
{
snr1.setForeground(Color.blue);
snr3.setForeground(Color.black);
aktuellerSpieler = s1;
aktuellesKonto = konto1;
}
}
public void naechster()
{
if (n3 == null)
{
naechster2();
}
else
naechster3();
}
// Methode zum Bestimmen des erdrehten Betrags
public String getBetrag()
{
zahl = (int) (Math.random() * 16);
String feld = felder[zahl];
betrag = felder[zahl];
System.out.println(betrag);
return betrag;
}
// Zufallsbegriff wird bereitgestellt.
public void einlesen()
{
try
{
int i;
bereich = (int) (Math.random() * bereiche.length);
BufferedReader f = new BufferedReader(new FileReader(bereiche[bereich]));
LineNumberReader z = new LineNumberReader(f);
//Vektor v wird erstellt, um alle Begriffe in ihm zu speichern.
Vector v = new Vector();
/*
* Solange Zeichen in der Textdatei vorhanden sind vorhanden sind, lies diese zeilenweise ein
* und speichere die jeweils gelesene Zeile im Vektor v!
*/
while (z.ready())
{
s = z.readLine();
v.addElement(s);
}
// Speichere Zeilenanzahl in Variable zeilen
int zeilen = z.getLineNumber();
// Ermittle eine Zufallszahl für die Zufallszeile zwischen 0 und der Anzahl der Zeilen in der jeweiligen Textdatei.
zufallsZeile = (int) (Math.random() * zeilen);
System.out.println(zeilen);
System.out.println(zufallsZeile);
// Wandle das Element aus der jeweiligen Zufallszeile in einen String um und speichere ihn im String begriff.
begriff = v.elementAt(zufallsZeile).toString();
z.close();
f.close();
}
catch ( IOException e )
{
System.out.println("Fehler beim Lesen der Datei!");
}
}
}
Code:
public class Spieler {
private String name; // Name des Spielers
private int rundenKontostand; // Rundenkontostand
private int gesamtKontostand; // gesamter Kontostand
private int zahl; // Zufallszahl für gedrehtes Feld
private String betrag; //erdrehter Betrag muss noch getBetrag gemacht werden!!
private boolean istDran; // dran?
private boolean rundeGewonnen; // gewonnen oder net
private boolean gesamtGewonnen;
private boolean weiterspielen;
String gewaehlterBuchstabe;
int aktuellerSpieler = 2;
String aktuellerName;
private boolean extradreh; // Extradreh vorhanden oder nicht?!
// referenz auf reading wird übergeben.
reading r;
public Spieler (String name, String gewaehlterBuchstabe, int rundenKontostand, int gesamtKontostand, boolean extradreh, boolean rundeGewonnen, boolean gesamtGewonnen, reading r)
{
setName(name);
setGewaehlterBuchstabe("");
setRundenKontostand(rundenKontostand);
setGesamtKontostand(gesamtKontostand);
setExtradreh(extradreh);
setRundeGewonnen(rundeGewonnen);
setGesamtGewonnen(gesamtGewonnen);
this.r = r;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setGewaehlterBuchstabe(String gewaehlterBuchstabe)
{
this.gewaehlterBuchstabe = gewaehlterBuchstabe;
}
public String getGewaehlterBuchstabe()
{
return gewaehlterBuchstabe;
}
public void setRundenKontostand(int rundenKontostand)
{
this.rundenKontostand = rundenKontostand;
}
public int getRundenKontostand()
{
return rundenKontostand;
}
public void setGesamtKontostand(int gesamtKontostand)
{
this.gesamtKontostand = rundenKontostand;
}
public int getGesamtKontostand()
{
return gesamtKontostand;
}
public void setRundeGewonnen(boolean rundeGewonnen)
{
this.rundeGewonnen = rundeGewonnen;
}
public boolean rundeGewonnen()
{
return rundeGewonnen;
}
public void setGesamtGewonnen(boolean gesamtGewonnen)
{
this.gesamtGewonnen = gesamtGewonnen;
}
public boolean gesamtGewonnen()
{
return gesamtGewonnen;
}
public void setExtradreh(boolean extradreh)
{
this.extradreh = extradreh;
}
public boolean getExtradreh()
{
return extradreh;
}
// gedrehter betrag wird ermittelt
}