Hallo,
ich habe es hier schon einmal geschrieben, ich versuche ein von mir in den 90er Jahren in C++ geschriebenes Schachprogramm nach Java zu transferieren. Dabei bin ich heute auf ein Problem gestoßen, das mir sehr rätselhaft erscheint.
Dazu hier zwei Codeschnipsel:
Der Code im oberen Teil wird nach einem Mausklick auf ein Schachfeld ausgeführt. In Zeile 2 wird aus dem Display-Array für die einzelnen Felder die Belegung des angeklickten Feldes geholt. Steht auf diesem Feld eine Figur, wird sie markiert, die Position in lastIndex und die Figur in lastFeld gespeichert.
Wird nun ein weiteres Feld angeklickt, soll die mit dem ersten Klick markierte Figur von ihrem ursprünglichen Platz auf das jetzt angeklickte Feld verschoben werden. Dafür wird in der Zeile 13 die Figur aus dem Display-Array entfernt, in Zeile 14 die Anzeige der Figur gelöscht, in Zeile 15 die Figur im Display-Array eingetragen und in Zeile 16 dann angezeigt.
Das funktioniert alles einwandfrei. Wenn ich aber, wie in Zeile 17 gezeigt, die in lastFeld eingetragene Figur entferne, wird die Figur auch im Display-Array entfernt.
Dazu muss ich sagen, dass der Code für den beschriebenen Vorgang aus der Klasse InOut stammt und das Display-Array in der Klasse CBoard geführt wird. Das Auslesen und Eintragen der Werte aus diesem Array erfolgt über die beiden im unteren Teil gezeigten Methoden.
Wenn ich den Code in Zeile 17 auskommentiere, dann werden die Werte im Display-Array nicht verändert. Warum kommt diese Änderung zustande?
Bevor mich jemand darauf hinweist, dass die Schreibweise meines Codes nicht in allen Fällen den Java Code-Konventionen entspricht, ich weiß. Wenn alle Code übersetzt ist, werde ich das ändern.
Eben sehe ich, dass die von mir angegebenen Zeilennummern nicht angezeigt werden, schade, aber die Kommentare helfen sicherlich auch, sich in dem kurzen Stück zurechtzufinden.
ich habe es hier schon einmal geschrieben, ich versuche ein von mir in den 90er Jahren in C++ geschriebenes Schachprogramm nach Java zu transferieren. Dabei bin ich heute auf ein Problem gestoßen, das mir sehr rätselhaft erscheint.
Dazu hier zwei Codeschnipsel:
Java:
cApp.tfHinweis.setText("");
DISPLAY fld = board.getFeld(i);
int fig = fld.piece;
int col = fld.color;
if (talk.getcolorToPlay() == col) {
if (select < 0 && fig > 0) { // erstmalig Klick auf Figur
select = i;
markFigur(i);
lastIndex = i;
lastFeld = fld;
} else if (lastFeld.piece > 0){ // eine Figur wird gezogen
DISPLAY oldfld = new DISPLAY(0, 0, false);
board.setFeld(lastIndex, oldfld); // Ausgangsfeld leeren
PrintPiece(lastIndex, 0, 0);
board.setFeld(i, lastFeld); // Figur auf Zielfeld setzen
PrintPiece(i, lastFeld.piece, lastFeld.color);
lastFeld.piece = 0; // setzt auch piece im Display-Array auf '0'
select = -1;
}
} else {
cApp.tfHinweis.setText(" Eingabefehler");
}
******************************
public DISPLAY getFeld(int i) {
return Display[i];
}
public void setFeld(int i, DISPLAY f) {
Display[i] = f;
}
Wird nun ein weiteres Feld angeklickt, soll die mit dem ersten Klick markierte Figur von ihrem ursprünglichen Platz auf das jetzt angeklickte Feld verschoben werden. Dafür wird in der Zeile 13 die Figur aus dem Display-Array entfernt, in Zeile 14 die Anzeige der Figur gelöscht, in Zeile 15 die Figur im Display-Array eingetragen und in Zeile 16 dann angezeigt.
Das funktioniert alles einwandfrei. Wenn ich aber, wie in Zeile 17 gezeigt, die in lastFeld eingetragene Figur entferne, wird die Figur auch im Display-Array entfernt.
Dazu muss ich sagen, dass der Code für den beschriebenen Vorgang aus der Klasse InOut stammt und das Display-Array in der Klasse CBoard geführt wird. Das Auslesen und Eintragen der Werte aus diesem Array erfolgt über die beiden im unteren Teil gezeigten Methoden.
Wenn ich den Code in Zeile 17 auskommentiere, dann werden die Werte im Display-Array nicht verändert. Warum kommt diese Änderung zustande?
Bevor mich jemand darauf hinweist, dass die Schreibweise meines Codes nicht in allen Fällen den Java Code-Konventionen entspricht, ich weiß. Wenn alle Code übersetzt ist, werde ich das ändern.
Eben sehe ich, dass die von mir angegebenen Zeilennummern nicht angezeigt werden, schade, aber die Kommentare helfen sicherlich auch, sich in dem kurzen Stück zurechtzufinden.