Treffer Abfrage

Cyz44

Aktives Mitglied
In Mastermind muss ich ja die Treffer abfrage iwie bewerkstelligen aber ich hab keine Ahnung wie ich das machen soll

Java:
    raten.setBounds(456, 32, 85, 40);
    raten.setText("Raten");
    raten.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5 == jlbl1)
        {
          jlbl9.setBackground(Color.black);
          jlbl9.setOpaque(true);

        }

      }
    });
    cp.add(raten);

Jetzt will ich, dass beim klicken des "raten"-buttons die eingegebene Farbkombi mit der des PCs verglichen wird. Label 1-4 wäre die vom PC und Label 5-8 sind der abgegebene Versuch, und die Labels 9-12 sollen dann jenachdem schwarz(voller treffer), weiß(halber treffer) oder gar nicht gefärbt werden. Wie solls ichs also am besten machen?
 

Final_Striker

Top Contributor
Würde an deine Stelle ein Modell bauen das den Farbcode, Rateversuche usw. enthält. Die GUI dient nur zur Präsentation des Modells.

Ansonsten die Labels in Arrays packen und dann mit Schleifen drüber laufen und vergleichen.
 

Cyz44

Aktives Mitglied
Äh ok aber ich glaub ich hab keine zeit mehr die ganze Struktur nocheinmal zu ändern (davon abgesehen hab ich keine Ahnung wie ich das machen sollte)
Und das mit den Arrays hab ich glaub schon probiert wäre das dann so in etwa:

int zuerratendeKombi[] = int[4]
zuerratendeKombi[0] = jlbl1
zuerratendeKombi[1] = jlbl2
zuerratendeKombi[2] = jlbl3
zuerratendeKombi[3] = jlbl4

dann nochmal ein array für den eigenen versuch, so in etwa?. Und wie kann man machen dass sie verglichen werden?
 

Marco13

Top Contributor
Keine Zeit oder keinen Bock?

Labels zu vergleichen bringt nichts, das sind zwei unterschiedliche Dinger auf dem Bildschirm. Wie wird denn die "Farbe" gespeichert, die gewählt ist?
 

Cyz44

Aktives Mitglied
Naja beim klick auf den button `"neues spiel" bekommen die labels 1-4 jewals eine farbe zugeordnet:

Java:
neuesSpiel.setBounds(352, 32, 105, 40);
    neuesSpiel.setText("Neues Spiel");
    neuesSpiel.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        neuesSpiel_ActionPerformed(evt);

        Color[] Farbe = new Color[6];
        Farbe[0] = Color.white;
        Farbe[1] = Color.yellow;
        Farbe[2] = Color.red;
        Farbe[3] = Color.green;
        Farbe[4] = Color.blue;
        Farbe[5] = Color.black;
        jlbl1.setBackground(Farbe[getRandomNumber()]);
        jlbl1.setOpaque(true);
        jlbl2.setBackground(Farbe[getRandomNumber()]);
        jlbl2.setOpaque(true);
        jlbl3.setBackground(Farbe[getRandomNumber()]);
        jlbl3.setOpaque(true);
        jlbl4.setBackground(Farbe[getRandomNumber()]);
        jlbl4.setOpaque(true);
      }
    });
    cp.add(neuesSpiel);

also hab ich es so verstanden das man diese labels, die ja jetzt farbig sind, in ein array packt, ebenso den eigenen versuch oder?
 

Cyz44

Aktives Mitglied
ok ich komm vlt etwas verwirrt daher, ich kenn mich auch nicht wirklich gut mit Java aus..

ganz konkret also: wie kann ich die farben von zwei labels miteinander vergleichen? weil mit dem == Operator scheints ja iwie nicht zu klappen.
 

Marco13

Top Contributor
Ja, ob die in einem Array sind oder nicht ist für den Vergleich so gesehen egal. Natürlich sollte man einen Array verwenden, aber nicht mit JLabels, sondern vielleicht mit ints oder so... So, wie du das jetzt angesetzt hast, wäre es sowas wie
Code:
if (label0.getBackground().equals(label1.getBackground())) { ... gleiche Farbe ... }
Totaler Krampf, aber wenn du keinen Wert darauf legst, es besser zu machen, ist's eben so...
 

Cyz44

Aktives Mitglied
Danke für die Antwort, es klappt so auch!

Aber wie sollte ich es den besser machen? Ich meine das es geht weiß ich, aber ich weiß halt nicht wie...
 

Marco13

Top Contributor
Ja, den "Zustand" des Spiels speichert man eigentlich nicht in GUI-Komponenten, sondern in einer eigenen Klasse (die intern dann z.B. einen int-Array verwendet), das könnte man nach dem MVC-Muster aufziehen und so... Aber das würde eben eine "Änderung der Struktur" erfordern...
 

Cyz44

Aktives Mitglied
So eine "Änderung der Struktur", wäre die sehr aufwendig? weil wie gesagt ich hab halt nicht mehr viel zeit (am Freitag ist Abggabetermin) mich da jetzt noch groß einzuarbeiten...
Ich hab es jetzt jedenfalls erstmal so gemacht (damit es überhaupt mal funktioniert)

Java:
raten.setBounds(456, 32, 85, 40);
    raten.setText("Raten");
    raten.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.getBackground().equals(jlbl1.getBackground()) || jlbl6.getBackground().equals(jlbl2.getBackground()) || jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl8.getBackground().equals(jlbl4.getBackground()) )
        {


          jlbl9.setBackground(Color.black);
          jlbl9.setOpaque(true);
          
        }
        
        if (jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl6.getBackground().equals(jlbl2.getBackground()) || jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) ||
            jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) || jlbl7.getBackground().equals(jlbl3.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) )
        {


          jlbl9.setBackground(Color.black);
          jlbl9.setOpaque(true);
          jlbl10.setBackground(Color.black);
          jlbl10.setOpaque(true);

        }
        
        if (jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) ||
            jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) )
        {


          jlbl9.setBackground(Color.black);
          jlbl9.setOpaque(true);
          jlbl10.setBackground(Color.black);
          jlbl10.setOpaque(true);
          jlbl11.setBackground(Color.black);
          jlbl11.setOpaque(true);

        }
        
        if (jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground())  )
        {


          jlbl9.setBackground(Color.black);
          jlbl9.setOpaque(true);
          jlbl10.setBackground(Color.black);
          jlbl10.setOpaque(true);
          jlbl11.setBackground(Color.black);
          jlbl11.setOpaque(true);
          jlbl12.setBackground(Color.black);
          jlbl12.setOpaque(true);

        }


      }
    });

So jetzt weiß ich natürlich auch, das es ein sehr schlechter stil ist und mega aufwändig noch dazu, deshalb frag ich hiermal: wie kann man das ganze einfacher lösen und zwar ohne das ich alles nochmal neu machen muss?
mfg
 

Cyz44

Aktives Mitglied
vielleicht sollte ich mal dn ganzen code posten, zur veranschaulichung meines problems :)

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import java.awt.Color.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 27.09.2011
  * @xxx
  */

public class Mastermind extends JFrame
{
  // Anfang Attribute
  private JButton weiss = new JButton();
  private JButton gelb = new JButton();
  private JButton rot = new JButton();
  private JButton gruen = new JButton();
  private JButton blau = new JButton();
  private JButton schwarz = new JButton();
  private JButton neuesSpiel = new JButton();
  private JButton raten = new JButton();
  private JButton loeschen = new JButton();
  
  private int getRandomNumber ()
  {

    int number = (int) (Math.random() * 6);
    return number;

  }

  int genaueTreffer = 0;
  int halbeTreffer = 0;


  

  private JLabel jlbl1 = new JLabel();
  private JLabel jlbl2 = new JLabel();
  private JLabel jlbl3 = new JLabel();
  private JLabel jlbl4 = new JLabel();
  private JLabel jlbl5 = new JLabel();
  private JLabel jlbl6 = new JLabel();
  private JLabel jlbl7 = new JLabel();
  private JLabel jlbl8 = new JLabel();
  private JLabel jlbl9 = new JLabel();
  private JLabel jlbl10 = new JLabel();
  private JLabel jlbl11 = new JLabel();
  private JLabel jlbl12 = new JLabel();
  private JLabel jlbl13 = new JLabel();
  private JLabel jlbl14 = new JLabel();
  private JLabel jlbl15 = new JLabel();
  private JLabel jlbl16 = new JLabel();
  private JLabel jlbl17 = new JLabel();
  private JLabel jlbl18 = new JLabel();
  private JLabel jlbl19 = new JLabel();
  private JLabel jlbl20 = new JLabel();
  private JLabel jlbl21 = new JLabel();
  private JLabel jlbl22 = new JLabel();
  private JLabel jlbl23 = new JLabel();
  private JLabel jlbl24 = new JLabel();
  private JLabel jlbl25 = new JLabel();
  private JLabel jlbl26 = new JLabel();
  private JLabel jlbl27 = new JLabel();
  private JLabel jlbl28 = new JLabel();
  private JLabel jlbl29 = new JLabel();
  private JLabel jlbl30 = new JLabel();
  private JLabel jlbl31 = new JLabel();
  private JLabel jlbl32 = new JLabel();
  private JLabel jlbl33 = new JLabel();
  private JLabel jlbl34 = new JLabel();
  private JLabel jlbl35 = new JLabel();
  private JLabel jlbl36 = new JLabel();
  private JLabel jlbl37 = new JLabel();
  private JLabel jlbl38 = new JLabel();
  private JLabel jlbl39 = new JLabel();
  private JLabel jlbl40 = new JLabel();
  private JLabel jlbl41 = new JLabel();
  private JLabel jlbl42 = new JLabel();
  private JLabel jlbl43 = new JLabel();
  private JLabel jlbl44 = new JLabel();
  private JLabel jlbl45 = new JLabel();
  private JLabel jlbl46 = new JLabel();
  private JLabel jlbl47 = new JLabel();
  private JLabel jlbl48 = new JLabel();
  private JLabel jlbl49 = new JLabel();
  private JLabel jlbl50 = new JLabel();
  private JLabel jlbl52 = new JLabel();
  private JLabel jlbl53 = new JLabel();
  private JLabel jlbl54 = new JLabel();
  private JLabel jlbl55 = new JLabel();
  private JLabel jlbl56 = new JLabel();
  private JLabel jlbl57 = new JLabel();
  private JLabel jlbl58 = new JLabel();
  private JLabel jlbl59 = new JLabel();
  private JLabel jlbl60 = new JLabel();
  private JLabel jlbl61 = new JLabel();
  private JLabel jlbl62 = new JLabel();
  private JLabel jlbl63 = new JLabel();
  private JLabel jlbl64 = new JLabel();
  private JLabel jlbl65 = new JLabel();
  private JLabel jlbl66 = new JLabel();
  private JLabel jlbl67 = new JLabel();
  private JLabel jlbl68 = new JLabel();
  // Ende Attribute
  


  
  public M(String title)
  {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    int frameWidth = 651; 
    int frameHeight = 681;
    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);
    Container cp = getContentPane();
    cp.setLayout(null);


    // Anfang Komponenten

    weiss.setBounds(32, 32, 40, 40);
    weiss.setText("");
    weiss.setBackground(Color.white);
    weiss.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==false)
        {
          jlbl5.setBackground(Color.white);
          jlbl5.setOpaque(true);
        }
      }
    });
    cp.add(weiss);
    
    gelb.setBounds(80, 32, 40, 40);
    gelb.setText("");
    gelb.setBackground(Color.yellow);
    gelb.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==false)
        {
          jlbl5.setBackground(Color.yellow);
          jlbl5.setOpaque(true);
        }



      }
    });
    cp.add(gelb);
    
    rot.setBounds(128, 32, 40, 40);
    rot.setText("");
    rot.setBackground(Color.red);
    rot.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==false)
        {
          jlbl5.setBackground(Color.red);
          jlbl5.setOpaque(true);
        }

      }
    });
    cp.add(rot);

    gruen.setBounds(176, 32, 40, 40);
    gruen.setText("");
    gruen.setBackground(Color.green);
    gruen.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==false)
        {
          jlbl5.setBackground(Color.green);
          jlbl5.setOpaque(true);
        }

      }
    });
    cp.add(gruen);
    
    blau.setBounds(224, 32, 40, 40);
    blau.setText("");
    blau.setBackground(Color.blue);
    blau.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==false)
        {
          jlbl5.setBackground(Color.blue);
          jlbl5.setOpaque(true);
        }

      }
    });
    cp.add(blau);
    
    schwarz.setBounds(272, 32, 40, 40);
    schwarz.setText("");
    schwarz.setBackground(Color.black);
    schwarz.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==false)
        {
          jlbl5.setBackground(Color.black);
          jlbl5.setOpaque(true);
        }

      }
      
    });
    cp.add(schwarz);
    

    /**
     *   Aktionen für 2. Button
     */
    weiss.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==false)
        {
          jlbl6.setBackground(Color.white);
          jlbl6.setOpaque(true);
        }
      }
    });
    gelb.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==false)
        {
          jlbl6.setBackground(Color.yellow);
          jlbl6.setOpaque(true);
        }
      }
    });
    rot.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==false)
        {
          jlbl6.setBackground(Color.red);
          jlbl6.setOpaque(true);
        }
      }
    });
    gruen.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==false)
        {
          jlbl6.setBackground(Color.green);
          jlbl6.setOpaque(true);
        }
      }
    });
    blau.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==false)
        {
          jlbl6.setBackground(Color.blue);
          jlbl6.setOpaque(true);
        }
      }
    });
    schwarz.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==false)
        {
          jlbl6.setBackground(Color.black);
          jlbl6.setOpaque(true);
        }
      }
    });
    
    /**
     *   Aktionen für 3. Button
     */
    weiss.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==false)
        {
          jlbl7.setBackground(Color.white);
          jlbl7.setOpaque(true);
        }
      }
    });
    gelb.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==false)
        {
          jlbl7.setBackground(Color.yellow);
          jlbl7.setOpaque(true);
        }
      }
    });
    rot.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==false)
        {
          jlbl7.setBackground(Color.red);
          jlbl7.setOpaque(true);
        }
      }
    });
    gruen.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==false)
        {
          jlbl7.setBackground(Color.green);
          jlbl7.setOpaque(true);
        }
      }
    });
    blau.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==false)
        {
          jlbl7.setBackground(Color.blue);
          jlbl7.setOpaque(true);
        }
      }
    });
    schwarz.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==false)
        {
          jlbl7.setBackground(Color.black);
          jlbl7.setOpaque(true);
        }
      }
    });
    
    /**
     *   Aktionen für 4. Button
     */
    weiss.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==true & jlbl8.isOpaque()==false)
        {
          jlbl8.setBackground(Color.white);
          jlbl8.setOpaque(true);
        }
      }
    });
    gelb.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==true & jlbl8.isOpaque()==false)
        {
          jlbl8.setBackground(Color.yellow);
          jlbl8.setOpaque(true);
        }
      }
    });
    rot.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==true & jlbl8.isOpaque()==false)
        {
          jlbl8.setBackground(Color.red);
          jlbl8.setOpaque(true);
        }
      }
    });
    gruen.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==true & jlbl8.isOpaque()==false)
        {
          jlbl8.setBackground(Color.green);
          jlbl8.setOpaque(true);
        }
      }
    });
    blau.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==true & jlbl8.isOpaque()==false)
        {
          jlbl8.setBackground(Color.blue);
          jlbl8.setOpaque(true);
        }
      }
    });
    schwarz.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.isOpaque()==true & jlbl6.isOpaque()==true & jlbl7.isOpaque()==true & jlbl8.isOpaque()==false)
        {
          jlbl8.setBackground(Color.black);
          jlbl8.setOpaque(true);
        }
      }
    });
    
    
    neuesSpiel.setBounds(352, 32, 105, 40);
    neuesSpiel.setText("Neues Spiel");
    neuesSpiel.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        neuesSpiel_ActionPerformed(evt);

        Color[] Farbe = new Color[6];
        Farbe[0] = Color.white;
        Farbe[1] = Color.yellow;
        Farbe[2] = Color.red;
        Farbe[3] = Color.green;
        Farbe[4] = Color.blue;
        Farbe[5] = Color.black;
        jlbl1.setBackground(Farbe[getRandomNumber()]);
        jlbl1.setOpaque(true);
        jlbl2.setBackground(Farbe[getRandomNumber()]);
        jlbl2.setOpaque(true);
        jlbl3.setBackground(Farbe[getRandomNumber()]);
        jlbl3.setOpaque(true);
        jlbl4.setBackground(Farbe[getRandomNumber()]);
        jlbl4.setOpaque(true);
      }
    });
    cp.add(neuesSpiel);
    
    raten.setBounds(456, 32, 85, 40);
    raten.setText("Raten");
    raten.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        if (jlbl5.getBackground().equals(jlbl1.getBackground()) || jlbl6.getBackground().equals(jlbl2.getBackground()) || jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl8.getBackground().equals(jlbl4.getBackground()) )
        {


          jlbl9.setBackground(Color.black);
          jlbl9.setOpaque(true);
          
        }
        
        if (jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl6.getBackground().equals(jlbl2.getBackground()) || jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) ||
            jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) || jlbl7.getBackground().equals(jlbl3.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) )
        {


          jlbl9.setBackground(Color.black);
          jlbl9.setOpaque(true);
          jlbl10.setBackground(Color.black);
          jlbl10.setOpaque(true);

        }
        
        if (jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) ||
            jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) || jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground()) )
        {


          jlbl9.setBackground(Color.black);
          jlbl9.setOpaque(true);
          jlbl10.setBackground(Color.black);
          jlbl10.setOpaque(true);
          jlbl11.setBackground(Color.black);
          jlbl11.setOpaque(true);

        }
        
        if (jlbl5.getBackground().equals(jlbl1.getBackground()) && jlbl6.getBackground().equals(jlbl2.getBackground()) && jlbl7.getBackground().equals(jlbl3.getBackground()) && jlbl8.getBackground().equals(jlbl4.getBackground())  )
        {


          jlbl9.setBackground(Color.black);
          jlbl9.setOpaque(true);
          jlbl10.setBackground(Color.black);
          jlbl10.setOpaque(true);
          jlbl11.setBackground(Color.black);
          jlbl11.setOpaque(true);
          jlbl12.setBackground(Color.black);
          jlbl12.setOpaque(true);

        }


      }
    });
    cp.add(raten);                                            JLabel[] ergebnisKombi = new JLabel[4];
          ergebnisKombi[0] = jlbl1;
          ergebnisKombi[1] = jlbl2;
          ergebnisKombi[2] = jlbl3;
          ergebnisKombi[3] = jlbl4;
    
    loeschen.setBounds(544, 32, 85, 40);
    loeschen.setText("Löschen");
    loeschen.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        jlbl5.setBackground(new Color(0,0,0,0));
        jlbl5.setOpaque(false);
        jlbl6.setBackground(new Color(0,0,0,0));
        jlbl6.setOpaque(false);
        jlbl7.setBackground(new Color(0,0,0,0));
        jlbl7.setOpaque(false);
        jlbl8.setBackground(new Color(0,0,0,0));
        jlbl8.setOpaque(false);
        
        jlbl9.setBackground(new Color(0,0,0,0));
        jlbl9.setOpaque(false);
        jlbl10.setBackground(new Color(0,0,0,0));
        jlbl10.setOpaque(false);
        jlbl11.setBackground(new Color(0,0,0,0));
        jlbl11.setOpaque(false);
        jlbl12.setBackground(new Color(0,0,0,0));
        jlbl12.setOpaque(false);
      }
    });
    cp.add(loeschen);
    
    
    jlbl1.setBounds(64, 96, 40, 35);
    jlbl1.setText("");
    jlbl1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl1);
    jlbl2.setBounds(120, 96, 40, 35);
    jlbl2.setText("");
    jlbl2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl2);
    jlbl3.setBounds(176, 96, 40, 35);
    jlbl3.setText("");
    jlbl3.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl3);
    jlbl4.setBounds(232, 96, 40, 35);
    jlbl4.setText("");
    jlbl4.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl4);
    ...      // die weiteren labels 

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }



  // Anfang Methoden

  
  
  
  public void weiss_ActionPerformed(ActionEvent evt)
  {

  }

  public void gelb_ActionPerformed(ActionEvent evt)
  {
    // TODO hier Quelltext einfügen
  }

  public void rot_ActionPerformed(ActionEvent evt)
  {
    // TODO hier Quelltext einfügen
  }

  public void gruen_ActionPerformed(ActionEvent evt)
  {
    // TODO hier Quelltext einfügen
  }

  public void blau_ActionPerformed(ActionEvent evt)
  {
    // TODO hier Quelltext einfügen
  }

  public void schwarz_ActionPerformed(ActionEvent evt)
  {
    // TODO hier Quelltext einfügen
  }

  public void neuesSpiel_ActionPerformed(ActionEvent evt)
  {

  }

  public void raten_ActionPerformed(ActionEvent evt)
  {
    // TODO hier Quelltext einfügen
  }

  public void loeschen_ActionPerformed(ActionEvent evt)
  {
    // TODO hier Quelltext einfügen
  }

  // Ende Methoden

  public static void main(String[] args)
  {
    new Mastermind("Mastermind");
  }
}

wie ihr seht gibt es 8 reihen mit je 4 labels, man hat also 8 versuche um die richtige Kombination zu erraten. Der gesamte Code bezieht sich aber nur auf die erste reiche, also bis jetzt kann ich nur einen versuch abgeben. Sprich das ganze insgesamt 8-mal (was natürlich nicht geht). also eine Hauptprobleme sind

1. beim klick auf die farben muss der Compiler wissen bei welcher reihe ich bin

2. wie gesagt eine bessere möglichkei um die treffer abzufragen und zwar dann für die jeweilige reihe

Kann mir da jemand bitte helfen (oder wenigstens einen Denkanstoß geben) ?

mfg
 

Marco13

Top Contributor
Ja, das ist jetzt auch wieder nicht der ganze Code. Sowas mit einem GUI-Builder zusammenklicken ist eben nicht Sinn der Sache (und das ist auch nicht "Programmieren", nur nebenbei).

Das jetzt zu ändern wäre... ja, so hart das klingen mag, recht einfach: Man würde das, was zwischen der ersten { und der letzten } steht löschen, und dort etwas neues reinschreiben. Im Ernst, diese Labels, das ist ja ein Krampf...

FALLS dich das wirklich interessiert, sag nochmal bescheid - wenn du nur irgendwas willst, was du Freitag abgeben kannst, kannst du ja das schicken.
 

Cyz44

Aktives Mitglied
aber so haben wir es halt in der Schule von unserem Lehrer beigebracht bekommen - bzw. wirklich beibringen tut er uns nicht viel, da magst du schon recht haben dass da nicht viel dabei so ne oberfläche zu machen...

Also mich interresiert schon wie man es besser machen kann(oder von mir aus wie man es GANZ neu machen soll), deshalb würde ich mich sehr freuen über deine antwort.

mfg
 

Cyz44

Aktives Mitglied
Wie schon gesagt ich kenn mich damit nicht aus -besser gesagt, ich hab noch nie davon gehört^^
könntest du vlt mal bisschen erläutern wie du das konkret angehen würdest?
 

Marco13

Top Contributor
Ja, einiges (vieles) dazu steht in http://www.java-forum.org/allgemeines/91829-mvc.html#post595758 , ob das hier das angebrachteste ist, darüber kann man streiten, aber es ist sicher nicht "falsch":

Überlegen, was das "MasterMind"-Spiel ausmacht und wie man es "bedient"
Java:
interface MasterMind 
{
    // Initialisierung mit einer "Lösung"
    void init(Color c0, Color c1, Color c2, Color c3);

    // Raten einer Lösung
    void applyGuess(Color c0, Color c1, Color c2, Color c3);

    // Wie viele Versuche wurden bisher gemacht?
    int getNumGuesses();

    // Liefere die Antwort (Schwarze/Weiße pegs) für einen Versuch
    List<Hint> getResponse(int guess);

    // Listener-Verwaltung    
...
}
Spontan hingeschrieben, kann Unfug sein - Denken ist in diesem Fall DEINE Aufgabe.

Um das GUI kann man sich dann später kümmern (aber parallel schon überlegen).
 

Cyz44

Aktives Mitglied
Hi ich bins nochmal. Ich hab jetzt also erstmal ein "normales" Mastermind entworfen (an der Konsole). Das Spiel an sich funktioniert ja jetzt, also kann man jetzt auch die GUI einbauen?

Java:
import java.util.Scanner;
import java.util.Random;


/**********************************
 * MeinMastermind
 *
 */


enum Farbe 
{
   WEISS, SCHWARZ, BLAU, ROT, GELB, GRUEN, UNBEKANNT;

   public static Farbe toFarbe(String s)
   {
      String[] farben = {"weiss", "schwarz", "blau", "rot", 
                         "gelb", "gruen", "unbekannt"};
      Farbe farbe = UNBEKANNT;
      int n = 0;
      
       for(Farbe f : values())
       {
          if (s.equals(farben[n]))
          {
            farbe = f;
          }
         
         n++;
       }
      
      return farbe;
   }   
   
   public static Farbe toFarbe(int n)
   {
      Farbe farbe = UNBEKANNT;
      
      switch (n)
      {
        case 1:   farbe = WEISS;
                  break;
        case 2:   farbe = SCHWARZ;
                  break;
        case 3:   farbe = BLAU;
                  break;
        case 4:   farbe = ROT;
                  break;
        case 5:   farbe = GELB;
                  break;
        case 6:   farbe = GRUEN;
                  break;
      }
      return farbe;
   }   
   
   public String toString()
   {
      String s = "";
      
      switch (this)
      {
        case WEISS:     s = "weiss";
                        break;
        case SCHWARZ:   s = "schwarz";
                        break;
        case BLAU:      s = "blau";
                        break;
        case ROT:       s = "rot";
                        break;
        case GELB:      s = "gelb";
                        break;
        case GRUEN:     s = "gruen";
                        break;
        default:        s = "unbekannte Farbe";
                        break;
      }

      return s;
   }
}

public class m1
{
   final static int anzahlSteine = 4;
   
   static Farbe[] stein = new Farbe[anzahlSteine];
   static Farbe[] geraten = new Farbe[anzahlSteine];

   static int trefferPosUndFarbe = 0;
   static int trefferFarbe = 0;

   /* Funktion zum Einlesen einer geratenen Kombination */
   static void kombiEinlesen()
   {
      // lies den nächsten Versuch des Spielers ein
      System.out.print( " Bitte eine Kombination aus"
                      + " vier Farben eingeben: \n\n");
      Scanner sc = new Scanner(System.in);

      for (int i = 0; i < stein.length; i++) 
      {
         geraten[i] = Farbe.toFarbe(sc.next());
      }
      
      for (int i = 0; i < stein.length; i++) 
      {
         System.out.println(geraten[i] + " ");
      }
      System.out.println();
   }

   /* Funktion zum Auswerten einer eingelesenen Kombination */
   static void kombiAuswerten()
   {
      boolean[] ausgewertetS = {false, false, false, false};
      boolean[] ausgewertetG = {false, false, false, false};

      // zuerst feststellen, welche Steine in Farbton und Position übereinstimmen
      for (int i = 0; i < stein.length; i++) 
      {
         if (stein[i].equals(geraten[i]) == true)    
         {
            trefferPosUndFarbe++;
            ausgewertetS[i] = true;
            ausgewertetG[i] = true;
         }
      }     

      // dann feststellen, welche Steine nur im Farbton übereinstimmen
      for (int i = 0; i < stein.length; i++) 
      {
         if (ausgewertetS[i] == false)   
         {
            for (int j = 0; j < geraten.length; j++) 
            {
               if (j == i)
                 continue;
                 
               if (ausgewertetG[j] == false && stein[i].equals(geraten[j]) == true)
               {
                 trefferFarbe++;
                 ausgewertetS[i] = true;
                 ausgewertetG[j] = true;
                 break;
               }
            }
         }
      }
   }


   /* Funktion zum Bewerten einer geratenen Kombination */
   static void kombiBewerten()
   {
      // die Bewertung der Kombination ausgeben
      if (trefferPosUndFarbe == 4)
      {
         System.out.println("\n\n Gratulation!!!" 
                     + " - du hast die Kombination erraten!\n");
      }
      else
      {
         System.out.println("\n"
         + " Treffer (Position und Farbe): " + trefferPosUndFarbe + "\n"
         + " Treffer          (nur Farbe): " + trefferFarbe + "\n\n");
      }
   }

   public static void main(String[] args)
   {
      System.out.println();
      System.out.println(" ****************************** ");
      System.out.println(" Willkommen bei MeinMastermind! \n");
      System.out.println(" Wir spielen mit 6 Farben: weiss, schwarz,"
                       + " blau, rot, gelb und gruen! \n\n\n");

      // Zufallsgenerator aktivieren
      Random generator = new Random();  // (1) zum Debuggen

      // zu ratende Kombination ausdenken
      int n;

      for (int i = 0; i < stein.length; i++) 
      {
         stein[i] = Farbe.toFarbe(generator.nextInt(6) + 1);
      }
      for (int i = 0; i < stein.length; i++) 
      {
         System.out.println(stein[i]);
      }

      do
      {
         trefferPosUndFarbe = 0;
         trefferFarbe = 0;

         // lies den nächsten Versuch des Spielers ein
         kombiEinlesen();

         // die eingelesene Kombination mit der eigenen Kombination vergleichen
         kombiAuswerten();

         // die Bewertung der Kombination ausgeben
         kombiBewerten();
        
      } while (trefferPosUndFarbe < 4);
   }
}
 

Marco13

Top Contributor
Könnte man vielleicht, aber das ist so nicht Sinn der Sache: Das ist ja alles static. Zum Glück dürften sich die notwendigen Änderungen an dem, was schon da ist, in Grenzen halten - im Idealfall kann man einfach alle 'static's (außer bei der main ;)) rausnehmen. Danach kämen noch ein paar Erweiterungen, aber du kannst das ja schonmal machen. Das, was im Moment in der 'main' steht, würde man dann in zwei Methoden packen, so dass in der main dann GROB sowas steht wie

MasterMind m = new MasterMind() // Richtigen Klassennamen geben! :autsch:
m.init(); // Initialisiert das Random-Ding
m.play(); // Enthält die do-Schleife
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
A contains bzw. indexOf liefert keine Treffer? Java Basics - Anfänger-Themen 3
D DB Anzeige der Treffer Java Basics - Anfänger-Themen 12
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
L If Abfrage Java Basics - Anfänger-Themen 4
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
W if-Abfrage bei ArrayList-Methodenaufrufen - Wie löse ich das? Java Basics - Anfänger-Themen 6
B Automatisierte Ausgabe (Schleife, If-Abfrage?) Java Basics - Anfänger-Themen 24
I ResultSet aus meiner SQL-Abfrage in einem JTextfield ausgeben. Java Basics - Anfänger-Themen 1
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
S Interaktive Abfrage, Hilfe mit Schleifen! Java Basics - Anfänger-Themen 6
P Amazon SQS abfrage Java Basics - Anfänger-Themen 1
Marlena Bauer IBAN generieren (Deutschland) aus Abfrage von BLZ und Kontonummer? Java Basics - Anfänger-Themen 31
M Abfrage j/n und Bildschirm löschen Java Basics - Anfänger-Themen 3
S Und-Abfrage mit mehreren Ungleich-Operatoren Java Basics - Anfänger-Themen 17
O if Abfrage erkennt String nicht Java Basics - Anfänger-Themen 1
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
N Bedinugng If-Abfrage wird nie erfüllt Java Basics - Anfänger-Themen 4
L boolean-Abfrage enumeration Java Basics - Anfänger-Themen 3
Y Methoden Wie kann ich eine if-Abfrage bei Setters bauen? Java Basics - Anfänger-Themen 6
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
F If Abfrage gibt falsches Ergebnis.... Java Basics - Anfänger-Themen 6
F POST-Request mit json - Abfrage mit Java Java Basics - Anfänger-Themen 2
C Javafunktion zur Abfrage eines Quellcodes Java Basics - Anfänger-Themen 15
A JOPtionPaneOptionDialog Abfrage welcher Button gedrückt wurde? Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
G if Abfrage: Nicht jeder Fall berücksichtigt Java Basics - Anfänger-Themen 2
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
S If Abfrage nur mit bestimmter Initialisierung? Java Basics - Anfänger-Themen 8
Z Boolean Abfrage in einer for each Schleife Java Basics - Anfänger-Themen 2
deatzi Variable aus If Abfrage später nutzen Java Basics - Anfänger-Themen 4
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
S Backspace Abfrage funktioniert nicht Java Basics - Anfänger-Themen 4
F Interface JFrame mit if-Abfrage automatisch schließen lassen? Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
G Passwort und Passwort wiederholen in if-Abfrage vergleichen Java Basics - Anfänger-Themen 15
P Altklausur: Abfrage der Summe Java Basics - Anfänger-Themen 9
N Methoden Attribut Abfrage eines anderen Objektes Java Basics - Anfänger-Themen 36
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D SQL Abfrage anpassen Java Basics - Anfänger-Themen 17
H For-Schleife innerhalb If-Abfrage? Java Basics - Anfänger-Themen 3
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
O Datentypen Volle 16 Bit eines Short für flags Abfrage nutzen Java Basics - Anfänger-Themen 11
S Input/Output Doppelte Input-Abfrage Java Basics - Anfänger-Themen 3
S Input/Output Programm läuft nach input-Abfrage nicht weiter. Java Basics - Anfänger-Themen 2
M Variablen Eine etwas andere if Abfrage ! Java Basics - Anfänger-Themen 10
H if-Abfrage, ungleich und falscher true Wert? Java Basics - Anfänger-Themen 11
F Ja Nein Abfrage und andere Probleme Java Basics - Anfänger-Themen 5
OlafHD Fehler Bei der if Abfrage Java Basics - Anfänger-Themen 5
quecksilver if-Abfrage in main ausführen Java Basics - Anfänger-Themen 4
D if-Abfrage Java Basics - Anfänger-Themen 12
J Abfrage für Programmwiederholung Java Basics - Anfänger-Themen 2
K Alternative zur If-Abfrage Java Basics - Anfänger-Themen 3
M Java als Webanwendung mit Datenbank abfrage Java Basics - Anfänger-Themen 3
D Abfrage ob Variableninhalt korrekt Java Basics - Anfänger-Themen 5
W Vergleich mit If-Abfrage nur für Zahlen bis 07 möglich - Warum? Java Basics - Anfänger-Themen 7
D Operatoren IF Abfrage liefert falsches Ergebnis Java Basics - Anfänger-Themen 4
X Ja nein abfrage? Java Basics - Anfänger-Themen 9
A Erste Schritte Problem bei meiner if-Abfrage! Java Basics - Anfänger-Themen 5
M Enum-Variabel-Abfrage funktioniert nicht? Java Basics - Anfänger-Themen 2
S Java Counter: nur 1 mal hochzählen auch wenn Abfrage mehrmals zutrifft. Java Basics - Anfänger-Themen 1
E Erste Schritte [Noob-Frage] Meine If-Abfrage macht nicht, was sie soll... Java Basics - Anfänger-Themen 2
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
A Key Event - Abfrage von 2 gedrückten Tasten Java Basics - Anfänger-Themen 6
T Klasse für Google-Abfrage Java Basics - Anfänger-Themen 9
Z If abfrage - Minimum 0 Java Basics - Anfänger-Themen 9
J Abfrage versetzen Java Basics - Anfänger-Themen 2
D Methoden Abfrage ob ein Wert bereits vorhanden ist Java Basics - Anfänger-Themen 1
thet1983 if() Abfrage Java Basics - Anfänger-Themen 2
A charAt(x)-Abfrage lässt bei Strings<x das Pgrogramm abstürzen. Kann man das verhindern? Java Basics - Anfänger-Themen 4
Uzi21 if - else Abfrage Java Basics - Anfänger-Themen 6
T Index-Abfrage von Pi Java Basics - Anfänger-Themen 5
H Erste Schritte If Abfrage Java Basics - Anfänger-Themen 3
B If Abfrage mit Passwort und Username Java Basics - Anfänger-Themen 2
U einlesen, abfrage Java Basics - Anfänger-Themen 25
T SQL Abfrage Läuft nicht Java Basics - Anfänger-Themen 5
N Probleme mit ActionListener und Logischer Abfrage Java Basics - Anfänger-Themen 4
F Erste Schritte IF-Abfrage fehlerhaft Java Basics - Anfänger-Themen 9
O Downloaden: Trotz If Abfrage wird Datei heruntergeladen Java Basics - Anfänger-Themen 2
D jProgressBar soll bei 100% sein wenn sql Abfrage inkl. jTable schreiben fertig ist... Java Basics - Anfänger-Themen 5
H if-Abfrage double wert Java Basics - Anfänger-Themen 5
M Erstes Prog. OS Abfrage Java Basics - Anfänger-Themen 9
I Einlese Abfrage zweier Variablen in einem Fenster Java Basics - Anfänger-Themen 6
B Boolean abfrage Java Basics - Anfänger-Themen 3
D Variablen Rücksprung nach If Abfrage Java Basics - Anfänger-Themen 16
T If- Abfrage Java Basics - Anfänger-Themen 8
P Taschenrechner , IF-Abfrage Java Basics - Anfänger-Themen 12
D if-Abfrage Java Basics - Anfänger-Themen 6
G Einfache if-Abfrage der Main-Argumente Java Basics - Anfänger-Themen 3
C If abfrage zu getBackground Java Basics - Anfänger-Themen 2
T abfrage eines Integer Array s Java Basics - Anfänger-Themen 5
feardorcha boolean array false - true - Abfrage Java Basics - Anfänger-Themen 10
G Adminrechte abfrage Java Basics - Anfänger-Themen 5
S Abfrage Objekt-Array nach Datentypen Java Basics - Anfänger-Themen 6
R If-Abfrage, || funktioniert nicht Java Basics - Anfänger-Themen 4
S TabbedPane: nach Abfrage oldTab selektieren Java Basics - Anfänger-Themen 5
B Abfrage mittels Variable vereinfachen Java Basics - Anfänger-Themen 6
M nach jar export keine db abfrage möglich Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben