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.
 

Tarrew

Top Contributor
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 ;)
 

Flowertime

Mitglied
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
 
X

Xyz1

Gast
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 :D ).
 

Flowertime

Mitglied
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
 
X

Xyz1

Gast
Also nochmal eine Frage,
was nützen die Diagonalen bei der bestimmung aller Springerzüge?
Das ist doch Schwachsinn. :)
 

Tarrew

Top Contributor
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. :D

Hat er doch mehrfach, lies beim nächsten Mal einfach besser und gut ist ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Der weise Inder und das Schachbrett Java Basics - Anfänger-Themen 8
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
B Schachbrett Java Basics - Anfänger-Themen 2
I Schachbrett aus beliebigen Strings erstellen Java Basics - Anfänger-Themen 3
J Matrix für Schachbrett Java Basics - Anfänger-Themen 6
P Das Schachbrett - Reis Problem Java Basics - Anfänger-Themen 21
H Schachbrett erkennen Java Basics - Anfänger-Themen 19
J Schachbrett mit Hilfe von while-Schleifen Java Basics - Anfänger-Themen 10
J Schachbrett zeichnen Java Basics - Anfänger-Themen 9
E einfaches Schachbrett generieren Java Basics - Anfänger-Themen 9
P Schachbrett Java Basics - Anfänger-Themen 7
P Schachbrett Spiel Nr. 01 Java Basics - Anfänger-Themen 17
P Schachbrett mit N x N Feldern Java Basics - Anfänger-Themen 11
B Schachbrett Java Basics - Anfänger-Themen 17
D Schachbrett frage Teil2 Java Basics - Anfänger-Themen 15
D Schachbrett frage Java Basics - Anfänger-Themen 3
D schachbrett aufbauen Java Basics - Anfänger-Themen 29
I Springer auf Schachbrett Java Basics - Anfänger-Themen 18
M Schachbrett Java Basics - Anfänger-Themen 31
J Schachbrett Java Basics - Anfänger-Themen 6
B [Java] Schachbrett Frage Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben