Undo works for the castling, when you save you can use undo up to the

saved move.

Merge branch 'master' of
https://gitarero.ecam.fr/aurele.wittke/OOP_1A5_Project
This commit is contained in:
edwin 2025-05-17 21:55:01 +02:00
parent 03ea5b41eb
commit e003f63b4b
1 changed files with 184 additions and 26 deletions

View File

@ -161,6 +161,55 @@ public class Board {
outputString+= "1";
}
outputString += "\n";
if (this.kingWMoved == false) {
outputString+="0";
}
else {
outputString+= "1";
}
if (this.rookLWMoved == false) {
outputString+="0";
}
else {
outputString+= "1";
}
if (this.rookRWMoved == false) {
outputString+="0";
}
else {
outputString+= "1";
}
if (this.kingBMoved == false) {
outputString+="0";
}
else {
outputString+= "1";
}
if (this.rookLBMoved == false) {
outputString+="0";
}
else {
outputString+= "1";
}
if (this.rookRBMoved == false) {
outputString+="0";
}
else {
outputString+= "1";
}
if (this.castling == false) {
outputString+="0";
}
else {
outputString+= "1";
}
if (this.castlingDone == false) {
outputString+="0";
}
else {
outputString+= "1";
}
outputString += "\n";
return outputString;
}
@ -306,12 +355,13 @@ public class Board {
selection = true;
}
return selection;
}
/* saving-loading feature :*/
public String[] toFileRep() {
String[] saveFile = new String[10]; // creation of the string array which will be the one returned
String[] saveFile = new String[11]; // creation of the string array which will be the one returned
String actualBoard = this.toString();
int nbLine = 0;
saveFile[0] = "";
@ -327,6 +377,7 @@ public class Board {
saveFile[8]="";
saveFile[8] += this.turnNumber;
saveFile[9]="";
saveFile[10]="";
if (this.lastTurnPawnTwo == false) {
saveFile[9]+= "0";
}
@ -341,6 +392,55 @@ public class Board {
else {
saveFile[9]+= "1";
}
if (this.kingWMoved == false) {
saveFile[10]+="0";
}
else {
saveFile[10]+= "1";
}
if (this.rookLWMoved == false) {
saveFile[10]+="0";
}
else {
saveFile[10]+= "1";
}
if (this.rookRWMoved == false) {
saveFile[10]+="0";
}
else {
saveFile[10]+= "1";
}
if (this.kingBMoved == false) {
saveFile[10]+="0";
}
else {
saveFile[10]+= "1";
}
if (this.rookLBMoved == false) {
saveFile[10]+="0";
}
else {
saveFile[10]+= "1";
}
if (this.rookRBMoved == false) {
saveFile[10]+="0";
}
else {
saveFile[10]+= "1";
}
if (this.castling == false) {
saveFile[10]+="0";
}
else {
saveFile[10]+= "1";
}
if (this.castlingDone == false) {
saveFile[10]+="0";
}
else {
saveFile[10]+= "1";
}
System.out.println(saveFile[10]);
return saveFile;
}
@ -349,6 +449,9 @@ public class Board {
this.lineNum = 8;
x = -1;
y = -1;
previousBoard = new ArrayList<>();
String originBoard = array[0] + "\n" + array[1] + "\n" +array[2] + "\n" +array[3] + "\n" + array[4] + "\n" + array[5] + "\n" +array[6] + "\n" +array[7] + "\n" +array[8] + "\n" + array[9] + "\n" +array[10] + "\n" ;;
previousBoard.add(originBoard);
pieces = new ArrayList<>();
for(int i=0; i<8;i++) { // this will be the Y coordinate
for(int j=0; j<8;j++) { // this will be the X coordinate
@ -368,10 +471,7 @@ public class Board {
}
}
turnNumber = Integer.parseInt(array[8]);
System.out.println(turnNumber);
int turn = this.getTurnNumber();
System.out.println(turn);
if(array[9].charAt(0)==0) {
if(array[9].charAt(0) == '0' ) {
lastTurnPawnTwo = false;
}
else {
@ -379,21 +479,60 @@ public class Board {
}
xTwo = Character.getNumericValue(array[9].charAt(1));
yTwo = Character.getNumericValue(array[9].charAt(2));
if(array[9].charAt(3)==0) {
if(array[9].charAt(3) == '0') {
enPassant = false;
}
else {
enPassant = true;
}
enPassant = false;
kingWMoved = false;
kingBMoved = false;
rookLWMoved = false;
rookRWMoved = false;
rookLBMoved = false;
rookRBMoved = false;
castling = false;
castlingDone = false;
if (array[10].charAt(0) == '0') {//king white
this.kingWMoved = false;
}
else {
this.kingWMoved = true;
}
if (array[10].charAt(1) == '0') { //rook left white
this.rookLWMoved = false;
}
else {
this.rookLWMoved = true;
}
if (array[10].charAt(2) == '0') { // rook white right
this.rookRWMoved = false;
}
else {
this.rookRWMoved = true;
}
if (array[10].charAt(3) == '0') { // king black
this.kingBMoved = false;
}
else {
this.kingBMoved = true;
}
if (array[10].charAt(4) == '0') { // black rook left
this.rookLBMoved = false;
}
else {
this.rookLBMoved = true;
}
if (array[10].charAt(5) == '0') { // black rook right
this.rookRBMoved = false;
}
else {
this.rookRBMoved = true;
}
if (array[10].charAt(6) == '0') { // castling
this.castling = false;
}
else {
this.castling = true;
}
if (array[10].charAt(7) == '0') { // castling done
this.castlingDone = false;
}
else {
this.castlingDone = true;
}
}
/* The following methods require more work ! */
@ -771,19 +910,22 @@ public class Board {
}
public void undoLastMove() {
if(turnNumber == 0) {
String lastBoard = previousBoard.get(turnNumber); // we have a String but we need a String[] in order to use the constructer
String[] oldBoard = new String[10];
this.x = -1;
this.y = -1;
int sizeSave = previousBoard.size();
if(sizeSave == 1) {
String lastBoard = previousBoard.get(0); // we have a String but we need a String[] in order to use the constructer
String[] oldBoard = new String[11];
boolean complete = false;
int indexLine=0;
int indexColumn=0;
for(int i=0; i<10; i++) {
for(int i=0; i<11; i++) {
oldBoard[i] = "";
}
while (complete == false) {
if (lastBoard.charAt(indexColumn) == '\n') {
indexLine+=1;
if (indexLine == 10) {
if (indexLine == 11) {
complete= true;
}
}
@ -798,21 +940,29 @@ public class Board {
this.yTwo=undo.yTwo;
this.enPassant=undo.enPassant;
this.lastTurnPawnTwo=undo.lastTurnPawnTwo;
this.kingBMoved=undo.kingBMoved;
this.kingWMoved=undo.kingWMoved;
this.rookLBMoved=undo.rookLBMoved;
this.rookRBMoved=undo.rookRBMoved;
this.rookLWMoved=undo.rookLWMoved;
this.rookRWMoved=undo.rookRWMoved;
this.castling=undo.castling;
this.castlingDone=undo.castlingDone;
}
if (turnNumber != 0 ) {
if (sizeSave != 1 ) {
turnNumber -= 1;
String lastBoard = previousBoard.get(turnNumber); // we have a String but we need a String[] in order to use the constructer
String[] oldBoard = new String[10];
String lastBoard = previousBoard.get(sizeSave-2); // we have a String but we need a String[] in order to use the constructer
String[] oldBoard = new String[11];
boolean complete = false;
int indexLine=0;
int indexColumn=0;
for(int i=0; i<10; i++) {
for(int i=0; i<11; i++) {
oldBoard[i] = "";
}
while (complete == false) {
if (lastBoard.charAt(indexColumn) == '\n') {
indexLine+=1;
if (indexLine == 10) {
if (indexLine == 11) {
complete= true;
}
}
@ -827,7 +977,15 @@ public class Board {
this.yTwo=undo.yTwo;
this.enPassant=undo.enPassant;
this.lastTurnPawnTwo=undo.lastTurnPawnTwo;
previousBoard.remove(turnNumber+1);
this.kingBMoved=undo.kingBMoved;
this.kingWMoved=undo.kingWMoved;
this.rookLBMoved=undo.rookLBMoved;
this.rookRBMoved=undo.rookRBMoved;
this.rookLWMoved=undo.rookLWMoved;
this.rookRWMoved=undo.rookRWMoved;
this.castling=undo.castling;
this.castlingDone=undo.castlingDone;
previousBoard.remove(sizeSave-1);
}
}