hans_maies
Neues Mitglied
Hallo
ich bin gerade dabei dieses Spiel in Java zu programmieren:
Dabei komme ich an einer Stelle nicht weiter. Es geht darum, die benachbarten Farben des angeklickten Feldes zu markieren. Ich habe es rekursiv versucht, aber es klappt nicht so wie ich es mir vorstelle. Rekursiv einen Weg durch ein Labyrinth zu suchen ist die eine Sache, ein gleichfarbiges Feld zu markieren anscheinend etwas ganz anderes.
- mein Spielfeld ist gespeichert in einem zweidimensionalen Array spielfeld[][]
- jedes Feld im Array hat eine fest definierte Farbe (getColor) und ist entweder ausgewählt oder nicht (isSelected + setSelected)
Idee:
Ich suche vom aktuellen Feld in 4 Richtungen (oben, unten, rechts, links) nach einem (unmarkierten) gleichfarbigen Feld. Wird eines gefunden, markiere ich es und suche von diesem Feld aus weiter.
Wird keines gefunden gehe zurück zum letzen Feld und suche dort weiter.
Hier die Methode, die ich zum auswählen aufrufe, übergeben werden die Koordinaten des angeklickten Feldes in spielfeld[][]
Mir ist klar, dass diese Methode momentan auf jeden Fall eine Out-of-Bounds exception produziert wenn das zu markierende Feld bis an die äußere Reihe des Spielfelds reicht. Aber auch wenn ich ein Spielfeld mit einem andersfarbigen Rahmen erzeuge werden nicht alle Felder markiert.
Also wo liegt mein (gedanklicher) Fehler?
Gruß
Hans
ich bin gerade dabei dieses Spiel in Java zu programmieren:
Dabei komme ich an einer Stelle nicht weiter. Es geht darum, die benachbarten Farben des angeklickten Feldes zu markieren. Ich habe es rekursiv versucht, aber es klappt nicht so wie ich es mir vorstelle. Rekursiv einen Weg durch ein Labyrinth zu suchen ist die eine Sache, ein gleichfarbiges Feld zu markieren anscheinend etwas ganz anderes.
- mein Spielfeld ist gespeichert in einem zweidimensionalen Array spielfeld[][]
- jedes Feld im Array hat eine fest definierte Farbe (getColor) und ist entweder ausgewählt oder nicht (isSelected + setSelected)
Idee:
Ich suche vom aktuellen Feld in 4 Richtungen (oben, unten, rechts, links) nach einem (unmarkierten) gleichfarbigen Feld. Wird eines gefunden, markiere ich es und suche von diesem Feld aus weiter.
Wird keines gefunden gehe zurück zum letzen Feld und suche dort weiter.
Hier die Methode, die ich zum auswählen aufrufe, übergeben werden die Koordinaten des angeklickten Feldes in spielfeld[][]
Code:
public void select(int x, int y){
if(this.spielfeld[x-1][y].getColor()==this.spielfeld[x][y].getColor() &&
this.spielfeld[x-1][y].isSelected()==false){
this.spielfeld[x-1][y].setSelected(true);
select(x-1,y);
}
else {
if(this.spielfeld[x][y+1].getColor()==this.spielfeld[x][y].getColor() &&
this.spielfeld[x][y+1].isSelected()==false){
//this.spielfeld[x][y+1].setSelected(true);
select(x,y+1);
}
else {
if(this.spielfeld[x+1][y].getColor()==this.spielfeld[x][y].getColor() &&
this.spielfeld[x+1][y].isSelected()==false){
this.spielfeld[x+1][y].setSelected(true);
select(x+1,y);
}
else {
if(this.spielfeld[x][y-1].getColor()==this.spielfeld[x][y].getColor() &&
this.spielfeld[x][y-1].isSelected()==false){
this.spielfeld[x][y-1].setSelected(true);
select(x,y-1);
}
else {return;}
}}}}
Also wo liegt mein (gedanklicher) Fehler?
Gruß
Hans