Den alten Beitrag lasse ich mal stehen...
Hier jetzt der Link zur fertigen Fassung:
rapidshare.com/files/11872696/Memory.rar.html
_________________________________________________________________________________________________
Hallo,
ich habe angefangen ein Memory Spiel zu programmieren.
Erstmal grundsätzlich wie die ganze Sache aufgebaut ist:
Ich habe mit Gimp 10 "Gegenstände, Symbole etc." gezeichnet. Diese Grafiken liegen als .jpeg vor. Über die Qualität der Dinger wird bitte nicht diskutiert. Sind zum einen nur vorläufig und zum anderen bin ich nicht sonderlich begabt in Kunst!
Diese Grafiken werden als ImageIcons eingeladen und zunächst sortiert in ein Array gepackt. Durch eine Methode zufall() werden sie dann durcheinander gewirbelt und in ein 2. ImageIcon Array gepackt.
Das Spielfeld wird durch ein Array von Buttons dargestellt, genannt btf. Standartmäßig haben diese Buttons das ImageIcon deck.jpeg (Einfach eine neutrale blau weiße Textur). Wird auf einen Button geklickt, wird die Methode spielzug() aufgerufen. Hier kommt nun mein Problem.
Für meine Begriffe gibt es 2 Möglichkeiten das eigentliche Memory Spiel umzusetzen. Einmal die etwas unelegante Version, die aber dem Benutzer ein längeres Betrachten der Bilder ermöglicht. Das würde ich so umsetzen, dass der Benutzer auf 2 Buttons klickt, die entsprechenden ImageIcons angezeigt werden und der Benutzer, wenn er sich die Bilder lange genug eingeprägt hat, durch einen Klick auf "weiter" die ImageIcons wieder verdecken lässt. Natürlich nur, wenn sie nicht gleich sind.
Die 2. Variante wäre, dass der Benutzer wieder 2 Buttons anklickt, die entsprechenden ImageIcons angezeigt werden, nun aber bereits nach einer definierten Zeit automatisch wieder verdeckt werden. Für mich die elegantere Fassung und die an der ich mich versucht habe.
Das Problem ist nun aber, dass bei mir nicht erst das 2. Bild angezeigt wird, gewartet wird und dann wieder verdeckt wird, sondern erst gewartet wird und dann mit einem Schlag auf- und sofort wieder verdeckt wird. Das Bild ist praktisch gar nicht zu sehen.
Ist wahrscheinlich nicht ganz einfach zu verstehen. Deshalb mal meine spielzug Methode ganz ausführlich kommentiert:
Ich hoffe das hilft und verdeutlicht wo das Problem liegt. Bei Bedarf kann ich auch mal die ganze .java Datei hochladen. Ist aber alles noch etwas provisorisch!
Vielen Dank!
Hier jetzt der Link zur fertigen Fassung:
rapidshare.com/files/11872696/Memory.rar.html
_________________________________________________________________________________________________
Hallo,
ich habe angefangen ein Memory Spiel zu programmieren.
Erstmal grundsätzlich wie die ganze Sache aufgebaut ist:
Ich habe mit Gimp 10 "Gegenstände, Symbole etc." gezeichnet. Diese Grafiken liegen als .jpeg vor. Über die Qualität der Dinger wird bitte nicht diskutiert. Sind zum einen nur vorläufig und zum anderen bin ich nicht sonderlich begabt in Kunst!
Diese Grafiken werden als ImageIcons eingeladen und zunächst sortiert in ein Array gepackt. Durch eine Methode zufall() werden sie dann durcheinander gewirbelt und in ein 2. ImageIcon Array gepackt.
Das Spielfeld wird durch ein Array von Buttons dargestellt, genannt btf. Standartmäßig haben diese Buttons das ImageIcon deck.jpeg (Einfach eine neutrale blau weiße Textur). Wird auf einen Button geklickt, wird die Methode spielzug() aufgerufen. Hier kommt nun mein Problem.
Für meine Begriffe gibt es 2 Möglichkeiten das eigentliche Memory Spiel umzusetzen. Einmal die etwas unelegante Version, die aber dem Benutzer ein längeres Betrachten der Bilder ermöglicht. Das würde ich so umsetzen, dass der Benutzer auf 2 Buttons klickt, die entsprechenden ImageIcons angezeigt werden und der Benutzer, wenn er sich die Bilder lange genug eingeprägt hat, durch einen Klick auf "weiter" die ImageIcons wieder verdecken lässt. Natürlich nur, wenn sie nicht gleich sind.
Die 2. Variante wäre, dass der Benutzer wieder 2 Buttons anklickt, die entsprechenden ImageIcons angezeigt werden, nun aber bereits nach einer definierten Zeit automatisch wieder verdeckt werden. Für mich die elegantere Fassung und die an der ich mich versucht habe.
Das Problem ist nun aber, dass bei mir nicht erst das 2. Bild angezeigt wird, gewartet wird und dann wieder verdeckt wird, sondern erst gewartet wird und dann mit einem Schlag auf- und sofort wieder verdeckt wird. Das Bild ist praktisch gar nicht zu sehen.
Ist wahrscheinlich nicht ganz einfach zu verstehen. Deshalb mal meine spielzug Methode ganz ausführlich kommentiert:
Code:
public void spielzug(int x, int y)
{
int i; // Variable für meine Warteschleife
btf[x][y].setIcon(ii[x][y]); // Hier wird dem Button das entsprechende Icon hinzugefügt
if (zug == 1) // Prüfung, ob das erste oder 2. Kärtchen umgedreht wird
{
zug++;
var1 = x; // Die Werte von x und y müssen gespeichert werden, damit man nach dem 2. Kärtchen
var2 = y; // umdrehen vergleichen kann.
}
else if (btf[x][y] != btf[var1][var2]) // Die else if Anweisung ist nötig, damit der Benutzer nicht 2 mal auf den
// gleichen Button klickt und dies als gleiche Karte gezählt wird
{
if (ii[x][y] == ii[var1][var2]) // Wenn die beiden Karten gleich sind, dann:
{
i = 0;
while (i < 100000000) // Warteschleife, die nicht funktioniert bzw. vor dem ersten Schritt ausgeführt
{ // wird
i++;
}
btf[x][y].setIcon(leer); // Icons beider Buttons werden geleert und Buttons abgeschaltet
btf[var1][var2].setIcon(leer);
btf[x][y].setEnabled(false);
btf[var1][var2].setEnabled(false);
}
else
{
i = 0;
while (i < 100000000)
{
i++;
}
btf[x][y].setIcon(deck); // Kärtchen werden wieder verdeckt
btf[var1][var2].setIcon(deck);
}
zug = 1;
var1 = var2 = 0;
}
x = y = 0;
}
Ich hoffe das hilft und verdeutlicht wo das Problem liegt. Bei Bedarf kann ich auch mal die ganze .java Datei hochladen. Ist aber alles noch etwas provisorisch!
Vielen Dank!