Zufallsfarben aus Array

Cyz44

Aktives Mitglied
Hey, ich wusste nicht wo ichs hinschreiben kann also hab ich mal ein neues thema erstellt 🙂

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

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 27.09.2011
  * @Cyrus Zeller
  */

public class Mastermind extends JFrame
{
  // Anfang Attribute
  private JButton btn1 = new JButton();
  private JButton btn2 = new JButton();
  private JButton btn3 = new JButton();
  private JButton btn4 = new JButton();
  private JButton btn5 = new JButton();
  private JButton btn6 = new JButton();
  private JButton btn7 = new JButton();
  private JButton btn8 = new JButton();
  private JButton btn9 = new JButton();



  String stein1;
  String stein2;
  String stein3;
  String stein4;

  String geraten1;
  String geraten2;
  String geraten3;
  String geraten4;

  int weiß = 0;
  int schwarz = 0;


  private String[] jList1Data = {};



  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();
  // Ende Attribute




  public Mastermind(String title)
  {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    int frameWidth = 549; 
    int frameHeight = 442;
    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

    btn1.setBounds(32, 32, 40, 40);
    btn1.setText("");
    btn1.setBackground(Color.white);
    btn1.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        btn1_ActionPerformed(evt);
        jlbl5.setBackground(Color.red);
        jlbl5.setOpaque(true);
      }
    });
    cp.add(btn1);

    btn2.setBounds(80, 32, 40, 40);
    btn2.setText("");
    btn2.setBackground(Color.yellow);
    btn2.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        btn2_ActionPerformed(evt);
      }
    });
    cp.add(btn2);

    btn3.setBounds(128, 32, 40, 40);
    btn3.setText("");
    btn3.setBackground(Color.red);
    btn3.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        btn3_ActionPerformed(evt);
      }
    });
    cp.add(btn3);

    btn4.setBounds(176, 32, 40, 40);
    btn4.setText("");
    btn4.setBackground(Color.green);
    btn4.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        btn4_ActionPerformed(evt);
      }
    });
    cp.add(btn4);

    btn5.setBounds(224, 32, 40, 40);
    btn5.setText("");
    btn5.setBackground(Color.blue);
    btn5.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        btn5_ActionPerformed(evt);
      }
    });
    cp.add(btn5);

    btn6.setBounds(272, 32, 40, 40);
    btn6.setText("");
    btn6.setBackground(Color.black);
    btn6.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        btn6_ActionPerformed(evt);
      }
    });
    cp.add(btn6);

    btn7.setBounds(352, 32, 105, 40);
    btn7.setText("Neues Spiel");
    btn7.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
         btn7_ActionPerformed(evt);
[U]
         [B]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;[/B][/U]
         


      }
    });
    cp.add(btn7);

    btn8.setBounds(360, 80, 85, 40);
    btn8.setText("Raten");
    btn8.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        btn8_ActionPerformed(evt);
      }
    });
    cp.add(btn8);

    btn9.setBounds(360, 128, 85, 40);
    btn9.setText("Löschen");
    btn9.addActionListener(new ActionListener()
   {
      public void actionPerformed(ActionEvent evt)
      {
        btn9_ActionPerformed(evt);
      }
    });
    cp.add(btn9);


    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);

    jlbl5.setBounds(32, 352, 40, 40);
    jlbl5.setText("");
    jlbl5.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl5);
    jlbl6.setBounds(88, 352, 40, 40);
    jlbl6.setText("");
    jlbl6.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl6);
    jlbl7.setBounds(144, 352, 40, 40);
    jlbl7.setText("");
    jlbl7.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl7);
    jlbl8.setBounds(200, 352, 40, 40);
    jlbl8.setText("");
    jlbl8.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl8);

    jlbl9.setBounds(280, 352, 40, 40);
    jlbl9.setText("");
    jlbl9.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl9);
    jlbl10.setBounds(336, 352, 40, 40);
    jlbl10.setText("");
    jlbl10.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl10);
    jlbl11.setBounds(392, 352, 40, 40);
    jlbl11.setText("");
    jlbl11.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl11);
    jlbl12.setBounds(440, 352, 40, 40);
    jlbl12.setText("");
    jlbl12.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl12);

     jlbl13.setBounds(32, 296, 40, 40);
    jlbl13.setText("");
    jlbl13.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl13);
    jlbl14.setBounds(88, 296, 40, 40);
    jlbl14.setText("");
    jlbl14.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl14);
    jlbl15.setBounds(144, 296, 40, 40);
    jlbl15.setText("");
    jlbl15.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl15);
    jlbl16.setBounds(200, 296, 40, 40);
    jlbl16.setText("");
    jlbl16.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jlbl16);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden


  public void btn1_ActionPerformed(ActionEvent evt)
  {

  }

  public void btn2_ActionPerformed(ActionEvent evt)
  {


  }

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

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

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

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

  public void btn7_ActionPerformed(ActionEvent evt)
  {

  }

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

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

  // Ende Methoden

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

Wie ihr seht, erstelle ich ein Mastermind mit GUI. Bei button 7 (fett & unterstrichen) hab ich ein array erstellt, in dem ich die 6 möglichen farben gespeichert habe. Wie kann ich es nun machen, dass ine zufallsfarbe aus diesem array erstellt wird. Oder anders gesagt: es soll eine 4er kombination aus diesen 6 farben entstehen.
Irgendwie mir random wirds glaub ich gemacht, aber ich hab keine ahnung wie...
 
Java:
Color[] Farbe = new Color[6];
Variablen schreibt man klein.

Erstell dir einfach ne Zufallszahl zwischen 0 und 5, z.b. mit der Klasse Random. und lies die Farbe mit
Code:
farbe[zufallszahl]
aus.
 
So kannst du dir Zufällige Integer Werte im Bereich 0 bis 5 erstellen lassen:
Java:
static int getRandomNumber() {
	
	int number = (int) (Math.random() * 6);
	return number;
}
 
tut mir leid aber ich verstehs nicht so ganz ???:L

ich hab ja schon ein array erstellt, und die farben bereits zugeordnet, da kann ich sie doch nicht noch ein 2. mal zuordnen oder??
 
Soweit ich es verstanden habe willst du dem Button eine zufällige Farbe zuordnen, diese stehen in dem von dir angelegten Array.
So dürfte das klappen:
Java:
btn7.setBackground(Farbe[getRandomNumber]);
 
sorry dann hab ichs wohl etwas falsch erklärt.
Das Programm soll eine Kombi aus 4 Farben erstellen (aus dem array). Dafür hab ich die labels 1-4 vorgesehen. Bei einem klick auf btn 7 sollen den 4 labels die farben zugeordnet werden z.B. lbl1=grün, lbl2=gelb, lbl3=blau und lbl4=gelb, sie können also auch doppelt vorkommen (genau dafür ist auch der action listener da).

Nun war also meine frage, wie ich das hinkriege (da ich auch noch nie mit random gearbeitet habe).
 
Na dann wende das ganze doch einfach auf die Labels an, bsp.:
Java:
lbl1.setBackground(Farbe[getRandomNumber]);
lbl1.setOpaque(true);

Oder habe ich es immernoch nicht richtig verstanden? :bahnhof:
 
Zunächst einmal sind Labels transparent und müssen mit setOpaque(true) undurchsichtig gemacht werden.
Dann
- gilt Zufallszahl erzeugen (Bsp sind ja hier zu finden)
- mit setBackground(Color) die Farbe mit dem Index der Zufallszahl das Label einfärben

Das Farben Array würde ich ausserhalb des ActionListeners erzeugen, dann kann man es immer wieder verwenden.
Warum nicht mit was einfacherem anfangen nur ein Label und ein Button der bei Betätigtung dem Label eine zufällige Farbe zuweist.

Da Du Arrays schon kennst warum nicht die vielen Buttons und Labels zumindest teilweise in einem Array verwalten?
 
@Camill Doch doch, du hast es verstanden 🙂 hast recht, man muss das mit dem getrandomnumber ja dann einfach nur auf das lbl beziehen, Danke!

@Michael Die labels will ich ja am anfang noch undurchsichtig lassen, damit der spieler die Kombination noch nicht sieht

Das was du als letztes geschrieben hast klingt interessant, weil mein Code ist halt mega lang (über 300 zeilen) und dabei ist das meiste davon bisher nur, um die oberfläche zu gestalten. Hab auch schon meinen lehrer dazu gefragt, er meinte ich solls so lassen. Ja toll, dann komm ich am ende auf über 1000 zeilen :bahnhof:
 
Klassen die über sagen wir mal 200 Zeilen lang sind, sind zu hinterfragen, aber dazu werde ihr ja wohl noch kommen.

Also ich hinterfrage mal ...

Java:
  private JButton btn1 = new JButton();
  private JButton btn2 = new JButton();
  private JButton btn3 = new JButton();
  private JButton btn4 = new JButton();
  private JButton btn5 = new JButton();
  private JButton btn6 = new JButton();
  private JButton btn7 = new JButton();
  private JButton btn8 = new JButton();
  private JButton btn9 = new JButton();

Würde ich schon mal ersetzen durch
Java:
private JButton[] btn;

//im Konstruktor
btn = new JBUtton[9];
for (int i=0; i<btn.length; i++) 
  btn[i] = new JButton();
}

Genau dasselbe solltest du mit den JLabel machen.

Weiter fällt auf, dass mehrfach derselbe Code vorkommt.

Java:
    btn4.setBounds(176, 32, 40, 40);
    btn4.setText("");
    btn4.setBackground(Color.green);
    btn4.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        btn4_ActionPerformed(evt);
      }
    });
    cp.add(btn4);

Da könnte man darüber nachdenken, das in einen Prozedur zu packen.

Solltest du das jetzt noch nicht verstehen, ist das nicht so wichtig, denn an der Funktion selbst ändert das nichts - es verkleinert den Code und verbessert die Wartbarkeit.
 

Neue Themen


Zurück
Oben