Hallo zusammen,
ich arbeite gerade an einem Memory. Leider bin ich ein Anfänger was java angeht.
Das Feld über eine Forschleife erstellen und das Mischen am anfang, funktionieren einwandfrei. Leider kann man bis jetzt jede karte einmal anklicken und sie bleibt offen liegen. (Ich hab auch schon versucht die lösungen anderer memorys anzupassen, aber erfolglos.)
Jetzt zu meinem Problem bei dem ich schon seit gestern früh hänge. ich komm nicht drauf wie ich die abfrage ausführen kann beispielsweise überprüfen.
damit meine ich das eine erste Wahl getroffen wird = eine karte wird aufgedeckt und danach eine zweiteWahl getroffen wird = zweite karte wird aufgedeckt -> anschließend prüfen ob ersteWahl=zweiteWahl. Wenn richitig-> karten ausgrauen/aus spielfeld entfernen, wenn falsch-> karten umdrehen bzw. 3. auswählen und dann die ersetn beiden umdrehn.
ich bin auch noch nicht darauf gekommen wie ich überprüfen kann ob die zwei bilder gleich sind.
ich hab mir überlegt wenn ich den dateipfad i-wie abfragen könnte, könnte ich so die pärchen identifizieren.oder i-wie if temporäres icon== temporäres icon. es funktioniert auch noch nicht, das nur zwei karten gewählt werden können.
ich komm einfach nicht drauf, wie ich das lösen kann
bestimmt ist die lösung wieder banal einfach und ich steh auf dem schlauch.
Bitte helft mir! ich weis einfach nicht weiter
hier mal mein code:
schon mal vielen dank an alle die mir helfen!
liebe grüße Vivyel
ich arbeite gerade an einem Memory. Leider bin ich ein Anfänger was java angeht.
Das Feld über eine Forschleife erstellen und das Mischen am anfang, funktionieren einwandfrei. Leider kann man bis jetzt jede karte einmal anklicken und sie bleibt offen liegen. (Ich hab auch schon versucht die lösungen anderer memorys anzupassen, aber erfolglos.)
Jetzt zu meinem Problem bei dem ich schon seit gestern früh hänge. ich komm nicht drauf wie ich die abfrage ausführen kann beispielsweise überprüfen.
damit meine ich das eine erste Wahl getroffen wird = eine karte wird aufgedeckt und danach eine zweiteWahl getroffen wird = zweite karte wird aufgedeckt -> anschließend prüfen ob ersteWahl=zweiteWahl. Wenn richitig-> karten ausgrauen/aus spielfeld entfernen, wenn falsch-> karten umdrehen bzw. 3. auswählen und dann die ersetn beiden umdrehn.
ich bin auch noch nicht darauf gekommen wie ich überprüfen kann ob die zwei bilder gleich sind.
ich hab mir überlegt wenn ich den dateipfad i-wie abfragen könnte, könnte ich so die pärchen identifizieren.oder i-wie if temporäres icon== temporäres icon. es funktioniert auch noch nicht, das nur zwei karten gewählt werden können.
ich komm einfach nicht drauf, wie ich das lösen kann
bestimmt ist die lösung wieder banal einfach und ich steh auf dem schlauch.
Bitte helft mir! ich weis einfach nicht weiter
hier mal mein code:
Java:
public class Memory extends JPanel{
private JPanel panelMemory;
static String Bilder[] = {"karten/1.png", "karten/2.jpg",
"karten/3.jpg", "karten/4.jpg",
"karten/5.png", "karten/6.png"};
static JButton buttons[];
ImageIcon rückseite;
int buttonNummer;
ImageIcon icons[];
boolean drehen;
public Memory(Container c) {
c.removeAll(); //--------------------------------------------C!!!!!!!!!
// c.setLayout(null);
setBounds(0, 0, 800, 600);
setSize(800,600); c.add(this);
c.revalidate();
c.repaint();
setLayout(null);
add(getPanelMemory(c));
}
// setSize(800,600);
private JPanel getPanelMemory(Container c) {
if (panelMemory == null) {
panelMemory = new JPanel();
panelMemory.setBounds(50, 55, 600, 500);
panelMemory.setLayout(new GridLayout(3, Bilder.length)); // erstellt ein grid layout mit der länge der Bilder.(string pics)
// wenn man die zahl vor pics.length ändert kann man festlegen wieviele reihen, das memory haben soll.
panelMemory.setVisible(true);
rückseite = new ImageIcon("karten/back.jpg"); // bild für die rückseite der karten
buttonNummer = Bilder.length * 2; // macht, das jedes bild 2 mal bei den buttons vorkommt
buttons = new JButton[buttonNummer]; // erstellt neue buttons
icons = new ImageIcon[buttonNummer]; // das image icon array icons entspricht dem imageicon array der buttonnummern /echt blöd zu formulieren die arrays sollen gleich lang sein
//--------------------------------------------------------------------------------------------------- for schleife bilder länge
for (int i = 0, z = 0; i < Bilder.length; i++) { // d
icons[z] = new ImageIcon(Bilder[i]); // wie oben nur wird hier noch die grenze der länge festgelegt icons und pics bekommen die selbe länge zugewiesen
buttons[z] = new JButton(""); //jeder erstellte jbutton hat keinen text /rückseite
buttons[z].addActionListener((ActionListener) new ImageButtonListener()); //implementiert einen action listener pro button im array
//rut den selbst erstellten listener imgage button listener auf. siehe unten!!!!!.
buttons[z].setIcon(rückseite); // der array buttons bekommt als bild das closed icon zugewiesen = rückseiten bild
panelMemory.add(buttons[z++]); //fügt die buttons dem panel hinzu
icons[z] = icons[z - 1]; //die icons werden den buttons zugewiesen. hier muss z=0 abgezogen werden. //---------------------------------------------------------------------------------------------------------------- gleiches wie oben
buttons[z] = new JButton(""); //buttons haben keinen text // gleieches wie oben! wird benötigt damit die bilder richtig verteilt werden. und die reihenanzeige auch funktioniert.
buttons[z].addActionListener(new ImageButtonListener());
buttons[z].setIcon(rückseite); // buttons erhalten als rückseite edas bild rückseite
panelMemory.add(buttons[z++]); // fügt die buttons dem panel hinzu
}
//-------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------- RANDOM
Random nummer = new Random();
for(int i=0 ; i<buttonNummer; i++) //solange i kleiner is als die länge der buttonnummern weist er für jedes ein zufälliges bild zu
{
int j = nummer.nextInt(buttonNummer); // int variable wird erstellt diese soll immer der nächsten zufallszahl für die buttonnummern entsprchen
ImageIcon temp = icons[i]; //das temporäre imgage icon entspricht einer zahl aus dem array der icons .
icons[i] = icons[j]; //die längen von icons muss aus beiden schleifen gleich sein in dieser schleife länge=i in der obrigen länge=j
icons[j] = temp; // icons j entspricht dem temporären ausgewählten bild
}
}
return panelMemory;
}
//hilfsklasse für den imagebuttonlistener
class ImageButtonListener implements ActionListener {
private JButton ersteWahl = null;
private JButton zweiteWahl = null;
public void actionPerformed(ActionEvent e) { //wird beim klicken der buttons gezogen
for (int i = 0; i < buttonNummer; i++) { //solange i kleiner ist als die buttonNUmmer wird jedem button ein icon zugewiesen. macht das umdrehen erst möglich
if (e.getSource() == buttons[i]) { // wenn deaktiviert werden bei einem klick alle karten aufgedeckt, d.h. deckt nur eine karte auf pro klick
buttons[i].setIcon(icons[i]); // der button bekommt sein bild
// System.out.println(icons[i]); // anhand der des system outs erkennt man das die bilder doppelt drin, gleichen pfad haben
}
// if (drehen==false)
// {((JButton) e.getSource()).setIcon(rückseite);}
/* funktioniert nicht so wie es soll
// Der gerade gewählte Button:
JButton aufgedeckt = (JButton) e.getSource();
if (ersteWahl == null)
{
// kein Feld wurde angeklickt (immer noch im Anfangszustand) - nun die erste Karte:
ersteWahl = aufgedeckt;
// aufgedeckt.setEnabled(false);
aufgedeckt.setIcon(rückseite);
} else if (zweiteWahl == null)
{
// ein Feld - nun das zweite:
aufgedeckt.setEnabled(false);
aufgedeckt = buttons[i]; //aufdecken
zweiteWahl = aufgedeckt;
if (ersteWahl.getIcon().equals(zweiteWahl.getIcon()))
{ //Die Marken sind gleich:
// Neue Runde vorbereiten:
ersteWahl = null;
zweiteWahl = null;
}
else
{
// Die Karten sind verschieden
// Sie bleiben aufgedeckt bis zur naechsten Wahl
// es passiert nichts also wird keine Bedingung reingeschrieben
}
}
{
// Nach einem Fehlversuch wird ein drittes Feld aufgedeckt:
aufgedeckt.setEnabled(false);
aufgedeckt = buttons[i]; //aufdecken
// ersteWahl.setIcon(rückseite);
ersteWahl.setEnabled(true);
ersteWahl = aufgedeckt;
// zweiteWahl.setIcon(rückseite);
// zweiteWahl.setEnabled(true);
zweiteWahl = null;
}
*/
}}}
}
schon mal vielen dank an alle die mir helfen!
liebe grüße Vivyel
Zuletzt bearbeitet von einem Moderator: