Codeerklärung Memory

babuschka

Top Contributor
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.

Java:
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;
        }
    }
}
 
B

bone2

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

babuschka

Top Contributor
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

Top Contributor
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...
 
B

bone2

Gast
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

Top Contributor
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...
 
T

Tomate_Salat

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

maki

Gast
*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

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

Neue Themen


Oben