Didaktische Hinweise Die Schülerinnen und Schüler sollen hier arbeitsteilig die unterschiedlichen Spielkarten entwickeln. Dabei kann eine Vereinbarung darüber getroffen werden, welche Abmessung die einzelne Karte haben soll und an welcher Stelle der Bezugspunkt (xPos/yPos) sein soll, damit man die Karten z.B. mit einer for-Schleife im Fenster positionieren kann. Das Projekt eignet sich auch zur Einführung der Polymorphie, die sich hier geradezu anbietet. Daher gibt es auch hier ein Info mit Aufgaben, das auf das Projekt bezogen ist. Die Aufgaben bestehen darin ein Testprogramm auszuprobieren und zu variieren um zu erfahren und verstehen, wann und warum die Methode der Oberklasse bzw. der Unterklasse ausgeführt wird. Im Testprogramm sind die Variablen der Klasse Spielkarte als protected deklariert. Dies bewirkt, dass sie nur für Klassen im gleichen Paket (Ordner) oder Unterklassen (auch in anderen Paketen) sichtbar sind. Eigentlich würde hier eine Einschränkung der Sichtbarkeit auf Unterklassen im selben Paket benötigt. Diese ist in Java jedoch nicht vorgesehen. Um die Daten besser zu kapseln wäre es auch hier (wie in anderen Projekten) möglich, in der Klasse Spielkarte alle Variablen private zu deklarieren und für die Variablen, die in der Unterkasse sichtbar sein müssen entsprechende get- und/oder set-Methoden. Da hier der Fokus auf die Polymorphie gelegt wurde, haben wir dies an dieser Stelle zur Vereinfachung weggelassen. Auf die explizite Deklaration der Methoden als public wurde hier verzichtet, da sie auch ohne dies für Klasen im selben Ordner sichtbar sind. Das Mischen der Karten erfolgt hier durch beliebig häufiges Vertauschen von Kartenobjekten im Array. Um das Vertauschen zu Visualisieren, gibt es zwei Präsentationen, bei denen es um den Unterschied zwischen dem Vertauschen von Objekten und dem Vertauschen von einfachen Daten geht. Die Karten können ihren kartenTyp in einer Variablen speichern, so dass festgestellt werden kann, ob sie von der gleichen (Unter)-Klasse sind, indem man die Abfrage macht: if(wartendeKarte.getKartentyp().equals(kartenFeld[i].getKartentyp())) Stattdessen kann man zwar auch die Abfrage so formulieren: if (wartendeKarte.getClass().getName().equals(karte[i].getClass().getName())) Darauf können die Schülerinnen und Schüler wohl kaum selbst kommen, so dass man ihnen das erklären müsste. Erweiterungen des Spiels gegenüber der einfachsten Lösung könnten sein: Einbauen einer Zeitmessung mit Hilfe des Zeitmanagers, der für diesen Zweck eigens geeignete Methoden enthält. Die gemessene Zeit kann dann ausgegeben werden. Wer die kürzeste Zeit benötigt gewinnt. Ergänzen einer reset-Methode, die die Ausgangsbedingungen wiederherstellt und das Spielen weiterer Runden erlaubt. Hier kann man diskutieren, die Initialisierungen aus dem Konstruktor herauszunehmen, die wieder vorgenommen werden müssen und sie stattdessen in die reset-Methode zu verlegen, welche ihrerseits dann im Konstruktor aufgerufen wird. Das Spiel für mehrere Spieler erweitern, deren Spielzeiten aufaddiert und am Ende des Spiels miteinander verglichen werden.