1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| public static class Coup {
private String couleur;
private Piece piecejouee;
private Position depart, arrivee;
private Piece pieceprise;
public String getCouleur() {
return couleur;
}
public Piece getPieceJouee() {
return piecejouee;
}
public Position getDepart() {
return depart;
}
public Position getArrivee() {
return arrivee;
}
public Piece getPiecePrise() {
return pieceprise;
}
public byte[] encode(){
byte[] data=new byte[7];// on créé un tableau de 7 octets
data[0]=getCodeCouleur(FenetreJeu.COULEUR_JOUEUR_BLANC.equals(couleur));//couleur
data[1]=getCodePiece(piecejouee); // code piece
data[2]=getCode(depart.getColonne()); // colonne départ
data[3]=getCode(depart.getLigne()); // ligne départ
data[4]=getCode(arrivee.getColonne()); // colonne arrivée
data[5]=getCode(arrivee.getLigne()); // ligne arrivée
data[6]=getCodePiece(pieceprise); // code piece
return data;
}
private byte getCodeCouleur(boolean blanc) {
return (byte) (blanc?1:0); // 1 = blanc, 0 = noir
}
private byte getCode(int value) {
return (byte) value;
}
private byte getCodePiece(Piece piecejouee) {
if ( piecejouee instanceof Roi ) {
return 'R';
}
else if ( piecejouee instanceof Reine ) {
return 'D';
}
else if ( piecejouee instanceof Tour ) {
return 'T';
}
else if ( piecejouee instanceof Fou ) {
return 'F';
}
else if ( piecejouee instanceof Cavalier ) {
return 'C';
}
else if ( piecejouee instanceof Pion ) {
return 'P';
}
return 0; // pas de pièce
}
public void decode(byte[] data, Case[][] plateau) throws IOException {
// on vérifie le tableau data
if ( data!=null && data.length>0 && data.length<8 ) {
couleur=decodeToCouleur(data[0]);
depart=new Position(decode(data[2]),decode(data[3]));
arrivee=new Position(decode(data[4]),decode(data[5]));
piecejouee=decodePiece(data[1],depart,data[0],plateau);
pieceprise=decodePiece(data[6],arrivee,1-data[0],plateau);
}
else {
throw new IOException();
}
}
private Piece decodePiece(byte code, Position position, int couleur, Case[][] plateau) throws IOException {
Piece piece = plateau[position.getColonne()][position.getLigne()].getPiece();
byte codepiece = getCodePiece(piece);
byte codecouleur = getCodeCouleur(couleur==1);
if (codepiece==code && (codepiece==0 || codecouleur==getCodeCouleur(FenetreJeu.COULEUR_JOUEUR_BLANC.equals(piece.getCouleur())))) return piece;
throw new IOException();
}
private int decode(byte value) throws IOException {
if ( value>=0 && value<8 ) {
return value;
}
throw new IOException();
}
private String decodeToCouleur(byte code) throws IOException {
if ( code==1 ) return FenetreJeu.COULEUR_JOUEUR_BLANC;
else if ( code==0 ) return FenetreJeu.COULEUR_JOUEUR_NOIR;
else throw new IOException();
}
} |