Hallo Liebe Community
Ich habe in der Schule den Auftrag bekommen, ein Memory (aus 64 JButtons) mit Java zu programmieren. Als Programmierumgebung nutze ich Eclipse. Ich bin wie folgt vorgegangen: Um die 64 Buttons zu erstellen, habe ich ein Button-Array erstellt. Anschliessend habe ich ein Zahlen-Array vom Typ "int" mit 64 Felder erstellt, welches zweimal die Zahlen 1-32 in einer zufälligen Reihenfolge enthält. Danach habe ich die Zahlen dieses Arrays den zugehörigen Buttons mittels einer for-Schleife zugeordnet. Sobald ein Button angeklickt wird, zeigt er seine "Zahl" an und ändert die Farbe auf grün (für angewählt). Es läuft soweit gut, nun stehe ich aber vor einem Problem. Das Programm soll diese Aktion (Anwählen der Buttons) auf 2 Buttons beschränken. Anschliessend soll es prüfen, ob die Zahlen der beiden Buttons übereinstimmen. Wenn dies der Fall ist, soll es die beiden Buttons verschwinden lassen. Ich habe dabei an setVisible(false) gedacht. Wenn die Werte nicht übereinstimmen, sollen die Karten "zugedeckt" werden und das Ganze soll wieder von vorne anfangen. Ich kann mir gut vorstellen, dass es mit einer for-Schleife funktionieren könnte. Ich habe heute lange studiert und ausprobiert, aber nichts scheint richtig zu funktionieren. Ich wäre daher sehr dankbar, wenn mir jemand weiterhelfen könnte.
Zum besseren Verständnis habe ich unten noch mein Programmcode aufgeführt, damit ihr sehen könnt, wo ich bereits stehe.
Liebe Grüsse Aaron
Ich habe in der Schule den Auftrag bekommen, ein Memory (aus 64 JButtons) mit Java zu programmieren. Als Programmierumgebung nutze ich Eclipse. Ich bin wie folgt vorgegangen: Um die 64 Buttons zu erstellen, habe ich ein Button-Array erstellt. Anschliessend habe ich ein Zahlen-Array vom Typ "int" mit 64 Felder erstellt, welches zweimal die Zahlen 1-32 in einer zufälligen Reihenfolge enthält. Danach habe ich die Zahlen dieses Arrays den zugehörigen Buttons mittels einer for-Schleife zugeordnet. Sobald ein Button angeklickt wird, zeigt er seine "Zahl" an und ändert die Farbe auf grün (für angewählt). Es läuft soweit gut, nun stehe ich aber vor einem Problem. Das Programm soll diese Aktion (Anwählen der Buttons) auf 2 Buttons beschränken. Anschliessend soll es prüfen, ob die Zahlen der beiden Buttons übereinstimmen. Wenn dies der Fall ist, soll es die beiden Buttons verschwinden lassen. Ich habe dabei an setVisible(false) gedacht. Wenn die Werte nicht übereinstimmen, sollen die Karten "zugedeckt" werden und das Ganze soll wieder von vorne anfangen. Ich kann mir gut vorstellen, dass es mit einer for-Schleife funktionieren könnte. Ich habe heute lange studiert und ausprobiert, aber nichts scheint richtig zu funktionieren. Ich wäre daher sehr dankbar, wenn mir jemand weiterhelfen könnte.
Zum besseren Verständnis habe ich unten noch mein Programmcode aufgeführt, damit ihr sehen könnt, wo ich bereits stehe.
Java:
package Umsetzung;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
import java.awt.Color;
public class Window extends JFrame implements ActionListener {
private JButton Start;// Variabeln deklarieren
private JButton Exit;
private JButton Reset;
private JButton Card;
final int Kartenanzahl = 64;
JButton[] Spielkarten = new JButton[Kartenanzahl]; // Button-Array erstellen
final int Zahlenanzahl = 64;
int[] Werte = new int[Zahlenanzahl]; // Zahlenarray erstellen
public Window() // Konstruktor
{
super("Memory");
JPanel Feld = new JPanel();
Feld.setLayout(null);
Start = new JButton("Start Game");
Start.setSize(110, 30);
Start.setLocation(20, 600);
Start.addActionListener(this);
Feld.add(Start);
Exit = new JButton("Exit Game");
Exit.setSize(110, 30);
Exit.setLocation(605, 600);
Exit.addActionListener(this);
Feld.add(Exit);
Reset = new JButton("Reset Game");
Reset.setSize(110, 30);
Reset.setLocation(312, 600);
Reset.addActionListener(this);
Feld.add(Reset);
setContentPane(Feld); // Eigenschaften der Buttons definieren
for (int i = 0; i < 32; i++) {
Werte[i] = i + 1;
}
for (int f = 32; f < 64; f++) {
Werte[f] = f - 31; // Zahlenarray mit Zahlen von 1-32 füllen, dabei kommt jede Zahl 2 mal vor
}
Random Zahlengenerator = new Random();
for (int p = 0; p < Werte.length; p++) {
int randomPosition = Zahlengenerator.nextInt(Werte.length);
int temp = Werte[p];
Werte[p] = Werte[randomPosition];
Werte[randomPosition] = temp; // Mischen der Zahlen innerhalb des Zahlenarrays
}
for (int a = 0; a < 64; a++) {
Spielkarten[a] = new JButton();
Spielkarten[a].setSize(50, 50); // Eigenschaften der Spielkarten definieren
Spielkarten[a].setLocation((a % 8 * 78) + 68, (((int) a / 8) * 68) + 40);
Spielkarten[a].setActionCommand("klick");
Spielkarten[a].addActionListener(this);
Spielkarten[a].setBackground(Color.YELLOW);
Feld.add(Spielkarten[a]);
Spielkarten[a].setEnabled(false);
}
}
public void actionPerformed(ActionEvent Aktion) {
Object Source = Aktion.getSource();
if (Source == Exit) {
System.out.println("Sie haben das Spiel verlassen");
System.exit(0);
} // Spiel beenden
for (int b = 0; b < 64; b++) {
if (Source == Start) {
Spielkarten[b].setEnabled(true);
} // Spiel starten
}
if (Source == Start) {
System.out.println("Sie haben ein Spiel gestartet");
}
if (Source == Reset) {
System.out.println("Sie haben das Spiel zurückgesetzt");
dispose();
Window ResetFenster = new Window();
ResetFenster.setSize(750, 680);
ResetFenster.setLocationRelativeTo(null);
ResetFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ResetFenster.setVisible(true);
} // Spiel zurücksetzen
for (int c = 0; c < 64; c++)
for (int d = 0; d < 64; d++) {
if (Source == Spielkarten[c]) {
Spielkarten[c].setText("" + Werte[c]);
}
if (Source == Spielkarten[c]) {
Spielkarten[c].setBackground(Color.GREEN);
} // Beim Klick auf den Button die Farbe wechseln
}
}
public static void main(String[] args) {
Window Fenster = new Window();
Fenster.setSize(750, 680);
Fenster.setLocationRelativeTo(null);
Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Fenster.setVisible(true); // Eigenschaften des Fensters definieren
}
}
Liebe Grüsse Aaron