# Memory Game



## wintersun (24. Apr 2010)

Hallo zusammen,

Ich möchte ein Projekt mir Memory Game in Java erstellen. Zuerst möchte ich nur den Memory Code(API) in Java  ohne Gui schreiben.
Kann jemand mir ein Ansazt geben, wie ich beginnen soll, oder einen hilfreichen Code, wo ich zumindestens sehen kann wie man das programieren könnte.
Ich muss danach mein Programm ( java Code ) mit Beans, Servlet und jsp verbinden.

Danke im Voraus!

Lg.


----------



## d3rbastl3r (24. Apr 2010)

Also ich fange da immer zuerst die Model zu entwickeln, das heißt du überlegst dir zuerst welche Daten du Speichern möchtest.

Beispiel:
Was auf jeden fall benötigt wird ist eine Karte, also brauchst du schonmal eine Klasse die eine Karte repräsentiert mit ihren ganzen eigenschaften wie das Image, status, ....
Eine Spieloberfläche brauchst wohin du die oben beschriebene objekte der Karten hinlegst.
Dann vielleicht eine klasse die einen spieler repräsentiert.


----------



## wintersun (24. Apr 2010)

Danke für deine Antwort,

Ich hab den folgenden Code geschrieben aber ich weiß nicht, wie ich eine Methode schreiben soll, die die Karte aufdeckt.
Allerdings soll alles ohne Gui also nur aus der Logik passieren.


```
public class Card{
	
	private Image icon;
    protected int id;
    protected boolean stillInGame = true;

    public Card(Image img, int id) {
        this.id = id;
        this.icon = img;
        
    }


}
--------------------------------------------------------------
public class Cards {
	
	private List<Card> cards;
    private int selectionCount = 0;
    private Card current;
    private Card previous;

    public Cards() {
        cards = new ArrayList<Card>();
    }
    public void init() {
        cards.clear();
        loadCards();
        Collections.shuffle(cards);
    }
    private void loadCards() {
        
        String St = "";
        for ( int i = 1; i<=8; i++ ) {
        	URL url = ClassLoader.getSystemResource("/cards/card"+i+".jpg");
            Image icon = Toolkit.getDefaultToolkit().getImage(url);

            Card c = new Card(icon, i );
            cards.add(c);
            c = new Card(icon, i );
            cards.add(c);
        }
    }
    public void selectCard(Card c) {

        if (current == c)
            return;
        if (!c.stillInGame)
            return;
       // c.showFront(); Wie kann ich diese Methode ohne GUI implementieren....
        if (selectionCount++ % 2 == 0) {
            if (current != null && previous != null) {
               // Wie soll ich hier weitermachen?...
            }
            current = null;
            previous = null;
        }

        previous = current;
        current = c;
    }
```

Danke im Voraus!

Lg.


----------



## d3rbastl3r (25. Apr 2010)

Aufdecken ist eigentlich eine rein optische sache, du überprüffst einfach ob die 2 karten identisch sind, wenn das der fall ist dann dann werden die karten gesperrt ... bzw. der eventlistener für klick wird abgeschaltet und der spieler der diese aufgedeckt hat bekommt einen punkt oder so.

Das aufdecken kannst du machen indem du, auf deinem spielfeld, das standartimage durch das kartenimage ersetzt.


----------



## Marco13 (25. Apr 2010)

d3rbastl3r hat gesagt.:


> Aufdecken ist eigentlich eine rein optische sache, ...



Falls das bedeuten sollte, dass das Aufdecken NUR in der View und NICHT im Modell repräsentiert ist, würde ich da widesprechen. Welche Karten aufgedeckt sind (und welche gesperrt, weil Paare gefunden wurden) ist IMHO eindeutig Sache des Modells. Ganz pragmatisch könnte man die betreffenden Teile der Schnittstelle des Modells mit sowas machen wie

```
interface Model
{
    boolean istAufgedeckt(int x, int y);
    boolean istGesperrt(int x, int y);
    ....

    void addListener/removeListener(Listener l);
}

interface Listener
{
    void karteWurdeUmgedreht(int x, int y);
}
```
oder so... Das kann und SOLLTE man sich noch genauer überlegen - ich wollte nur andeuten, dass die View benachrichtigt wird, wenn eine Karte umgedreht wurde, und sie dann das Modell mit den aktuellen Kartenstatusse..stati.. zuständen anzeigt.


----------

