281 lines
7.0 KiB
Java
281 lines
7.0 KiB
Java
package backend;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
public class 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() {
|
|
return lNum;
|
|
}
|
|
|
|
public int getHeight() {
|
|
return cNum;
|
|
}
|
|
|
|
public int getTurnNumber() {
|
|
int turnNumber;
|
|
turnNumber=0;
|
|
turnNumber=turnNumber+1;
|
|
return turnNumber;
|
|
}
|
|
|
|
public boolean isTurnWhite() {
|
|
//Divide by 2 and check if rest = 0
|
|
if (getTurnNumber()%2==0) {
|
|
return true;
|
|
}
|
|
else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public void setPiece(PieceType type, boolean isWhite, int x, int y) {
|
|
Piece newPiece= new Piece(type,isWhite,x,y);
|
|
|
|
cells[x][y] = newPiece;
|
|
}
|
|
|
|
public void populateBoard() {
|
|
|
|
final int startWhite = 0;
|
|
final int startBlack = lNum-1;
|
|
|
|
//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
|
|
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 = 0; x < cNum; x++) {
|
|
|
|
setPiece(PieceType.Pawn,true,x,startBlack-1);
|
|
}
|
|
|
|
|
|
for (int x = 0; x < cNum; x++) {
|
|
for(int y=0;y<lNum;y++) {
|
|
if (cells[x][y]==null) {
|
|
System.out.print("blank - ");
|
|
}
|
|
else {
|
|
System.out.print(cells[x][y].getName());
|
|
}
|
|
}
|
|
|
|
System.out.print("\r\n");
|
|
}
|
|
}
|
|
|
|
public void cleanBoard() {
|
|
|
|
for (int y = 0; y < 8; y++) {
|
|
for (int x = 0; x < 8; x++) {
|
|
cells[x][y] = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
public String toString() {
|
|
ArrayList<String> ps=new ArrayList<>();
|
|
for(int y=0;y<lNum;y++) {
|
|
for (int x=0; x<cNum; x++) {
|
|
if(selectedCell!=null) {
|
|
ps.add(selectedCell.isWhite()?"W":"B");
|
|
ps.add(selectedCell.getType().toString());
|
|
}
|
|
else {
|
|
ps.add("--");
|
|
}
|
|
ps.add(" ");
|
|
}
|
|
ps.add("\n");
|
|
}
|
|
return ps.toString();
|
|
}
|
|
|
|
public ArrayList<Piece> getPieces() {
|
|
ArrayList<Piece> pieces = new ArrayList<>();
|
|
|
|
for (int y = 0; y < 8; y++) {
|
|
for (int x = 0; x < 8; x++) {
|
|
if (cells[x][y]!= null) {
|
|
pieces.add(cells[x][y]);
|
|
}
|
|
}
|
|
}
|
|
|
|
return pieces;
|
|
}
|
|
|
|
|
|
public void userTouch(int x, int y) {
|
|
// 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");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public boolean isSelected(int x, int y) {
|
|
//TODO
|
|
return false;
|
|
}
|
|
|
|
//saving feature: "type + iswhite + x + y"
|
|
public String[] toFileRep() {
|
|
ArrayList<String> lines = new ArrayList<>();
|
|
for (int y = 0; y < 8; y++) {
|
|
for (int x = 0; x < 8; x++) {
|
|
Piece piece = cells[x][y];
|
|
if (piece != null) {
|
|
String line = piece.getType() + " " + piece.isWhite() + " " + x + " " + y;
|
|
lines.add(line);
|
|
}
|
|
}
|
|
}
|
|
|
|
return lines.toArray(new String[0]);
|
|
}
|
|
|
|
//loading feature
|
|
public Board(String[] array) {
|
|
this.cNum = 8;
|
|
this.lNum = 8;
|
|
this.cells = new Piece[cNum][lNum];
|
|
this.selectedCell = null;
|
|
|
|
//clean board
|
|
for (int y = 0; y < 8; y++) {
|
|
for (int x = 0; x < 8; x++) {
|
|
cells[x][y] = null;
|
|
}
|
|
}
|
|
|
|
//load pieces
|
|
for (String line : array) {
|
|
String[] tokens = line.trim().split("\\s+");
|
|
if (tokens.length != 4) continue;
|
|
|
|
try {
|
|
PieceType type = PieceType.valueOf(tokens[0]);
|
|
boolean isWhite = Boolean.parseBoolean(tokens[1]);
|
|
int x = Integer.parseInt(tokens[2]);
|
|
int y = Integer.parseInt(tokens[3]);
|
|
|
|
setPiece(type, isWhite, x, y);
|
|
} catch (Exception e) {
|
|
System.err.println("Error parsing line: " + line);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* The following methods require more work ! */
|
|
|
|
public boolean isHighlighted(int x, int y) {
|
|
//TODO
|
|
return false;
|
|
}
|
|
|
|
public void undoLastMove() {
|
|
//TODO
|
|
|
|
}
|
|
|
|
public Board(Board board) {
|
|
//TODO
|
|
|
|
}
|
|
|
|
public void playMove(Move move) {
|
|
//TODO
|
|
|
|
}
|
|
|
|
} |