# Projekt memory spiel mit bilder problem



## dante91 (7. Mai 2011)

Hallo,

Ich bin neu hier im Forum und in Java bin ich nicht so super.
In java muss ich ein eigenes Projekt erstellen und ich dacht mir ein kleines memory zu machen.

Und zwar mein Problem ist es ein Deckblatt als Bild darzustellen und die Karten
selber mit Bilder zu versehen.
Das Programm an sich funktioniert.

Hier mein Quelltext:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Toolkit.*;
import java.awt.Image;



public class Memory extends JFrame
{

    // Konstruktor
    public Memory()
    {
        super("Memory");

        // Nur ein Listener-Objekt fuer alle Felder:
        MemoryListener memListener = new MemoryListener();

        Container content = this.getContentPane();
        content.setLayout(new BorderLayout());

        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(4, 4));

        // Buttons fuer die Felder erzeugen:
        for (int i = 0; i < 20; i++)
        {
            CharButton b = new CharButton(this.getCharacter());
            buttonPanel.add(b);
            b.addActionListener(memListener);
            b.cover();
        }

        // Elemente auf den ContentPane packen
       content.add(buttonPanel, BorderLayout.CENTER);

        // Fenster anzeigen
        setSize(300, 350);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    // Die Beschriftungen der Felder:
        private String[] labels = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "1",
            "2", "3", "4", "5", "6", "7", "8", "9", "10" };

    private int labelsLength = labels.length;

    private String getCharacter()
    {
        // Waehlt einen Label zufaellig aus dem Array
        // und entfernt ihn daraus.
        int pos = (int) (Math.random() * 100) % labelsLength;
        String c = labels[pos];

        // Luecke im Array schliessen:
        for (int i = pos + 1; i < labelsLength; i++)
        {
            labels[i - 1] = labels[i];
        }
        labelsLength--;
        return c;
    }

    public static void main(String[] args) throws Exception
    {
        Memory m = new Memory();
    }
}

// separate Klasse fuer den Listener:

class MemoryListener implements ActionListener
{
    // Die bisher aufgedeckten Felder:
    private CharButton ersteauswahl = null;

    private CharButton zweiteauswahl = null;

    // Zaehler fuer die bisher entdeckten Paare
    private int paaregefunden = 0;

    // Konstruktor
    public MemoryListener()
    {
        super();
    }

    public void actionPerformed(ActionEvent e)
    {
        // Das gerade gewaehlte Feld:
        CharButton drehen = (CharButton) e.getSource();

        // Drei Zustaende:
        //   kein, ein, zwei Feld(er) ist/sind aufgedeckt:
        if (ersteauswahl == null)
        {
            // kein Feld - nun das erste:
            ersteauswahl = drehen;
            drehen.setEnabled(false);
            drehen.uncover();
        }
        else if (zweiteauswahl == null)
        {
            // ein Feld - nun das zweite:
            drehen.setEnabled(false);
            drehen.uncover();
            zweiteauswahl = drehen;

            if (ersteauswahl.getChar().equals(zweiteauswahl.getChar()))
            {
                // Die Marken sind gleich:
                ersteauswahl.setBackground(Color.YELLOW);
                zweiteauswahl.setBackground(Color.YELLOW);

                // Neue Wahl vorbereiten:
                ersteauswahl = null;
                zweiteauswahl = null;

                // Zaheler erhoehen
                paaregefunden++;

                // Spiel beendet?
                if (paaregefunden == 10)
                {
                    JOptionPane.showMessageDialog(null,
                            "You have completed the game!", "Memory",
                            JOptionPane.INFORMATION_MESSAGE);
                }
            }
            else
            {
                // Die Marken sind verschieden
                // Sie bleiben aufgedeckt bis zur naechsten Wahl
            }
        }
        else
        {
            // Nach einem Fehlversuch wurde drittes Feld aufgedeckt:
            drehen.setEnabled(false);
            drehen.uncover();
            ersteauswahl.cover();
            ersteauswahl.setEnabled(true);
            ersteauswahl = drehen;
            zweiteauswahl.cover();
            zweiteauswahl.setEnabled(true);
            zweiteauswahl = null;
        }
    }
}



// Hilfsklasse: Button-Unterklasse mit verdeckbarer Beschriftung:

class CharButton extends JButton
{
    private String myLabel;

    CharButton(String lab)
    {
        super(lab);
        myLabel = lab;
    }

    void uncover()
    {


        setText(myLabel);

    }
    
    void cover()
    {
        setText("");
    }

    String getChar()
    {
        return myLabel;
    }
}
```

Ich hoffe ihr könnt mir helfen.
Gruß dante


----------



## dante91 (7. Mai 2011)

Weiß keiner eine Idee




Bitte um eine schnelle Hilfe!!


----------



## Ironzwerg (9. Mai 2011)

Es gibt den JButton Kontruktor 
	
	
	
	





```
JButton(Icon icon)
```
Damit kannst du dem Button ein Bild verpassen.

Du kannst ein Array mit deinen Bildern erzeugen und in deiner Schleife einfach den o.g. Konstruktor verwenden.
Wenn der Spieler ein Paar gefunden hat, kannst du einfach das Bild austauschen.


----------

