Best Practice Schachbrett Läufer

Flowertime

Mitglied
Hallo Leute,
Ich hab ein kleines Problem mit meinem Läufer bei einer Übung die ich zu einem Schachbrett erledigen soll
Java:
public Brett gibErlaubteFelder()
  {
    Brett brett = new Brett();
    for (int i = 1; i <= 8; i++)
    {
      brett.markiereFeld(i, y);
      brett.markiereFeld(x, i);
    }
    return brett;
  }

Ich stehe einfach auf dem Schlauch und das ist echt frustrierend. Also in der Methode gibErlaubteFelder() erstell ich ein Mehrdimensionales Boolean Array der Größe 8 8. Ich markiere mit der Methode alle Felder, die die jeweilige Figur betreten kann, mit einem x. Die Methode oben funktioniert so wie sie ist für den Turm. Ich soll sie aber für einen Läufer umschreiben. Was ich bei besten willen nicht hinkriege. Ich wäre für ein paar produktive Tipps dankbar. Keine Lösungen da ich es selbst lösen möchte.
 
Ich gehe mal davon aus, dass x und y die Position der Figur auf dem Brett darstellt. Aber hier wäre es hilfreich mehr von deinem Code zu sehen, damit man den Zusammenhang besser sieht.

Ich würde das demnach in 4 Unterteile aufteilen. Zuerst alle Felder links diagonal nach oben, dann links diagonal nach unten und so weiter. Die Reihenfolge ist hier egal.

Nach oben links kommt man ja zum Beispiel, in dem man x und y jeweils um eins dekrementiert.
Das ganze macht man dann so lange, bis man an den Rand stößt.

Mal als kleines Beispiel:
Java:
boolean[][] erlaubteFelder = new boolean[8][8];
int x = 4, y = 3;

//gehe diagonal nach oben links
for (int x2 = x, y2 = y; x2 >= 0 && y2 >= 0; x2--, y2--) {
    erlaubteFelder[y2][x2] = true;
}

Denke, die anderen drei Fälle kannst du daraus eventuell folgern 😉
 
Okay ich habe jetzt eine Diagonale Linie von Oben Rechts nach unten Links
Java:
int x1;
 int y1;
    Brett brett = new Brett();
    for ( x1 = x, y1 = y; x1 > 0 && y1 > 0; x1--, y1--) 
    {
        brett.markiereFeld(x1, y1);
    }
  
    for ( x1 = x, y1 = y; x1 <= 8 && y1 <= 8; x1++, y1++) 
    {
        brett.markiereFeld(x1, y1);
    }
Häng grad noch an der anderen Diagonalen
 
Also ich habe nur drübergelesen, aber alle Diagonalen processen/calculieren geht eigentlich anders, einfacher, besserer. 🙂

Einfach mal danach googlen (bin ich jetzt etwas faul).

Sind denn Springerzüge im nächsten Zug oder aller nachfolgenden Züge gesucht?

Und hier googlen: Graph aller möglichen Springerzüge (wieder bin ich etwas faul 😀 ).
 
Also ich habe es geschafft. Ist wirklich nicht schön. Aber es Funktioniert. das ist schon viel Wert. Vielen Dank.
Java:
 public Brett gibErlaubteFelder()
  {
    int x1;
    int y1;
    Brett brett = new Brett();
    for ( x1 = x, y1 = y; x1 > 0 && y1 > 0; x1--, y1--) 
    {
        brett.markiereFeld(x1, y1);
    }
    for ( x1 = x, y1 = y; x1 < 8 && y1 <= 8; x1++, y1++) 
    {
        brett.markiereFeld(x1, y1);
    }
    for ( x1 = x, y1 = y; x1 >0 && y1 <= 8; x1--, y1++) 
    {
        brett.markiereFeld(x1, y1);
    }
    for ( x1 = x, y1 = y; x1 <=8 && y1 < 8; x1++, y1--) 
    {
        brett.markiereFeld(x1, y1);
    }
Außer wenn ich null eingebe dann kommt eine Fehlermeldung. Aber des krieg ich auch noch hin
 
Also nochmal eine Frage,
was nützen die Diagonalen bei der bestimmung aller Springerzüge?
Das ist doch Schwachsinn. 🙂
 
Hallo Leute,
Ich hab ein kleines Problem mit meinem Läufer bei einer Übung die ich zu einem Schachbrett erledigen soll


Ich stehe einfach auf dem Schlauch und das ist echt frustrierend. Also in der Methode gibErlaubteFelder() erstell ich ein Mehrdimensionales Boolean Array der Größe 8 8. Ich markiere mit der Methode alle Felder, die die jeweilige Figur betreten kann, mit einem x. Die Methode oben funktioniert so wie sie ist für den Turm. Ich soll sie aber für einen Läufer umschreiben. Was ich bei besten willen nicht hinkriege. Ich wäre für ein paar produktive Tipps dankbar. Keine Lösungen da ich es selbst lösen möchte.

Dann solltest du vielleicht auch schreiben, dass es nicht um den Springer geht ... :
http://introcs.cs.princeton.edu/java/23recursion/Queens.java.html
(Ab isConsistent )
@Thallius : Große Fressen würd ich nicht riskieren. 😀

Hat er doch mehrfach, lies beim nächsten Mal einfach besser und gut ist 😉
 

Zurück
Oben