Memory Logik Problem/Denkblockade, bitte helft

Vivyel

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

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:

strußi

Top Contributor
Hast du dir überlegt, die Karten als eigene Objekte zu erstellen und diese mit Eigenschaften wie offen/verdeckt und paarGefunden zu versehen, und mit passenden Methoden wie umdrehen, vergleichen und ausgrauen zu arbeiten, das sollte dein Problem lösen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Image Matching in Memory Minigame Java Basics - Anfänger-Themen 7
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
pinar memory spiel Java Basics - Anfänger-Themen 10
P NullPointerException in Memory-Spiel Java Basics - Anfänger-Themen 5
P Layout Manager - Welches Layout für Memory? Java Basics - Anfänger-Themen 7
A Java memory leakage Java Basics - Anfänger-Themen 9
T Out of Memory (Java Heap Space) Java Basics - Anfänger-Themen 9
S Datentypen Memory Problem Java Basics - Anfänger-Themen 12
I Memory-Spiel Feld nur einmal mischen Java Basics - Anfänger-Themen 2
O Memory Thread.sleep() Java Basics - Anfänger-Themen 5
K Memory-Spiel stecke Fest Java Basics - Anfänger-Themen 2
K Ein Memory Spiel ! Java Basics - Anfänger-Themen 6
K Memory-Spiel alle verdeckte karten aufdecken. Java Basics - Anfänger-Themen 26
T Memory Leak und der Garbage Collector Java Basics - Anfänger-Themen 21
A Memory Probleme beim Laden von thumbnails Java Basics - Anfänger-Themen 3
S memory heap problem Java Basics - Anfänger-Themen 9
J Memory Footprint von Objekten Java Basics - Anfänger-Themen 2
I Memory-Spiel Java Basics - Anfänger-Themen 2
W Servlet - out of memory Java Basics - Anfänger-Themen 7
G Memory-Spiel Java Basics - Anfänger-Themen 8
B Memory - Zufällige Anordnung von Buchstabenpaaren Java Basics - Anfänger-Themen 8
J Memory Java Basics - Anfänger-Themen 2
G Memory Projekt, Fragen über Fragen Java Basics - Anfänger-Themen 6
B Memory in Java Java Basics - Anfänger-Themen 16
T Out of Memory Error Java Basics - Anfänger-Themen 7
E Heapspace out of Memory Java Basics - Anfänger-Themen 8
H Tic Tac Toe Logik kürzer fassen Java Basics - Anfänger-Themen 8
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
H Logik Fehler erkennen Java Basics - Anfänger-Themen 21
M Kann mir jemand hier die Logik vermitteln? Java Basics - Anfänger-Themen 3
M Kann mir jemand die Logik erklären? Java Basics - Anfänger-Themen 1
Hias12345 Schach(Springer Logik) Java Basics - Anfänger-Themen 27
C Array-Werte werden gemischt, ohne Logik Java Basics - Anfänger-Themen 2
R Best Practice Logik in der Datenbank oder in Java? Java Basics - Anfänger-Themen 3
B Logik Upgrade / Downgrade Java Basics - Anfänger-Themen 13
I Hilfe bei der Logik Java Basics - Anfänger-Themen 9
A Minesweeper Logik Java Basics - Anfänger-Themen 10
D Logik von GUI trennen Java Basics - Anfänger-Themen 3
Meeresgott OOP Gui, Logik und Datenbank richtig aufbauen Java Basics - Anfänger-Themen 43
Z Jump and Run - Grafik,Logik und GUI trennen Java Basics - Anfänger-Themen 4
P fibonacci - do while Statement Logik Fehler Java Basics - Anfänger-Themen 5
Z GUI und Logik - Trennung Java Basics - Anfänger-Themen 2
H Logik Frage Java Basics - Anfänger-Themen 3
X Methoden Logik-Problem mit Schleifen. Java Basics - Anfänger-Themen 7
kaoZ Logik und Gui trennen Java Basics - Anfänger-Themen 3
S Logik knobeln... Java Basics - Anfänger-Themen 4
G Klassen Von Logik auf TextField in der GUI zugreifen Java Basics - Anfänger-Themen 14
V Verstehe die Logik nicht ... Java Basics - Anfänger-Themen 30
S OOP Trennung der GUI von der Logik Java Basics - Anfänger-Themen 11
F While Schleife - Logik ? Java Basics - Anfänger-Themen 5
B Logik von verschachtelten For Schleifen Java Basics - Anfänger-Themen 6
Luk10 Logik/Mathe Problem Java Basics - Anfänger-Themen 6
M Logik in Java Java Basics - Anfänger-Themen 4
K java.util.ConcurrentModificationException problem in der Logik? Quaxli-Tutorial Java Basics - Anfänger-Themen 9
S Frage zu Verständnis und Logik Java Basics - Anfänger-Themen 5
K Logik in if-Bedingung Java Basics - Anfänger-Themen 2
L Wie Trennung von Logik und Ausgabe? Java Basics - Anfänger-Themen 6
T Hilfe - Ein Logik Problem Java Basics - Anfänger-Themen 17
sliwalker Wie löse ich eine "DfB-Pokalauslosung"?Logik fehlt Java Basics - Anfänger-Themen 5
T Problem mit der Logik von Switch und do-while Java Basics - Anfänger-Themen 3
G die Logik für eine Buchung! Java Basics - Anfänger-Themen 3
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben