wie gliedere ich dieses programm am besten? dringend!

Status
Nicht offen für weitere Antworten.

dyn

Mitglied
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 :D




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
   }
 

Slava

Bekanntes Mitglied
In fremden Queltext etwas aussuchen ist eine sehr mühesame Aufgabe.
Besonder wenn die Klassennamen mit Kleinbuchschtaben beginnen
 
B

bygones

Gast
ein paar allgemeine Sachen.

Trenne mehr nach Logik. Schau dir dazu das MVC Beispiel in den FAQs bei den Design Patterns an. Trennen nach Logik heißt hier. Mach dir Klassen (gerne mehrere), die nur für das Anzeigen (View) zuständig sind. Klassen, die nur die reinen Daten halten (Model) und Klassen, die auf Änderungen reagieren und zwischen den beiden anderen Ebenen kommuniziert (Controller). das mag das Design erschweren, lohnt sich aber bei Weitem.

V.a. würde ich auch die GUI nicht in eine Klasse packen. Teile sie auf. Eine Klasse die den Hauptframe repräsentiert. Wenn das Menu recht groß ist, überlegen das seperat in eine Klasse - größere Componenten (sowohl zeilenmäßig groß, als auch logisch, d.h. interaktive Teile usw) auch trennen....

hoffe damit kannst du ein bisschen was anfangen !

ps: beim editieren ist mir u.a. aufgefallen:

Code:
private boolean istVokal()
      {
      	String vokale = new String("aeiou");
      	int	retVal = vokale.indexOf(vokalString);
		
		if (retVal >= 0)
		return true;
		else
		return false;      	
      }
lässt sich so einfach auch schreiben:
Code:
private boolean istVokal() {
     return "aeiou".contains(vokalString);
      }

Code:
begriff.substring(i, i+1).equals(" "))
    	{
    	 anzeige[i].setOpaque(false);
    	}
in diesem Teil fragt ihr jedes mal bei der else if wieder nach begriff.substring(i, i+1). holt euch das am Anfang und überprüft dann immer den erhaltenen String

Code:
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);
ihr verwendet sehr oft dieses Konstrukt.

Ich würde eine eigene Methode ala:
Code:
public void showInfo(String content, String title) {
   JOptionPane.showMessageDialog(this, content, title, JOptionPane.INFORMATION_MESSAGE);
}
und ruft dann diese Methode immer auf.

und gewöhnt euch allg Regeln des Programmierens an. Klassennamen mit Großbuchstaben beginnen, Variablen mit Kleinbuchstaben !
 

dyn

Mitglied
jo danke schonmal!
dassa klassen gruß geschrieben werden ist mir schon klar, das änder ich alles zum schluss...habe das programm ja schon vor langer zeit angefangen und bin mit ihm (mehr oder weniger) gewachsen.
beim trennen komm ich dann irgendwann immer zu einem punkt, wo ich das problem habe, dass irgendeine klasse einen wert von einer anderen klasse braucht, ich es aber nicht hinbekomme eine referenz auf diese klasse zu geben, weil sonst alles wieder nicht funktioniert...
sollte man die klassen sich alle gegenseitig über referenzen miteinander verbinden oder sollte man von einer klasse aus alle anderen klassen aufrufen? z.b. die gui als startklasse, von der aus dann die ganzen operationen aufgerufen werden?
naja. ich flieg dann gleich erstmal weg :D
danke schonmal für die hilfe deathbabyclown, das war doch schonmal sehr hilfreiche konstruktive kritik! :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Wie kommt dieses Ergebnis zu stande Allgemeine Java-Themen 15
M Warum hat Java dieses und jenes nicht... Allgemeine Java-Themen 8
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
H was ist den dieses zur Kompilierzeit und zur Laufzeit in Java? Allgemeine Java-Themen 3
Thallius Wie parse ich dieses Datum richtig? Allgemeine Java-Themen 5
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
O Compiler-Fehler Wie kompiliere ich dieses Alt-Projekt ? Allgemeine Java-Themen 9
D File mit Inhalt kopieren und dieses File dann neu erstellen ? Allgemeine Java-Themen 4
cedi int Zahl in ein ASCII zeichen umwandeln und dieses in ein externes Textfenster schreiben Allgemeine Java-Themen 6
T Wie intelligent ist dieses überschriebene .equals() ? Allgemeine Java-Themen 13
M Wie heißt denn dieses grafische Element ? Allgemeine Java-Themen 2
L Wie kann man dieses "Table" Problem am besten löse Allgemeine Java-Themen 8
B Wie heißt dieser kleine Typ links oben? Also dieses JavaVieh Allgemeine Java-Themen 5
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
J Schutz Programm Jar Exe Allgemeine Java-Themen 7
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
D Nicht quelloffenes Programm Allgemeine Java-Themen 5
F Java-Programm lizensieren Allgemeine Java-Themen 21
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
X Aus Programm "Installationsprogramm" machen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben