Hallo!
Ich habe bei nem Programm nen kleines Problem. Wenn ich bei der 92. Lösung angekommen bin un din den Singlemodus schalte, sprich, mir die Damen einzeln anzeigen lassen will wie sie hingestellt werden, dann macht er dies nicht und schaltet direkt wieder zum neuem Schachbrett. Habe den Quelltext um den es geht angehangen, vllt. kann mir ja jemand helfen.
Wer das komplette Prog haben will bitte per PM melden.
Gruß und Danke...
/** Dieses Programm stellt alle moeglichen Loesungen
* des Achtdamen-Problems dar.
*/
public class EightQueenProblem extends ChessboardDisplay{
/** Der Solver, der die Loesungen beinhaltet. */
private Solver solver;
private int loesung = 0; //zur anzeige wievielte loesung
private int schritte = 0; //schritte kann bis max 8 gehen
private boolean singlemodus = false; //wann sind wir im Singlemodus
/** Konstruktor. Der uebergebene Solver soll
* alle Loesungen des Problems beinhalten.
*/
public EightQueenProblem(Solver solver) {
// Rufe den Konstruktor der Superklasse
// mit der Start-Situation aus
super((BoardOfQueens) solver.get(0));
// Speichere den Solver ab
this.solver = solver;
// Nun schalte zur naechsten Loesung
toNext();
}
/** Schalte zur naechsten Loesung */
private void toNext() {
if (solver.isSolution()) {
if (!singlemodus) { //wenn wir nicht im
//Singlemodus sind
chessboard = (BoardOfQueens) solver.get(solver.getSteps());
loesung++; //zähle lösungen mit
solver.toNext(); //nächste Lösung
} else { //wenn doch Singlemodus
if (schritte < { //zähle Schritte bis 8!
++schritte;
} else { //wenn wir über die 8 Schritte sind
// gib uns die nächste Lösung
solver.toNext();
singlemodus = false;
loesung++;
}
chessboard = (BoardOfQueens) solver.get(schritte);
//fuer das setzen der damen noetig bei singlemodus
}
} else {
Solver solver = new Solver(new BoardOfQueens(),8);
new GameEngine(new EightQueenProblem(solver));
//Wenn die letzte Lösung angezeigt wurde, dann wollen
//wir von vorne beginnen, also gib mir ein neues
//Schachbrett das von vorne beginnt -> gleiche wie in main
}
}
/** Gibt den Text zurueck, der aktuell auf dem
* Feuer-Button stehen soll.
**/
public String getFireLabel() {
return solver.isSolution() ? (singlemodus && schritte < 8?"Nächster Schritt":"Nächste Lösung") : "Von vorne";
// sonst nächste Lösung bzw. nächster Schritt, je nachdem wo wir uns befinden
}
/** Gibt den Namen des Spiels als String zurueck.
**/
public String getGameName() {
return "AchtDamenProblem";
}
/** Signalisert, dass der Feuer-Button gedrueckt wurde.
**/
public void firePressed() {
toNext();
}
/**
* Um in Singlemodus zu wechseln
*/
public void buttonPressed(int row,int col) {
if (!singlemodus) //wenn wir nicht im singlemodus sind
{
singlemodus = true; //dann geh rein
schritte = 0; //fange mit schritt 0 an (0. dame)
chessboard = (BoardOfQueens) solver.get(0); //und zeig uns diese loesung an
}
else { //wenn ich aber im Singlemodus bin
singlemodus = false; //dann verlasse diesen
chessboard = (BoardOfQueens) solver.get(8); //und zeig die lösung mit den 8 damen an
}
}
/** zur Ausgabe, bei welcher
* Lösung bzw. Schritt wir uns befinden
**/
public String getMessages()
{
return "Lösung: " +loesung+" " +(singlemodus?"Schritte: " +schritte:" ");
// Gib Lösung: x aus + wenn wir im Singlemodus sind noch zusätzlich Schritte: x
}
/** Hauptprogramm */
public static void main(String[] args) {
Solver solver = new Solver(new BoardOfQueens(),8);
new GameEngine(new EightQueenProblem(solver));
}
}