Ich habe jetzt für jede Schachfigur eine Klasse erstellt, die u.a alle möglichen Züge der Figur bestimmt.
Dann füge ich alle Figuren zu einer Liste und kann für jede Brettposition alle möglichen Züge bestimmen.
Ist das so eine gute und schnelle Vorgehensweise? Hat wer einen anderen Vorschlag? Vorher habe ich das Brett immer komplett abgelaufen und habe nach den einzelnen Figuren gesucht, wodurch die Zuggenerierung sehr langsam wurde.
Dann füge ich alle Figuren zu einer Liste und kann für jede Brettposition alle möglichen Züge bestimmen.
Ist das so eine gute und schnelle Vorgehensweise? Hat wer einen anderen Vorschlag? Vorher habe ich das Brett immer komplett abgelaufen und habe nach den einzelnen Figuren gesucht, wodurch die Zuggenerierung sehr langsam wurde.
Java:
abstract class Figur {
public int id; // Darstellung der Figur
public Feld position;
public Figur(int id, Feld position) {
this.id = id;
this.position = position;
}
public boolean inBrett(Feld position) {
return (position.x >= 0 && position.y >= 0 && position.x < 8 && position.y < 8);
}
public abstract ArrayList<Zug> möglicheZüge();
public abstract ArrayList<Feld> bedrohteFelder();
}
class König extends Figur {
private Feld position;
private int id;
private final Feld[] königsZug = {new Feld(-1,-1), new Feld(-1,0), new Feld(-1, 1), new Feld(0, -1),
new Feld(0, 1), new Feld(1, -1), new Feld(1, 0), new Feld(1, 1)};
public König(int id, Feld position) {
super(id, position);
this.id = id;
this.position = position;
}
@Override
public ArrayList<Zug> möglicheZüge() {
ArrayList<Zug> züge = new ArrayList<>();
for(int z = 0; z < 8; z++) {
Feld ziel = new Feld(position.x + königsZug[z].x, position.y + königsZug[z].y);
if(inBrett(ziel)) züge.add(new Zug(id, position, ziel));
}
return züge;
}
@Override
public ArrayList<Feld> bedrohteFelder() {
ArrayList<Feld> bedroht = new ArrayList<>();
for(int z = 0; z < 8; z++) {
Feld ziel = new Feld(position.x + königsZug[z].x, position.y + königsZug[z].y);
if(inBrett(ziel)) bedroht.add(ziel);
}
return bedroht;
}
}
...
class Brett {
public int[][] brett = new int[8][8];
public int[][] kopie;
...
}