diff --git a/src/backend/Board.java b/src/backend/Board.java index 547cafe..44fc9fc 100644 --- a/src/backend/Board.java +++ b/src/backend/Board.java @@ -4,14 +4,17 @@ import java.util.ArrayList; public class Board { - private int cNum; - private int lNum; - private Piece newPiece; - private Piece[][]Board; + private int cNum; // nb de colonnes du damier + private int lNum; // nb de ligne du damier + private Piece[][] cells; + private Piece selectedCell; + public Board(int colNum, int lineNum) { cNum=colNum; lNum=lineNum; + cells = new Piece[cNum][lNum]; // creation du tableau de pieces + selectedCell=null; } public int getWidth() { @@ -40,45 +43,64 @@ public class Board { } public void setPiece(PieceType type, boolean isWhite, int x, int y) { - this.newPiece= new Piece(x,y,type,isWhite); + Piece newPiece= new Piece(type,isWhite,x,y); + + cells[x][y] = newPiece; } public void populateBoard() { - //Black pieces populating - Board[1][1] = new Piece(1,1,PieceType.Rook,false); - Board[2][1] = new Piece(2,1,PieceType.Knight,false); - Board[3][1] = new Piece(3,1,PieceType.Bishop,false); - Board[4][1] = new Piece(4,1,PieceType.Queen,false); - Board[7][1] = new Piece(5,1,PieceType.King,false); - Board[6][1] = new Piece(6,1,PieceType.Bishop,false); - Board[8][1] = new Piece(7,1,PieceType.Knight,false); - Board[9][1] = new Piece(8,1,PieceType.Rook,false); + final int startWhite = 0; + final int startBlack = lNum-1; - for (int x = 1; x < 8; x++) { - Board[x][2] = new Piece(x,2,PieceType.Pawn,false); + //Black pieces populating + setPiece(PieceType.Rook,false,0,startWhite); + setPiece(PieceType.Knight,false, 1,startWhite); + setPiece(PieceType.Bishop,false,2,startWhite); + setPiece(PieceType.Queen,false,3,startWhite); + setPiece(PieceType.King,false,4,startWhite); + setPiece(PieceType.Bishop,false,5,startWhite); + setPiece(PieceType.Knight,false,6,startWhite); + setPiece(PieceType.Rook,false,7,startWhite); + + for (int x = 0; x < cNum; x++) { + setPiece(PieceType.Pawn,false,x,startWhite+1); } //White pieces populating - Board[1][8] = new Piece(1,8,PieceType.Rook,true); - Board[2][8] = new Piece(2,8,PieceType.Knight,true); - Board[3][8] = new Piece(3,8,PieceType.Bishop,true); - Board[4][8] = new Piece(4,8,PieceType.Queen,true); - Board[7][8] = new Piece(5,8,PieceType.King,true); - Board[6][8] = new Piece(6,8,PieceType.Bishop,true); - Board[8][8] = new Piece(7,8,PieceType.Knight,true); - Board[9][8] = new Piece(8,8,PieceType.Rook,true); + setPiece(PieceType.Rook,true,0,startBlack); + setPiece(PieceType.Knight,true,1,startBlack); + setPiece(PieceType.Bishop,true,2,startBlack); + setPiece(PieceType.Queen,true,3,startBlack); + setPiece(PieceType.King,true,4,startBlack); + setPiece(PieceType.Bishop,true,5,startBlack); + setPiece(PieceType.Knight,true,6,startBlack); + setPiece(PieceType.Rook,true,7,startBlack); - for (int x = 1; x < 8; x++) { + for (int x = 0; x < cNum; x++) { - Board[x][7] = new Piece(x,7,PieceType.Pawn,true); + setPiece(PieceType.Pawn,true,x,startBlack-1); + } + + + for (int x = 0; x < cNum; x++) { + for(int y=0;y getPieces() { ArrayList pieces = new ArrayList<>(); - for (int y = 1; y < 7; y++) { - for (int x = 1; x < 7; x++) { - if (Board[x][y] != null) { - pieces.add(Board[x][y]); + for (int y = 0; y < 8; y++) { + for (int x = 0; x < 8; x++) { + if (cells[x][y]!= null) { + pieces.add(cells[x][y]); } } } @@ -104,7 +126,65 @@ public class Board { public void userTouch(int x, int y) { - //TODO + // on teste si une cellule est deja selectionne + if(this.selectedCell !=null) { + System.out.println(" cellule deja selectionne : " + this.selectedCell.getName()); + //la nouvelle case touchee est vide ? + if(cells[x][y] ==null) { + // je deplace la pièce selectionnee + //TODO VERIFIER SI LA COULEUR DE LA PIECE EXISTANTE EST DIFFERENTE DE CELLE DU JOUEUR + //TODO A REMPLACER PAR UNE FONCTION MOVE + cells[x][y] = new Piece( + this.selectedCell.getType(), + this.selectedCell.isWhite(), + x, + y + + ); + // je supprime la pièce selectionne pour liberer la case + cells[this.selectedCell.getX()][this.selectedCell.getY()] = null; + //je deselectionne la pièce + this.selectedCell=null; + + } else { + // je teste si la nouvelle case cochée est la meme que celle déjà coche + if(this.cells[x][y].getX()==this.selectedCell.getX() && this.cells[x][y].getY() == this.selectedCell.getY()) { + System.out.println("il a clique sur la meme cellule, je deselectionne" ); + this.selectedCell =null; + } else { + // je deplace la deplace pièce et remplace la pièce existante + //TODO A REMPLACER PAR UNE FONCTION MOVE + cells[x][y] = new Piece( + this.selectedCell.getType(), + this.selectedCell.isWhite(), + x, + y + + ); + // je supprime la pièce selectionne pour liberer la case + cells[this.selectedCell.getX()][this.selectedCell.getY()] = null; + //je deselectionne la pièce + this.selectedCell=null; + } + + } + + } else { + // aucune cellule deja selectionnée, + System.out.println("----- aucune cellule selectionnee" ); + + //a-t-il selectionné une pièce ? + // TODO il faut verifier que c'est une pièce du bon joueur (bonne couleur) + if(cells[x][y] !=null){ + //il a selectionné une pièce, elle devient is selected + this.selectedCell = this.cells[x][y]; + System.out.println("nouvelle cellule selectionne" + cells[x][y].getName()); + + } else { + //rien il a selectionne vide + System.out.println("il a clique sur cellule vide"); + } + } } diff --git a/src/backend/Game.java b/src/backend/Game.java index 6e27d1c..4e85363 100644 --- a/src/backend/Game.java +++ b/src/backend/Game.java @@ -31,6 +31,10 @@ public class Game extends Thread { public int getHeight() { return board.getHeight(); } + + public void setPiece(PieceType type, boolean isWhite, int x, int y) { + this.newPiece= new Piece(type,isWhite, x,y); + } public void run() { while(true) { @@ -65,10 +69,7 @@ public class Game extends Thread { board.userTouch(x, y); } - } - - public void setPiece(boolean isWhite, PieceType type, int x, int y) { - this.newPiece = new Piece(x, y,type, isWhite); + } public String[] getFileRepresentation() { diff --git a/src/backend/Piece.java b/src/backend/Piece.java index 05dc846..d26487c 100644 --- a/src/backend/Piece.java +++ b/src/backend/Piece.java @@ -7,7 +7,7 @@ public class Piece { private PieceType type; private boolean color; - public Piece(int xP, int yP, PieceType type_P, boolean color_P) { + public Piece(PieceType type_P, boolean color_P, int xP, int yP) { x = xP; y = yP; type = type_P; @@ -29,5 +29,13 @@ public class Piece { public boolean isWhite() { return color; } + public String getName() { + if(color) { + return type.getSummary().concat("W - "); + } + else { + return type.getSummary().concat("B - "); + } + } } \ No newline at end of file diff --git a/src/windowInterface/JPanelChessBoard.java b/src/windowInterface/JPanelChessBoard.java index 78a68de..a50d762 100644 --- a/src/windowInterface/JPanelChessBoard.java +++ b/src/windowInterface/JPanelChessBoard.java @@ -61,7 +61,7 @@ public class JPanelChessBoard extends JPanel { int y = (me.getY()*myGame.getHeight())/getHeight(); if(pieceAdderMode) { //TODO - myGame.setPiece(selectedPieceIsWhite,selectedPieceType, x, y); + myGame.setPiece(selectedPieceType, selectedPieceIsWhite, x, y); pieceAdderMode = false; } else { myGame.clickCoords(x,y);