From 7b5d80f4d3129bc3d87cfa0e6e14a7e8443e6336 Mon Sep 17 00:00:00 2001 From: MasterPyo <olivier.pillods@gmail.com> Date: Thu, 27 Apr 2023 16:15:47 +0200 Subject: [PATCH] rook works, both sides, from king And from rook. promotion works, queen only --- .../src/main/java/controller/Main.java | 2 +- .../MavenChess/src/main/java/model/Board.java | 24 ++- .../MavenChess/src/main/java/model/Piece.java | 2 +- .../src/main/java/view/BoardView.java | 180 ++++++++++++------ .../src/main/java/view/CustomMaterial.java | 4 +- .../src/main/java/view/PieceView.java | 2 +- .../target/classes/controller/Main.class | Bin 4707 -> 4781 bytes .../target/classes/model/Board.class | Bin 3363 -> 3787 bytes .../target/classes/model/Piece.class | Bin 1094 -> 1180 bytes .../target/classes/view/BoardView.class | Bin 7567 -> 8275 bytes .../target/classes/view/CustomMaterial.class | Bin 1725 -> 1730 bytes .../target/classes/view/PieceView.class | Bin 1123 -> 1209 bytes 12 files changed, 141 insertions(+), 73 deletions(-) diff --git a/MavenChess/MavenChess/src/main/java/controller/Main.java b/MavenChess/MavenChess/src/main/java/controller/Main.java index 0637b74..0725fe2 100644 --- a/MavenChess/MavenChess/src/main/java/controller/Main.java +++ b/MavenChess/MavenChess/src/main/java/controller/Main.java @@ -65,7 +65,7 @@ public class Main extends Application { // event - click on (visual) "colored tiles" to move the selected piece there for(int n = 0 ; n < 64 ; n++) { TileView tile = boardView.getTile(n); - tile.getObj().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> boardView.clickTile(material, tile, board)); + tile.getObj().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> boardView.clickTile(material, model, tile, board)); } // start -------------------------------------------------------------- diff --git a/MavenChess/MavenChess/src/main/java/model/Board.java b/MavenChess/MavenChess/src/main/java/model/Board.java index 7a0e838..6abb931 100644 --- a/MavenChess/MavenChess/src/main/java/model/Board.java +++ b/MavenChess/MavenChess/src/main/java/model/Board.java @@ -18,14 +18,12 @@ public class Board { int y; for(int color = Piece.WHITE ; color == Piece.WHITE || color == Piece.BLACK ; color++) { // placement of pawns - if(color == Piece.WHITE) { y = 2; } - else { y = 7; } + if(color == Piece.WHITE) { y = 2; } else { y = 7; } for(int x = A ; x <= H ; x++) { createPiece(x, y, color, PAWN); // fills line 2 and line 7 with pawns } // placement of rook, knight, bishop, queen, king - line 1 and line 8 - if(color == Piece.WHITE) { y = 1; } - else { y = 8; } + if(color == Piece.WHITE) { y = 1; } else { y = 8; } createPiece(A, y, color, ROOK); createPiece(B, y, color, KNIGHT); createPiece(C, y, color, BISHOP); @@ -48,6 +46,7 @@ public class Board { public Piece getPiece(int id) { return pieces[id]; } + public void createPiece(int x, int y, int color, int type) { Position p = new Position(x, y); switch(type) { @@ -64,8 +63,12 @@ public class Board { return selected; } + public Piece getSelectedPiece() { + return getPiece(selected.getID()); + } + public void setSelected(Position p) { - selected = p; + selected = new Position(p.getX(), p.getY()); // creates a new copy, to avoid using reference } public void movePiece(Position origin, Position arrival) { @@ -75,6 +78,16 @@ public class Board { pieces[origin.getID()] = null; // removes the origin ID piece on the pieces list } + public void mutationOfSelectedPiece(int type) { + int color = getSelectedPiece().getColor(); + switch(type) { + case ROOK -> setPiece(new Rook(selected, color)); + case KNIGHT -> setPiece(new Knight(selected, color)); + case BISHOP -> setPiece(new Bishop(selected, color)); + default -> setPiece(new Queen(selected, color)); + } + } + public boolean isFree(Position p) { return (p.isCorrect() && getPiece(p) == null); @@ -85,6 +98,7 @@ public class Board { && !isFree(arrival) && getPiece(arrival).getColor() != getPiece(origin).getColor() ); } + public boolean isKing(Position p) { return (p.isCorrect() && !isFree(p) diff --git a/MavenChess/MavenChess/src/main/java/model/Piece.java b/MavenChess/MavenChess/src/main/java/model/Piece.java index d26f9f4..4053281 100644 --- a/MavenChess/MavenChess/src/main/java/model/Piece.java +++ b/MavenChess/MavenChess/src/main/java/model/Piece.java @@ -34,7 +34,7 @@ public abstract class Piece { } public void setPosition(Position p) { - this.p = p; + this.p = new Position(p.getX(), p.getY()); // creates a new copy, to avoid using reference hasBeenMoved = true; } } diff --git a/MavenChess/MavenChess/src/main/java/view/BoardView.java b/MavenChess/MavenChess/src/main/java/view/BoardView.java index a0579b8..978fecf 100644 --- a/MavenChess/MavenChess/src/main/java/view/BoardView.java +++ b/MavenChess/MavenChess/src/main/java/view/BoardView.java @@ -2,14 +2,7 @@ package view; import javafx.scene.Group; import javafx.scene.shape.*; -import model.Board; -import model.Rook; -import model.Knight; -import model.Bishop; -import model.Queen; -import model.King; -import model.Piece; -import model.Position; +import model.*; import java.util.ArrayList; @@ -52,28 +45,31 @@ public class BoardView { white_death_count = 0; } - public void updatePiece(Position position) { // updates the piece(i, j), visually, to the right position - int id = position.getID(); - if(getPiece(id) != null) { - getPieceObj(id).setTranslateX((position.getX()-1) * BOARD_SIZE + CENTERED_ORIGIN); - getPieceObj(id).setTranslateZ((position.getY()-1) * BOARD_SIZE + CENTERED_ORIGIN); - } + public TileView getTile(int id) { + return tiles[id]; } - public void updateGraveyardPiece(PieceView piece) { // updates position (visual) of a dead piece - int x = piece.getPosition().getX(); - int y = piece.getPosition().getY(); - if(x == Position.WHITE_GRAVEYARD) { - piece.getObj().setTranslateX(-2 * BOARD_SIZE + CENTERED_ORIGIN); - piece.getObj().setTranslateZ(y * BOARD_SIZE*0.65f - BOARD_SIZE*4); - } else { // x == Position.BLACK_GRAVEYARD - piece.getObj().setTranslateX(9 * BOARD_SIZE + CENTERED_ORIGIN); - piece.getObj().setTranslateZ(-y * BOARD_SIZE*0.65f + BOARD_SIZE*4); - } - piece.getObj().setTranslateY(GRAVEYARD_HEIGHT); // place at right height (Y axis) on table + public Box getTileObj(int id) { + return tiles[id].getObj(); } - public void createTile(Position position) { + public void setTile(TileView tile) { + tiles[tile.getPosition().getID()] = tile; + } + + public PieceView getPiece(int id) { + return pieces[id]; + } + + public MeshView getPieceObj(int id) { + return pieces[id].getObj(); + } + + public void setPiece(PieceView piece) { + pieces[piece.getPosition().getID()] = piece; + } + + private void createTile(Position position) { // creates a tile and with the right size and position Box box = new Box(BOARD_SIZE, (double) BOARD_SIZE / 2, BOARD_SIZE); box.setTranslateX((position.getX()-1) * BOARD_SIZE + CENTERED_ORIGIN); @@ -106,31 +102,28 @@ public class BoardView { updatePiece(position); } - public TileView getTile(int id) { - return tiles[id]; - } - - public Box getTileObj(int id) { - return tiles[id].getObj(); - } - - public void setTile(TileView tile) { - tiles[tile.getPosition().getID()] = tile; - } - - public PieceView getPiece(int id) { - return pieces[id]; - } - - public MeshView getPieceObj(int id) { - return pieces[id].getObj(); + private void updatePiece(Position position) { // updates the piece(i, j), visually, to the right position + int id = position.getID(); + if(getPiece(id) != null) { + getPieceObj(id).setTranslateX((position.getX()-1) * BOARD_SIZE + CENTERED_ORIGIN); + getPieceObj(id).setTranslateZ((position.getY()-1) * BOARD_SIZE + CENTERED_ORIGIN); + } } - public void setPiece(PieceView piece) { - pieces[piece.getPosition().getID()] = piece; + private void updateGraveyardPiece(PieceView piece) { // updates position (visual) of a dead piece + int x = piece.getPosition().getX(); + int y = piece.getPosition().getY(); + if(x == Position.WHITE_GRAVEYARD) { + piece.getObj().setTranslateX(-2 * BOARD_SIZE + CENTERED_ORIGIN); + piece.getObj().setTranslateZ(y * BOARD_SIZE*0.65f - BOARD_SIZE*4); + } else { // x == Position.BLACK_GRAVEYARD + piece.getObj().setTranslateX(9 * BOARD_SIZE + CENTERED_ORIGIN); + piece.getObj().setTranslateZ(-y * BOARD_SIZE*0.65f + BOARD_SIZE*4); + } + piece.getObj().setTranslateY(GRAVEYARD_HEIGHT); // place at right height (Y axis) on table } - public void resetColor(CustomMaterial material) { + private void resetColor(CustomMaterial material) { for(int n = 0, j = 1 ; j <= 8 ; j++) { for (int i = 1; i <= 8; i++, n++) { // resets board with black and white - bottom left (first case) is black, then alternates @@ -144,7 +137,7 @@ public class BoardView { } } - public void setColor(CustomMaterial material, Position position, int type) { + private void setColor(CustomMaterial material, Position position, int type) { int id = position.getID(); // set the new color-type (visually) getTileObj(id).setMaterial(material.get(type)); @@ -159,48 +152,101 @@ public class BoardView { } public void clickPiece(CustomMaterial material, PieceView clickedPiece, Board board) { + // clicking a piece will ask her available moves Position position = clickedPiece.getPosition(); board.setSelected(position); resetColor(material); setColor(material, position, CustomMaterial.SELECTED_TILE); ArrayList<Position> moves = board.getPiece(position).getAvailableMoves(board); + + // shows all available moves on the tiles, with colors, each tile-color having a meaning for (Position move : moves) { if(board.isFree(move)) { setColor(material, move, CustomMaterial.MOVABLE_TILE); } else if(board.isEnemy(move, position)) { setColor(material, move, CustomMaterial.ATTACK_TILE); } else { - setColor(material, move, CustomMaterial.SPECIAL_TILE); + setColor(material, move, CustomMaterial.SPECIAL_TILE); // any special move } - // promotion + // PROMOTION (attacking or not) if(board.isPawn(position) && (move.getY() == 8 || move.getY() == 1)) { setColor(material, move, CustomMaterial.SPECIAL_TILE); } } } - public void clickTile(CustomMaterial material, TileView clickedTile, Board board) { + public void clickTile(CustomMaterial material, Custom3dModel model, TileView clickedTile, Board board) { int state = clickedTile.getState(); Position selected = board.getSelected(); Position arrival = clickedTile.getPosition(); if(state != TileView.NORMAL && state != TileView.SELECTED) { - if(state == TileView.ATTACK) { - killPiece(getPiece(arrival.getID())); - } + // --- ALL SPECIAL MOVES --- if(state == TileView.SPECIAL) { - // promotion can be done while attacking too - if(!board.isFree(arrival)) { - killPiece(getPiece(arrival.getID())); + if(board.isPawn(selected)) { + // --- PROMOTION --- + if(arrival.getY() == 8 || arrival.getY() == 1) { + // --- ATTACK (while doing promotion) --- + if (!board.isFree(arrival)) { + killPiece(arrival); // place piece on graveyard (visual) + } + // Promotion to Queen (by default, Queen for now) + board.mutationOfSelectedPiece(Board.QUEEN); // (on model) + mutationPiece(model, selected, Custom3dModel.QUEEN); // (on view) + } + // --- PRISE EN PASSANT --- + else { + // PRE : if it's not a promotion, then it's "prise en passant", because of pawn rules + // we don't need to test y-position + } + } + // --- CASTLING (from king) --- + if(board.isKing(selected)) { + // PRE (1) : the arrival piece CAN ONLY BE ROOK, because of king rules + // PRE (2) : we don't need to test if rook !hasBeenMoved(), because of king rules + // PRE (3) : we don't need to test if king !hasBeenMoved(), because of king rules + int x = Board.D; // king x arrival, for west-rook + if(arrival.getX() == Board.H) { + x = Board.F; // king x arrival, for east-rook + } + Position kingArrival = new Position(x, selected.getY()); + board.movePiece(selected, kingArrival); // move king (on model) + movePiece(selected, kingArrival); // move king (on 3d view) + board.movePiece(arrival, selected); // move rook (on model) + movePiece(arrival, selected); // move rook (on 3d view) + } + // --- CASTLING (from rook) --- + else if(board.isRook(selected)) { + // PRE (1) : the arrival piece CAN ONLY BE KING, because of rook rules + // PRE (2) : we don't need to test if king !hasBeenMoved(), because of rook rules + // PRE (3) : we don't need to test if rook !hasBeenMoved(), because of rook rules + int x = Board.D; // king x arrival, for west-rook + if (selected.getX() == Board.H) { + x = Board.F; // king x arrival, for east-rook + } + Position kingArrival = new Position(x, arrival.getY()); + board.movePiece(arrival, kingArrival); // move king (on model) + movePiece(arrival, kingArrival); // move king (on 3d view) + board.movePiece(selected, arrival); // move rook (on model) + movePiece(selected, arrival); // move rook (on 3d view) + } + } + // --- STANDARD MOVES --- + else { + // --- ATTACK --- + if(state == TileView.ATTACK) { + killPiece(arrival); // place piece on graveyard (visual) } - // promotion + rook , to implement + // --- MOVE --- + board.movePiece(selected, arrival); // move piece (on model) + movePiece(selected, arrival); // move piece (on 3d view) } - board.movePiece(selected, arrival); // move piece (on model) - movePiece(selected, arrival); // move piece (on 3d view) - resetColor(material); + } + // --- Resets board coloring, doing any action or not --- + resetColor(material); } - public void movePiece(Position origin, Position arrival) { + private void movePiece(Position origin, Position arrival) { PieceView piece = getPiece(origin.getID()); piece.setPosition(arrival); // changes position to arrival setPiece(piece); // copies the piece from origin ID to arrival ID @@ -208,7 +254,8 @@ public class BoardView { updatePiece(arrival); // updates 3d model position (visual) } - public void killPiece(PieceView piece) { // graveyards are specified as negative x + private void killPiece(Position p) { // graveyards are specified as negative x + PieceView piece = getPiece(p.getID()); if(piece.getColor() == Piece.WHITE){ white_death_count++; piece.setPosition(new Position(Position.WHITE_GRAVEYARD, white_death_count)); @@ -219,6 +266,13 @@ public class BoardView { updateGraveyardPiece(piece); } + private void mutationPiece(Custom3dModel model, Position selected, int type) { + // for view side, we can't "overwrite" the piece, we need to "edit" it, + // otherwise the old 3d model would stay on the scene + MeshView obj = getPieceObj(selected.getID()); + obj.setMesh(model.get(type)); + } + public void addAllToScene(Group group) { for(int n = 0 ; n < 64 ; n++) { if(getTile(n) != null) { diff --git a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java index 0302968..8a31a02 100644 --- a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java +++ b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java @@ -15,9 +15,9 @@ public class CustomMaterial { public CustomMaterial() { material = new PhongMaterial[MATERIAL_LENGTH]; material[BLACK] = new PhongMaterial(); - material[BLACK].setDiffuseColor(Color.BLACK); + material[BLACK].setDiffuseColor(Color.rgb(20,20,20)); material[WHITE] = new PhongMaterial(); - material[WHITE].setDiffuseColor(Color.WHITE); + material[WHITE].setDiffuseColor(Color.rgb(240,240,240)); material[SELECTED_TILE] = new PhongMaterial(); material[SELECTED_TILE].setDiffuseColor(Color.rgb(50,200,100)); material[MOVABLE_TILE] = new PhongMaterial(); diff --git a/MavenChess/MavenChess/src/main/java/view/PieceView.java b/MavenChess/MavenChess/src/main/java/view/PieceView.java index 2652f21..3e6cb14 100644 --- a/MavenChess/MavenChess/src/main/java/view/PieceView.java +++ b/MavenChess/MavenChess/src/main/java/view/PieceView.java @@ -27,7 +27,7 @@ public class PieceView { } public void setPosition(Position arrival) { - position = arrival; + position = new Position(arrival.getX(), arrival.getY()); // creates a new copy, to avoid using reference } public int getColor() { diff --git a/MavenChess/MavenChess/target/classes/controller/Main.class b/MavenChess/MavenChess/target/classes/controller/Main.class index 1021ecf5800bb5235d0702489ee5928b761d82ea..26a5078555bb03c979e9421431ca6b3186969f9e 100644 GIT binary patch delta 389 zcmYk1J1hiI6o$V$vpZ{NX6;H?xw;J!S?duJg-s+xAylFlniUcW5|MaBqflvXqV;Ij zYdv-uZxtGqkf>A|l}4gbaCbCraq|D?{^$SCd8^6Q9*$aKN{v}5)oPZjRqNg8sZ*V1 zTs4|f)5=0Vv}TBze~P$jbE*rc_J$cACqx89R1KHDBvaC^a6Bg4UFmvE=gCN024zUP zGJL@-cq}YABKz~ChN5$kZ@Pq_SJ?E4QuQ89ELO424la*0lVuC1Xw3$j=%>*xdk7?7 z<k-g`!3PH%V$#AZN8|~R=9vP=1nK616P;->z!j&Q>17AC>YNKo7}u_sx*uj9#WgqB zYB`n`P3kt*Ka$b&mJYR(^{ECK@K`z0%wSDdOYeYoU)QzcPvy^RitT3?|7}0f@KNz9 S(?`X`fRFCDC#WXMK7Ron^H*2^ delta 306 zcmXYrJ1j$C7>1w!96fE%In|yf%0C#IAdR>rV$z9pViJ27iA2O;u(-rxmdHQ5E_Ext zDQ&e2AvPppkXS4RgTZ2|U*a3Syl>tw@AGB5-@9_NmPo5Xr%zq`+f~Kasot!TF`Q7N zW~|uo*9<ZJpT>$0_Kg{w!y*JCq_$dL61~!HbIL4?xY8}NSYSrl(kERRtg-}UR@WVo zX+Ep%@N(#fF`A5v029JhJ(2iY2ZtQt^2h)g4sia8*<&9)S{-wOK=MtNQw-vKaz+l5 zAzsN-poJt)6e-~
YmX)#5W3oh}K*7p_d0?e~ZjVpqzut}W;wz`cZMZYq<Np<Ii cqZ@fmHQ3SH(pX5T4=--&7nK{8s_uRL0un+_xc~qF diff --git a/MavenChess/MavenChess/target/classes/model/Board.class b/MavenChess/MavenChess/target/classes/model/Board.class index 1407815545854fd1dd5a89e16d2f19e127a9ecb9..68dda59d7a6c6d20e35581e29bb7e67234456bc5 100644 GIT binary patch literal 3787 zcma)8`%fI#75?r%m}MDYy@1_#7stlbUe>|TIB{ZwF%N^;fB^$u2ghzZtT)Tp`=Gmv zV>d~grcT>5eJ1oNRf$?Dma0T*r3Ool+FvX6=l&n<uZ`Tg-?=k8OmHoMba&>QIrlrS z@7&AZ|NG~^0vN$BqX-~qAY>wpCWY7y>y|Z8w918n`PCcwTwS4Q*e=`k5rtr?FWZa= znhiuvw7^toDOIlLiv!~ot9o4_Qp*>)CC}H`tn+1|QnTxJr95Py%`;!H^SQhr#Z2r$ zoG#WyQ&VVrsj*KKLs8mvn&`q_?#)&6Rz0uxDj2B@|N62~wBidUp1^)u6!P_kKZSUz zuYuKwA&Mlr4ID7>Bo5Nq=R;Ho6CiU=Cz=u49x2LU>glX6Yv79tQD@I$rE)WhUK|yR zltO1}r!O5_1Zfk;@RTl1-3>kF+3Fkx__%`U0MC@|!dg9wejGLMB~LwW*VZcQQ4EUu z8LyBRH}d&%6emRcoEO}TT`oj%Qk17X<%0DJEl=U7)bxzW)}LimQZb2w4NGObdbzbv zV$8(2R4PQf7o{TSOiVTuD}r=hkfs%$^pa{6dnZ~eUNA9(Sq5M8_o?I2o$P7^b0+4o zz`*Ex$>o(BYx{O<-B4SxXktkslawYZ#Y$Dey<{Sb%L>hQZK6`GYC4m}R|J2>#1*_m z?%B1eYMvGNKY`FNfNLhcjIX%JMXN@db})eLL75Qc5UaE>c6m-gWfWQ`D&<<;D%Z1C zaU&n(sDa-X=jUhSUD4~zT;}}rvPc0+<C&%D`2~@Jq}#<ylaq5Igt%!YGk0Fz!$cnA z8t0neB2U#M*OYwZ<SK1t@MT&w5pJE}a4NLV+U5M*Mrk!)UA9(>)Wl~iIjfkps<z0k zQrX;khwC;Y$Vml>P+zl|ZmUafJ?2cbb*XOUZeFm~-L2tuheHiJ-6q;a)?G3v1Z*A( zq57S5x>xJYtTwvpFk)M3E>&(d=KSy@?ASSIeOcD8Qnd?qna6@vt=hM&qQbt?M%|K= zXa3~|vdf+jna(|iU7IZDOU!r|KCWn<$YALg8GrpEQ^gTms%%tq`6*k98`V`hF7&`5 z@+`n+#CSk`6&5+LN-2OG<?B8<Px)n^T%f$>lWod3eDY1oMW0-vT=vO=SMkY$x9*b# z?`u9;@Txvp@M=D}PI<#8-=h4APri+~9OODT-V1!TGgn?H{JlfIzsvU!wI8SNL#5Rx zFw(Knzo7LKv<HV1vC-cmmi`mk6Kd(MQuiMID|99qdLNNw_yfF_41It|c=#TgV#aW2 zq&pV*9rmQV6UpEfI_?H({!eWZ(k7ANbSRMw@l!gSNQULvlt?zo(?}!@c}5b+h&*GB z4>5kxmN9;kt#<=NedCV|IEb(F_X_s%w}mN~Xhs_oZO48#^$?#&(ZTb#3!}7|#y%|Y zndR3U61d4DsD^I5iUasI@0@pV5S!ff8}#5q?)!*0$g4yiVWB!HzotuinqFVmZ{yT{ zgKt5i7hPQ+k-kZt(CTBnfp78oCf5L39@0Eu$mHWQ#Q($EtLEm1wB-FBQPe)*$@3XH zngjo4s7fv-r$3mY3ju7CE*#s!zAYq<ElB|ax&U$vf~mG5r32pUSiA1Ik3roPe{vbP zm?N~2T~QY^@$?@&JmCfCUy^sQq8?ThZ?Vh{)>#*8$i*@=OCA9l@BtYfkb&>$Dk}N^ z!2wdenv}rir%0|OlJ{}wbhs<@dxinr=8~|&T!*=y;hN;iauw2_qIczqaQA&2*+Snv zT%w}iQ4DCsIVuJn#nW1Gf{GK4;#sZeq2i>YcwQ^^P;tsp3{kPow<Ba3$f_2`Fo<U{ z#>;#W&yiElqs}}0Eu6-C81}fse7vkTHDe@?P0bi-!KP-6+zOlcE^87Z^4s_x%N*9+ zX@l_qg9ef@`D<kr-X??f=#p2`3RZ=sH+FXLtPVlCC1rESsN~vqH=ktR<eQn6-6Yi( zhIe92_%KWl<NKI(F=mM@Np!MW$rX}wlxu>W<0-O}q31b7(>^kEdS&U<=}Ic^;0G>p zjjRt5Iguvf)Lj2lTgasQ*@*^Ym2U+0YF^B6QfFDc3!MHr)@WWkOFJ;0vjl#qDNJbm zh;ISz>e3?;r0XB!CvE`$Af|MsoZiBPEnGa4aG1DEos><!CAf}rjWPY+6)7WG>u~TC zRs9W>!@?s}4K`E`4?Czj(NGB!w|RB|29XzeNiFdtS|-CT;RW*j8ZM)R6`k8bCqgf` zvStwPc3xP{IrJtmq6j}guZqXxa`5y2DmTNc?%;N@!ppxxyRP)#V1(`=6#R%AoddQ_ zJGn~QU*j2e)z`r;&vBRAL2*Y$bc{+fe~NcqPp=a~>XmXl^@yhze~taxBWs&xcc=J# z{}JbL-93xWS9yu$c+6S8%u`+fDcwuyOG@`Qpl64n9MPe?=OtZolkRasNxGqQx}jW+ zpZxGKK@=Fo8iTNTNfdll=<$N+`Fs@)YS){)cisCq*Co0x({+WeOS^adv)#Ks^*Glx Ux~|jp23^;7@A~KLL;%0|A9f*!+yDRo literal 3363 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 NwQ%Uq*@*zI{Rgt`F600J diff --git a/MavenChess/MavenChess/target/classes/model/Piece.class b/MavenChess/MavenChess/target/classes/model/Piece.class index c70cfe3367e1cb27e247905ca4d730e0342c589f..5ea10cd77ba3e51ecf0a9c9952be710ffc479667 100644 GIT binary patch delta 567 zcmZutJx{_=6g{s{5UkaTAVpD73$&>C{WZ9=7#ED}5<{YPkXd#&gQM{mI7lLzXyWLg zi9gABUPT~;p||gyd(L_Ho{yosQ26ub^&P-I_HM$r2SLOH^mF&5a#lEWFRQhxdl5zy zaSbLC0{+uV?O4E<vx^d*){y*%%MzH?pduxp=88r8sCl0ijW2O+r!fYBIliM{o=yur zcMAddsmhR%ZCoi<K1W`R2%xhwiV)d43`8&vn`jC?)(JSsH@+3KzKA9IW{GXlL*ZW$ zkFr8K1&D#8NoDM>E0w%S#xe@*uXyKGp4O0Hm0l8;O4WJ7$b(1d+L@l6<`L>@+fQH} z8w1qA{$Y|m>aI9~%>iPg|LJtU*yU`3t8cf}B}OMhFr7C<%lT(a@|$|WObbEB--6NX dETel#T1+;BIJfR*WOgz#F$}q=z>cTe{RL8uGvfdN delta 460 zcmZut%TmHX5bWI~poyX>BpSn036P+2vq}$MEx(E%@M6WIpWs2N;Nk&q9Q+o(!J=mg zgtEBI^z8KX?DWUs;=uj=`<?@M!syL?pDg>zwg$;d=Ihs_hEpg6>}s4N#Kle>q68Zb zF3E_pg^pD{Tk2@sAiE8V@eED0m<4$_B2Ul>H8gP>9p;E{_pCItR$mfPXDk_Z4WbsT zyIVDlD_pbRHSCzEhd!fdjUEVOk&{kw{An14UTE~zKXGzBg#i+o&VH<5TyPtExmBc_ zO*@PH|BE_%hljYyho5<pob08;8Oo_WgFlhKKAPhz#=e;5_Tcig!US(?f|pyWaBGgd FTLJu)Ai)3t diff --git a/MavenChess/MavenChess/target/classes/view/BoardView.class b/MavenChess/MavenChess/target/classes/view/BoardView.class index 658950bedb33ff474e89419b3e918501d22fd96f..4e3204d077c098470e984565f8b0fada87995e72 100644 GIT binary patch literal 8275 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 delta 3800 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 HhlKtIANhsr diff --git a/MavenChess/MavenChess/target/classes/view/CustomMaterial.class b/MavenChess/MavenChess/target/classes/view/CustomMaterial.class index 716c4af3b9b45177c2e298edd4a74ae7fb2c8078..06ac3d5e95495a07bff9fe1ddba2c69a20ed8c70 100644 GIT binary patch delta 729 zcmYk4%TLr$6vn^PX*;%-Sa6(2I~^W^GgX|?5l{!j8AcEUUqPd+&<G(hBtt;s#)O6J zwYdxTY}^sWWWZ;POB3}EaBoa>!Op~m<7tP)=C-%zcTUea_kQ=jYx&rsfBO6SJ%C|c z_4EzWy;rW7rJRUTN!QT|+dvwQcuc+2F5Z%p=p<-`2esN<{_fI(jtmYOP|z)QD6Jkc zkVQ_kNqzal296*_Fjwa9O)t&gxxaXOxmsJSEo)r#sDV5R1m(u~#I;d^<#{o$q3&VN z$W)~|`EpizM61Ve9E2h-PQnSKIORY0G53dffca#IPcfekafx{_#6!$yLOjfTHpFG5 z22cq(Mqr^D;&Z$xUM^IgM*;c?nLVJ2cq%)t8S}?B%sS$m*ekz*HnW9&)4pA7#ZL3# zxcDMFWQt#MnrBV%?X2RYck@g&lxV6&v%C#U+)`|^#6u-Hn3-wo*g{twJ&_^X)Yf5f z1G{L>`6KA=t`R+Jd}nv0xQX66+!w581Y_c>l2~=IpH+-u0tav%aV#K#6(q67YCPc$ zufxU$pZ^Cq_{>NB4ej`W4*W(Z$>^dux+#MmD)6@-St=uk^ISg;iISW%9tg&waEA-* zpXAqs)Zm~LMf4^Cf4Dqh3KyF?qQok)j!=W0JZDS7n9m#sU#Z>lfu~v2k6j8H5iSS+ GU-<_sux{=E delta 742 zcmYk3yH6BR6o<bv?Ci4Z;0_22`xs=A_acuKQ4v8{L0;lxHA-n*G%+MgP-0<0h_)7F z{s0pjI~7a-HBwj^V`FJzVP$MBY%IjHgT~2Z&b{Bc=bZby=e(<UTM_y2`}GbmM1C#u zOu}og+Jolk%t&t9?J*p;Tn1BNDoI+Ts1eMo6O)(6BI>EPI7q|V*N*Z^8Z8dd<jzW` zw7B=hscjR&-S>*cLf7rZTM?S+urSHE&m|Q+Y|%xx`$_uZy%t&Gf_-QHZhmq8#`41T zrCf2Lxb*Uh@jzCpIfBrq>I{w&R|WsMU-_7ik1L<>@qqG49}g;@^6`-Ju#ZnGkN9|$ zct1Ix;|vMLd_1nAv>yc3o(1_rKs`v-eH3tH!(9)=(i<c;iEXgYd_#C{i)g;I&)V5a z-rI$39QQ{cC62q_bkufwcFIgR>AfsF<V&+drL1kz?y6b0(mYqyx<&gYon?bbJN$%% zR!(N^Lg~}OoAf*sdAj>e-DO!%N6)%8vWy9}H}$a)RmC=z&a#dw9pC}Fsb+v0#))x_ zS_*oytg);5c9$fNbp-1;?5t4FN1gv?8u(6{pEOE{CW+E44Z60_D!sHZsn^6XB&<nO zUh}j;Of#eYbNbsDyLxDZ2nqbs^1>|V_gbn_j8aPpdT)E7JHwM7B%{$}{*^C<{4HAA NUGOdvE_w-<{s87<Y{~!t diff --git a/MavenChess/MavenChess/target/classes/view/PieceView.class b/MavenChess/MavenChess/target/classes/view/PieceView.class index 3c6a4b6876b721f6d4664abc0a04f078c07ac0ac..861779ea1eb44cd71c28a9393b6864abf3cf04a9 100644 GIT binary patch delta 589 zcmZutO-{l<7=2S{E43gf6a@hVf&Qq7KU?-B#;6OGoePN}QCY~IGm!2*feT4Qqb44} zGr02x9>Dm`6rn*fX{LGe{_?(NUP9W(&+9vY8uofx|5$~=5V>w&G_NX$?b}wT)xOb? zz@m;Nq!@yi&CVG^z_jWdUe=NMgBu*k>5#F)Ae;5Nb;3|Jd*_+{XOy|$>{MO_L*6}* zicWzd4Wa_G2tr2)VMORGU=C}9+Jpje6j5^Tq(Zk0lWPg9(9P(U?MJ8&^do_rDFU1q zV%;NfF}*NYWao)%#FjYQb_P)UBef<_UMMLX439N*0AdRD<hBeB*14H`6fnBu;MCOM z4QvjB_sN<E$L%*H8qO1v^rfGX9UweeBTFmfd^N-hq~&{55EU)9kOJ%e8zgp5EdL<+ jslBS$9`+g!k{%#7*`!3R%f2ScXb^=u#=SvyMC9%-@-a2w delta 426 zcmdnV`Iv+2)W2Q(7#JAr7_=sGZDe6&Fw~fsAiG(MQGk(!SwquvvISElt0)5_gV^M0 zOsb6HllL%5^Gg6VXfdz=Nf8D~2C2!<n3UP28Dzk!1enFt#ep(xKpq2w5Ccdp517pg zQVZlUGRQK>fz|pli`RqHaxpLgNihai263=@F)*JEsvcw(H`okD26+YrkWQd#eIO08 zfmLe@1MdbPg9)e^W~~%fYZV!kpqlM~szFw=Y1wOUW#HWi*A8)s9MC25I9#I4AON;m ug+Uc$*kl71WdAB*wOEZo9jrE&McfqOUp1gD>Nso>28Jxie;QzyX#xN#jUWU7 -- GitLab