# Codeerklärung Memory



## babuschka (3. Dez 2010)

Hallo Leute,

Unser Prof. hat uns eine Musterlösung für das Memory Applet gegeben ich kann den Code aber nicht ganz nachvollziehen, da ich die letzte Vorlesung verpasst habe.

Wäre nett wenn sich jemand die Mühe machen könnte und den Code mit Kommentaren versehen könnte, sodass ich ihn nachvollziehen könnte.

Achja btw. wie würdet ihr denn vorgehen, wenn ihr die Zahlen durch Bilder oder Text ersetzen wollt?
Ich wäre dankbar für ein paar Tipps.


```
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
 
import javax.swing.Timer;
 
public class Memory extends Applet implements ActionListener {
 
    Button b[] = new Button[20];
    Panel bereich1 = new Panel();
    Panel bereich2 = new Panel();
    Button start1 = new Button("Spiel starten!");
    Button memory;
    boolean isOpen;
 
    public void init() {
        add(bereich2);
        add(bereich1);
        bereich2.add(start1);
        start1.addActionListener(this);
        bereich1.setLayout(new GridLayout(5, 4, 4, 4));
        bereich1.setEnabled(false);
        for (int i = 0; i < 20; i = i + 1) {
            b[i] = new Button("           ");
            b[i].setBackground(Color.YELLOW);
            bereich1.add(b[i]);
            b[i].addActionListener(this);
 
        }
    }
 
    public void actionPerformed(ActionEvent e) {
        final Button btn = (Button) e.getSource();
        if (e.getSource().equals(start1)) {
            stellen();
            bereich1.setEnabled(true);
            start1.setEnabled(false);
            return;
        }
        if (isOpen) {
            isOpen = !isOpen;
            btn.setLabel(e.getActionCommand());
            if (btn.getActionCommand().equals(memory.getActionCommand())) {
                System.out.println("Yeaah ein Paar gefunden!");
                btn.setEnabled(false);
                memory.setEnabled(false);
            } else {
                Timer t = new Timer(1000, new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        memory.setLabel("");
                        btn.setLabel("");
                    }
                });
                t.setRepeats(false);
                t.start();
            }
        } else {
            btn.setLabel(e.getActionCommand());
            memory = btn;
            isOpen = !isOpen;
        }
    }
 
    public void stellen() {
        int n = 0;
        int merke;
        while (n < 20) {
            merke = 0;
            double z = Math.random();
            int z10 = (int) (z * 10);
            b[n].setActionCommand("" + z10);
            for (int j = 0; j < n; j++) {
                if (b[n].getActionCommand().equals(b[j].getActionCommand()))
                    merke = merke + 1;
            }
            if (merke < 2)
                n = n + 1;
        }
    }
}
```


----------



## bone2 (3. Dez 2010)

Welche stellen kannst du denn nicht nachvollziehen? kann ja nicht alles sein, wenn du nur eine vorlesung verpasst hast


----------



## Marco13 (3. Dez 2010)

Netter Versuch http://www.java-forum.org/spiele-multimedia-programmierung/99764-memory.html#post634957  ( :noe: )


----------



## babuschka (3. Dez 2010)

Z.40-61  bzw. alles was sich auf boolean (is open) bezieht.
Ich weiß das boolean prüft ob etwas true oder false ist, allerdings weiß ich nicht was is open hier prüft.
Könnten das die Paare sein?


----------



## ARadauer (3. Dez 2010)

> Wäre nett wenn sich jemand die Mühe machen könnte und den Code mit Kommentaren versehen könnte, sodass ich ihn nachvollziehen könnte.


den ganzen? nö... bitte stell konkrete Fragen, dann helfen wir gerne aber deine Hausübung machen wir dir nicht...


----------



## ARadauer (3. Dez 2010)

> alles was sich auf boolean (is open) bezieht.


ich denke isOpen gibt an an ob ein kärtchen augedekt ist...

warum setzt du dir nicht mit dem debugger ein paar breakpoints und spielt ein bisschen mit dem memory?


----------



## bone2 (3. Dez 2010)

Hm mit dem anderen Thread bezweifel ich das es a) von nem prof kommt und b) ist es laut dem anderen thread auch noch unvollständig, also beileibe keine musterlösung


----------



## ARadauer (3. Dez 2010)

also 
grob in der stellen Methode bekommen die KArten ihren Wert.. setActionCommand.. ich find das zwar nicht sehr gut aber naja bin auch kein lehrer...

wenn man nun drauf klickt wird die
 public void actionPerformed(ActionEvent e) {
aufgerufen
  und mit e.getActionCommand()   kriegt man nun den wert...

also wenn isopen werden die verglichen usw und wenn nicht wird aufgedeckt...
bekommt der akutelle butten den Command als Beschriftung.. man soll ja sehen was man aufgedekt hat..
            memory = btn; naja die variabe könnte man auch besser bennen, also das aktuelle offene 
            isOpen = !isOpen; open auf true, weil wir ja im false zweig sind und !false ist true...


----------



## ARadauer (3. Dez 2010)

ach jetzt versteh ich...
du musst ein projekt machen http://www.java-forum.org/hausaufgaben/109633-einfaches-java-projekt.html
 und hast dir gedacht du klaust dir einfach eins... nur blöd das du es nicht verstehts und im selben forum nach einer erklärung fragst...

naja gewagt... ich als lehrer würde schon ein bisschen nach den abgegebenen projekten googlen ;-)


----------



## shakesbiier. (3. Dez 2010)

-.-

gelöscht, wir machen ja keine Hausaufgaben, hatt ich nicht gelesen


----------



## Tomate_Salat (3. Dez 2010)

unglaublich. Dann bezahl lumix wenigstens dafür, dass er schon deine Hausaufgaben macht -.-


----------



## maki (3. Dez 2010)

*verschoben*

Bitte in Zukunft das richtige Unterforum wählen: Hausaufgaben
Die anderen Foren bleiben Leuten vorbehalten sie Interesse an Java haben und Eigeninitiative zeigen.


----------



## Marco13 (3. Dez 2010)

Oder wenigstens so leicht zu googlende und spezifische Strings wie "Yeaah ein Paar gefunden" vorher durch etwas neutraleres ersetzen  
Jetzt ohne Avatarbild. Hm.


----------

