From d4727c23ceea46ccd9b75707bfc3212d9fa16d1c Mon Sep 17 00:00:00 2001 From: MasterPyo <olivier.pillods@gmail.com> Date: Sat, 29 Apr 2023 10:19:02 +0200 Subject: [PATCH] variants fully functionnal + enpassant pawn AND nwap --- .../src/main/java/controller/Main.java | 107 ++++++++++++++++-- .../MavenChess/src/main/java/model/Board.java | 24 +++- .../MavenChess/src/main/java/model/Giant.java | 45 +++++--- .../src/main/java/model/Kamikaze.java | 52 +++++---- .../src/main/java/model/Magician.java | 4 + .../MavenChess/src/main/java/model/Nwap.java | 10 ++ .../MavenChess/src/main/java/model/Pawn.java | 3 +- .../src/main/java/model/Position.java | 2 + .../MavenChess/src/main/java/model/Queen.java | 2 +- .../src/main/java/view/BoardView.java | 32 +++++- .../src/main/java/view/CustomMaterial.java | 10 +- .../src/main/java/view/TileView.java | 2 +- .../target/classes/controller/Main.class | Bin 6956 -> 9258 bytes .../target/classes/model/Board.class | Bin 4097 -> 4599 bytes .../target/classes/model/Giant.class | Bin 1746 -> 1481 bytes .../target/classes/model/Kamikaze.class | Bin 1348 -> 1804 bytes .../target/classes/model/Magician.class | Bin 919 -> 1015 bytes .../target/classes/model/Nwap.class | Bin 1743 -> 1955 bytes .../target/classes/model/Pawn.class | Bin 2345 -> 2345 bytes .../target/classes/model/Position.class | Bin 1390 -> 1443 bytes .../target/classes/model/Queen.class | Bin 1518 -> 1518 bytes .../target/classes/view/BoardView.class | Bin 6565 -> 7379 bytes .../target/classes/view/CustomMaterial.class | Bin 1730 -> 1809 bytes .../target/classes/view/TileView.class | Bin 1022 -> 1055 bytes 24 files changed, 236 insertions(+), 57 deletions(-) diff --git a/MavenChess/MavenChess/src/main/java/controller/Main.java b/MavenChess/MavenChess/src/main/java/controller/Main.java index 9328f91..c1f1957 100644 --- a/MavenChess/MavenChess/src/main/java/controller/Main.java +++ b/MavenChess/MavenChess/src/main/java/controller/Main.java @@ -5,8 +5,7 @@ import javafx.scene.*; import javafx.scene.input.MouseEvent; import javafx.scene.input.ScrollEvent; import javafx.stage.Stage; -import model.Board; -import model.Position; +import model.*; import view.*; import java.util.ArrayList; @@ -23,6 +22,7 @@ public class Main extends Application { private Board board; private BoardView boardView; + @Override public void start(Stage stage) { @@ -99,11 +99,10 @@ public class Main extends Application { if(clickedPiece.getPosition().getX() < 0) { return; } - // if piece is an "attack" or "special" target, we consider it an action to apply (tile click) + // if piece is colored (aka targeted), we consider it an action to apply (tile click) if(clickedPiece.isTargeted()) { clickTile(boardView.getTile(clickedPiece.getPosition().getID())); - } - else { + } else { // clicking a piece will ask her available moves Position position = clickedPiece.getPosition(); board.setSelected(position); @@ -111,10 +110,42 @@ public class Main extends Application { boardView.setColor(material, position, CustomMaterial.SELECTED_TILE); ArrayList<Position> moves = board.getPiece(position).getAvailableMoves(board); + // test if kamikaze, and shows the explosion range + if(board.isKamikaze(position)) { + ArrayList<Position> explosions = ((Kamikaze) board.getPiece(position)).getExplosion(); + for (Position explosion : explosions) { + boardView.setColor(material, explosion, CustomMaterial.EXPLOSION_TILE); + } + clickedPiece.setTargeted(material, CustomMaterial.EXPLOSION_TILE); + } + // shows all available moves on the tiles, with colors, each tile-color having a meaning for (Position move : moves) { + if (board.isFree(move)) { boardView.setColor(material, move, CustomMaterial.MOVABLE_TILE); + // test for "en passant" + if(board.isPawn(position) || board.isNwap(position)) { + Position enemy = new Position(move.getX(), position.getY()); + boolean isEnPassant = false; + if(board.isEnemy(enemy, position)) { + if (board.isPawn(enemy)) { + if (((Pawn) board.getPiece(enemy)).isEnPassant()) { + isEnPassant = true; + } + } + if (board.isNwap(enemy)) { + if (((Nwap) board.getPiece(enemy)).isEnPassant()) { + isEnPassant = true; + } + } + } + if(isEnPassant) { + boardView.setColor(material, move, CustomMaterial.SPECIAL_TILE); + boardView.setColor(material, enemy, CustomMaterial.SPECIAL_TILE); + boardView.getPiece(enemy.getID()).setTargeted(material, CustomMaterial.ATTACK_TILE); + } + } } else if (board.isEnemy(move, position)) { boardView.setColor(material, move, CustomMaterial.ATTACK_TILE); boardView.getPiece(move.getID()).setTargeted(material, CustomMaterial.ATTACK_TILE); @@ -123,7 +154,7 @@ public class Main extends Application { boardView.getPiece(move.getID()).setTargeted(material, CustomMaterial.SPECIAL_TILE); } // PROMOTION (attacking or not) - if (board.isPawn(position) && (move.getY() == 8 || move.getY() == 1)) { + if ((board.isPawn(position) || board.isNwap(position)) && (move.getY() == 8 || move.getY() == 1)) { boardView.setColor(material, move, CustomMaterial.SPECIAL_TILE); } } @@ -131,13 +162,27 @@ public class Main extends Application { } public void clickTile(TileView clickedTile) { + // --- Resets enPassant --- + for(int j = 1 ; j <= 8 ; j++) { + for(int i = 1 ; i <= 8 ; i++) { + Position p = new Position(i, j); + if (board.isPawn(p)) { + ((Pawn) board.getPiece(p)).setEnPassant(false); + } + if (board.isNwap(p)) { + ((Nwap) board.getPiece(p)).setEnPassant(false); + } + } + } + + // --- Analyses the clicked tile type, and executes related actions --- int state = clickedTile.getState(); Position selected = board.getSelected(); Position arrival = clickedTile.getPosition(); if(state != TileView.NORMAL && state != TileView.SELECTED) { // --- ALL SPECIAL MOVES --- if(state == TileView.SPECIAL) { - if(board.isPawn(selected)) { + if(board.isPawn(selected) || board.isNwap(selected)) { // --- PROMOTION --- if(arrival.getY() == 8 || arrival.getY() == 1) { // --- ATTACK (while doing promotion) --- @@ -156,6 +201,16 @@ public class Main extends Application { 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 + Position enemy = new Position(arrival.getX(), selected.getY()); + boardView.getPiece(enemy.getID()).resetTargeted(material); // reset color + boardView.killPiece(enemy); // place piece on graveyard (visual) + board.killPiece(enemy.getID()); // because we don't move "on it", we need to kill it manually (model) + Position enPassantArrival = new Position(arrival.getX(), selected.getY()+1); + if(board.getSelectedPiece().getColor() == Piece.BLACK) { + enPassantArrival.setY(selected.getY()-1); + } + board.movePiece(selected, enPassantArrival); // move piece (on model) + boardView.movePiece(selected, enPassantArrival); // move piece (on 3d view) } } // --- CASTLING (from king) --- @@ -189,12 +244,50 @@ public class Main extends Application { boardView.movePiece(selected, arrival); // move rook (on 3d view) } } + // --- EXPLOSION MOVES --- + else if (state == TileView.EXPLOSION) { + for(int n = 0 ; n < 64 ; n++) { + if(boardView.getTile(n).getState() == TileView.EXPLOSION) { + if(boardView.getPiece(n) != null) { + boardView.getPiece(n).resetTargeted(material); // reset color + boardView.killPiece(boardView.getPiece(n).getPosition()); // place piece on graveyard (visual) + board.killPiece(n); + } + } + } + } // --- STANDARD MOVES --- else { // --- ATTACK --- if(state == TileView.ATTACK) { boardView.getPiece(arrival.getID()).resetTargeted(material); // reset color boardView.killPiece(arrival); // place piece on graveyard (visual) + // --- MAGICIAN CHANGE --- + if(board.isMagician(selected)) { + // we can't do switch statement on ".getClass()" + Piece enemy = board.getPiece(arrival); + Magician magician = (Magician) board.getPiece(selected); + int color = magician.getColor(); + if (enemy.getClass() == Pawn.class) { magician.setCopiedPiece(new Pawn(selected, color)); } + if (enemy.getClass() == Rook.class) { magician.setCopiedPiece(new Rook(selected, color)); } + if (enemy.getClass() == Knight.class) { magician.setCopiedPiece(new Knight(selected, color)); } + if (enemy.getClass() == Bishop.class) { magician.setCopiedPiece(new Bishop(selected, color)); } + if (enemy.getClass() == Queen.class) { magician.setCopiedPiece(new Queen(selected, color)); } + if (enemy.getClass() == King.class) { magician.setCopiedPiece(new King(selected, color)); } + if (enemy.getClass() == Nwap.class) { magician.setCopiedPiece(new Nwap(selected, color)); } + if (enemy.getClass() == Magician.class) { magician.setCopiedPiece(((Magician) enemy).getCopiedPiece()); } // lol, stealing the stealer + if (enemy.getClass() == Giant.class) { magician.setCopiedPiece(new Giant(selected, color)); } + if (enemy.getClass() == Kamikaze.class) { magician.setCopiedPiece(new Kamikaze(selected, color)); } + } + } + // --- EN PASSANT activation --- + if(Math.abs(selected.getY() - arrival.getY()) == 2) { + if(board.isPawn(selected)) { + ((Pawn) board.getPiece(selected)).setEnPassant(true); + } + if(board.isNwap(selected)) { + ((Nwap) board.getPiece(selected)).setEnPassant(true); + } } // --- MOVE --- board.movePiece(selected, arrival); // move piece (on model) diff --git a/MavenChess/MavenChess/src/main/java/model/Board.java b/MavenChess/MavenChess/src/main/java/model/Board.java index b7c82d5..1ba3182 100644 --- a/MavenChess/MavenChess/src/main/java/model/Board.java +++ b/MavenChess/MavenChess/src/main/java/model/Board.java @@ -79,7 +79,11 @@ public class Board { Piece piece = getPiece(origin); piece.setPosition(arrival); // changes position to arrival setPiece(piece); // copies the piece (from origin ID) to arrival ID on the pieces list - pieces[origin.getID()] = null; // removes the origin ID piece on the pieces list + killPiece(origin.getID()); // removes the origin ID piece on the pieces list + } + + public void killPiece(int id) { + pieces[id] = null; } public void mutationOfSelectedPiece(int type) { @@ -120,4 +124,22 @@ public class Board { && !isFree(p) && getPiece(p).getClass() == Pawn.class); } + + public boolean isNwap(Position p) { + return (p.isCorrect() + && !isFree(p) + && getPiece(p).getClass() == Nwap.class); + } + + public boolean isKamikaze(Position p) { + return (p.isCorrect() + && !isFree(p) + && getPiece(p).getClass() == Kamikaze.class); + } + + public boolean isMagician(Position p) { + return (p.isCorrect() + && !isFree(p) + && getPiece(p).getClass() == Magician.class); + } } diff --git a/MavenChess/MavenChess/src/main/java/model/Giant.java b/MavenChess/MavenChess/src/main/java/model/Giant.java index edc669a..f7f9d89 100644 --- a/MavenChess/MavenChess/src/main/java/model/Giant.java +++ b/MavenChess/MavenChess/src/main/java/model/Giant.java @@ -3,7 +3,7 @@ package model; import java.util.ArrayList; public class Giant extends Piece{ - protected Giant(Position p, int color) { + public Giant(Position p, int color) { super(p, color); } @@ -12,8 +12,31 @@ public class Giant extends Piece{ public ArrayList<Position> getAvailableMoves(Board b) { ArrayList<Position> moves = new ArrayList<>(); - Position arrival; + + // list of the 4 giant directions + int[] all_x = {0, 2, 0, -2}; + int[] all_y = {2, 0, -2, 0}; + + for(int n = 0 ; n < all_x.length ; n++) { // for each direction + int x = all_x[n]; + int y = all_y[n]; + boolean blocked = false; + int i = 1; + while (i < 4 && !blocked) { // continues "as a ray" in that direction until blocked + arrival = new Position(p.getX() + (x * i), p.getY() + (y * i)); + if (b.isEnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + if (!b.isFree(arrival)) { + blocked = true; + } + i++; + } + } + + // Full explicit directions version : ---------------------------- + /* int i = 1; boolean left = false; boolean right = false; @@ -21,26 +44,21 @@ public class Giant extends Piece{ boolean down = false; while (i < 4) { - //left - arrival = new Position(p.getX() + (i*2), p.getY()); if (arrival.isCorrect()) { if (!left) { if (b.isEnemy(arrival, p) || b.isFree(arrival)) { moves.add(arrival); } - if (b.isKing(arrival)) { moves.add(arrival); - } } if (!b.isFree(arrival)) { left = true; } } - //right arrival = new Position(p.getX() - (i*2), p.getY()); if (arrival.isCorrect()) { @@ -52,14 +70,11 @@ public class Giant extends Piece{ moves.add(arrival); } } - if (!b.isFree(arrival)) { - right = true; } } - arrival = new Position(p.getX(), p.getY() + (i*2)); if (arrival.isCorrect()) { if (!top) { @@ -67,15 +82,11 @@ public class Giant extends Piece{ moves.add(arrival); } } - if (!b.isFree(arrival)) { - top = true; } } - - arrival = new Position(p.getX(), p.getY() - (i*2)); if (arrival.isCorrect()) { if (!down) { @@ -83,15 +94,13 @@ public class Giant extends Piece{ moves.add(arrival); } } - if (!b.isFree(arrival)) { - top = true; } } - i++; - } + }*/ + // ------------------------------------------------------------ return moves; diff --git a/MavenChess/MavenChess/src/main/java/model/Kamikaze.java b/MavenChess/MavenChess/src/main/java/model/Kamikaze.java index 1b8909d..882a687 100644 --- a/MavenChess/MavenChess/src/main/java/model/Kamikaze.java +++ b/MavenChess/MavenChess/src/main/java/model/Kamikaze.java @@ -2,7 +2,7 @@ package model; import java.util.ArrayList; -public class Kamikaze extends Pawn { +public class Kamikaze extends Pawn { // aka Trojan knight :P public Kamikaze(Position p, int color) { super(p, color); } @@ -10,42 +10,56 @@ public class Kamikaze extends Pawn { @Override public ArrayList<Position> getAvailableMoves(Board b) { - - ArrayList<Position> moves = new ArrayList<Position>(); + ArrayList<Position> moves = new ArrayList<>(); Position arrival; - - // Self-Detonation Position no need for checks as the Kamikaze is already in place - arrival = new Position(p.getX(),p.getY()); - moves.add(arrival); - - if(color == Piece.WHITE) { // black and white have an opposite direction behavior - + /*if(color == Piece.WHITE) { // black and white have an opposite direction behavior if(!hasBeenMoved){ - arrival = new Position(p.getX(),p.getY()+2); if(arrival.isCorrect() && b.isFree(arrival)) {moves.add(arrival);} - } - arrival = new Position(p.getX(),p.getY()+1); if(arrival.isCorrect() && b.isFree(arrival)) {moves.add(arrival);} - } else { - - if(!hasBeenMoved){ - arrival = new Position(p.getX(),p.getY()-2); if(arrival.isCorrect() && b.isFree(arrival)) {moves.add(arrival);} - } - arrival = new Position(p.getX(),p.getY()-1); if(arrival.isCorrect() && b.isFree(arrival)) {moves.add(arrival);} + }*/ + + // list of the 8 kamikaze-knight specific movements + int[] all_x = {1, 2, 2, 1, -1, -2, -2, -1}; + int[] all_y = {2, 1, -1, -2, -2, -1, 1, 2}; + + for(int n = 0 ; n < all_x.length ; n++) { // for each direction + int x = all_x[n]; + int y = all_y[n]; + arrival = new Position(p.getX() + x, p.getY() + y); + if (b.isEnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + return moves; + } + + public ArrayList<Position> getExplosion() { + + ArrayList<Position> moves = new ArrayList<>(); + Position target; + + for(int x = -1 ; x <= 1 ; x++) { + for(int y = -1 ; y <= 1 ; y++) { + target = new Position(p.getX() + x, p.getY() + y); + if (target.isCorrect()) { + moves.add(target); + } + } } + return moves; } } diff --git a/MavenChess/MavenChess/src/main/java/model/Magician.java b/MavenChess/MavenChess/src/main/java/model/Magician.java index c0cf191..e43e4c5 100644 --- a/MavenChess/MavenChess/src/main/java/model/Magician.java +++ b/MavenChess/MavenChess/src/main/java/model/Magician.java @@ -18,6 +18,10 @@ public class Magician extends Piece{ public void setCopiedPiece(Piece copiedPiece) { this.copiedPiece = copiedPiece; } + + public Piece getCopiedPiece() { + return copiedPiece; + } public void setPosition(Position p) { this.p = p; copiedPiece.setPosition(p); diff --git a/MavenChess/MavenChess/src/main/java/model/Nwap.java b/MavenChess/MavenChess/src/main/java/model/Nwap.java index e15c448..61b7f88 100644 --- a/MavenChess/MavenChess/src/main/java/model/Nwap.java +++ b/MavenChess/MavenChess/src/main/java/model/Nwap.java @@ -3,8 +3,11 @@ package model; import java.util.ArrayList; public class Nwap extends Pawn { + + private boolean enPassant; public Nwap(Position p, int color) { super(p, color); + enPassant = false; } @Override @@ -73,4 +76,11 @@ public class Nwap extends Pawn { } return moves; } + public boolean isEnPassant() { + return enPassant; + } + + public void setEnPassant(boolean enPassant) { + this.enPassant = enPassant; + } } diff --git a/MavenChess/MavenChess/src/main/java/model/Pawn.java b/MavenChess/MavenChess/src/main/java/model/Pawn.java index 69509fc..a61afdc 100644 --- a/MavenChess/MavenChess/src/main/java/model/Pawn.java +++ b/MavenChess/MavenChess/src/main/java/model/Pawn.java @@ -4,9 +4,10 @@ import java.util.ArrayList; public class Pawn extends Piece { - private boolean enPassant = true; // temporarily given true but has to be changed in the controller + private boolean enPassant; public Pawn(Position p, int color) { super(p, color); + enPassant = false; } public ArrayList<Position> getAvailableMoves(Board b) { diff --git a/MavenChess/MavenChess/src/main/java/model/Position.java b/MavenChess/MavenChess/src/main/java/model/Position.java index b1562dc..2eceaf8 100644 --- a/MavenChess/MavenChess/src/main/java/model/Position.java +++ b/MavenChess/MavenChess/src/main/java/model/Position.java @@ -8,6 +8,8 @@ public class Position { public static final int WHITE_GRAVEYARD = -1, BLACK_GRAVEYARD = -2; public Position(int x, int y) { + while(x < 1) { x += 8; } + while(x > 8) { x -= 8; } this.x = x; this.y = y; } diff --git a/MavenChess/MavenChess/src/main/java/model/Queen.java b/MavenChess/MavenChess/src/main/java/model/Queen.java index 08f4ae3..0bf59fd 100644 --- a/MavenChess/MavenChess/src/main/java/model/Queen.java +++ b/MavenChess/MavenChess/src/main/java/model/Queen.java @@ -3,7 +3,7 @@ package model; import java.util.ArrayList; public class Queen extends Piece{ - protected Queen(Position p, int color) { + public Queen(Position p, int color) { super(p, color); } diff --git a/MavenChess/MavenChess/src/main/java/view/BoardView.java b/MavenChess/MavenChess/src/main/java/view/BoardView.java index 0a670ea..2608e65 100644 --- a/MavenChess/MavenChess/src/main/java/view/BoardView.java +++ b/MavenChess/MavenChess/src/main/java/view/BoardView.java @@ -1,8 +1,10 @@ package view; +import javafx.animation.TranslateTransition; import javafx.scene.Group; import javafx.scene.shape.*; import model.*; +import javafx.util.Duration; public class BoardView { @@ -113,15 +115,30 @@ public class BoardView { } } + private void updatePieceWithAnimation(Position position) { // updates the piece(i, j), visually, to the right position + int id = position.getID(); + MeshView obj = getPieceObj(id); + if(getPiece(id) != null) { + TranslateTransition animation = new TranslateTransition(); + animation.setDuration(Duration.millis(300)); + animation.setNode(obj); + animation.setFromX(obj.getTranslateX()); + animation.setFromZ(obj.getTranslateZ()); + animation.setToX((position.getX()-1) * BOARD_SIZE + CENTERED_ORIGIN); + animation.setToZ((position.getY()-1) * BOARD_SIZE + CENTERED_ORIGIN); + animation.play(); + } + } + 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); + piece.getObj().setTranslateZ(y * BOARD_SIZE*0.65f - BOARD_SIZE*5); } 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().setTranslateZ(-y * BOARD_SIZE*0.65f + BOARD_SIZE*5); } piece.getObj().setTranslateY(GRAVEYARD_HEIGHT); // place at right height (Y axis) on table } @@ -149,6 +166,7 @@ public class BoardView { getTileObj(id).setMaterial(material.get(type)); // save color-type in the "state" attribute of that tile switch(type) { + case CustomMaterial.EXPLOSION_TILE -> getTile(id).setState(TileView.EXPLOSION); case CustomMaterial.SELECTED_TILE -> getTile(id).setState(TileView.SELECTED); case CustomMaterial.MOVABLE_TILE -> getTile(id).setState(TileView.MOVABLE); case CustomMaterial.ATTACK_TILE -> getTile(id).setState(TileView.ATTACK); @@ -162,19 +180,23 @@ public class BoardView { piece.setPosition(arrival); // changes position to arrival setPiece(piece); // copies the piece from origin ID to arrival ID pieces[origin.getID()] = null; // removes the origin ID piece - updatePiece(arrival); // updates 3d model position (visual) + // updatePiece(arrival); // updates 3d model position (visual) + updatePieceWithAnimation(arrival); // updates 3d model position (visual) but animated } public 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)); + piece.setPosition(new Position(1, white_death_count)); + piece.getPosition().setX(Position.WHITE_GRAVEYARD); } else { black_death_count++; - piece.setPosition(new Position(Position.BLACK_GRAVEYARD, black_death_count)); + piece.setPosition(new Position(1, black_death_count)); + piece.getPosition().setX(Position.BLACK_GRAVEYARD); } updateGraveyardPiece(piece); + pieces[p.getID()] = null; } public void mutationPiece(Custom3dModel model, Position selected, int type) { diff --git a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java index 8a31a02..ede4a37 100644 --- a/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java +++ b/MavenChess/MavenChess/src/main/java/view/CustomMaterial.java @@ -9,8 +9,8 @@ public class CustomMaterial { private static PhongMaterial[] material; public static final int BLACK = 0, WHITE = 1, SELECTED_TILE = 2, MOVABLE_TILE = 3, - ATTACK_TILE = 4, SPECIAL_TILE = 5, BLACK_TILE = 6, WHITE_TILE = 7, WOOD = 8; - private static final int MATERIAL_LENGTH = 9; + ATTACK_TILE = 4, SPECIAL_TILE = 5, BLACK_TILE = 6, WHITE_TILE = 7, WOOD = 8, EXPLOSION_TILE = 9; + private static final int MATERIAL_LENGTH = 10; public CustomMaterial() { material = new PhongMaterial[MATERIAL_LENGTH]; @@ -19,9 +19,9 @@ public class CustomMaterial { material[WHITE] = new PhongMaterial(); material[WHITE].setDiffuseColor(Color.rgb(240,240,240)); material[SELECTED_TILE] = new PhongMaterial(); - material[SELECTED_TILE].setDiffuseColor(Color.rgb(50,200,100)); + material[SELECTED_TILE].setDiffuseColor(Color.rgb(40,150,60)); material[MOVABLE_TILE] = new PhongMaterial(); - material[MOVABLE_TILE].setDiffuseColor(Color.rgb(50,240,0)); + material[MOVABLE_TILE].setDiffuseColor(Color.rgb(50,200,80)); material[ATTACK_TILE] = new PhongMaterial(); material[ATTACK_TILE].setDiffuseColor(Color.rgb(200,50,50)); material[SPECIAL_TILE] = new PhongMaterial(); @@ -32,6 +32,8 @@ public class CustomMaterial { material[WHITE_TILE].setDiffuseColor(Color.grayRgb(200)); material[WOOD] = new PhongMaterial(); material[WOOD].setDiffuseMap(new Image("/wood.jpg")); + material[EXPLOSION_TILE] = new PhongMaterial(); + material[EXPLOSION_TILE].setDiffuseColor(Color.rgb(200, 80, 50)); for(int i = 0 ; i < MATERIAL_LENGTH ; i++) { material[i].setSpecularColor(Color.rgb(100, 100, 100)); diff --git a/MavenChess/MavenChess/src/main/java/view/TileView.java b/MavenChess/MavenChess/src/main/java/view/TileView.java index d92276e..a19c08c 100644 --- a/MavenChess/MavenChess/src/main/java/view/TileView.java +++ b/MavenChess/MavenChess/src/main/java/view/TileView.java @@ -9,7 +9,7 @@ public class TileView { private final Position position; private int state; - public static final int NORMAL = 0, SELECTED = 1, MOVABLE = 2, ATTACK = 3, SPECIAL = 4; + public static final int NORMAL = 0, SELECTED = 1, MOVABLE = 2, ATTACK = 3, SPECIAL = 4, EXPLOSION = 5; public TileView(Box obj, Position position) { this.obj = obj; this.position = position; diff --git a/MavenChess/MavenChess/target/classes/controller/Main.class b/MavenChess/MavenChess/target/classes/controller/Main.class index 5e69f5ffa85aa5268903966b3a16a5f30e180f58..8d4ad131fcbb83edbee5e5d469a9676cc242489a 100644 GIT binary patch delta 4504 zcmZ`+33yc175@MCX68*MFUce!z(`P#B?%!06@ny!3j{?LK?EE22^qu4WD=7IsMSG4 zsM@*>E}<$Yl_*6k246smq7-XEQLy#XPc3!9rJ{Ag7Gi*&`{vCAZOxZ?bKY70d+xdC zoO@<t*@laKyN^HjJb+PrbCYkVZ}v>QXX1VQo$!U5#s}-d3xn5%h}^;nb@er&Na^JI zrf_q(K3Y*U!@xg?%mh2B>B9khXyPM$OqjKy=E@}v5wWO`5<Low;tiR3ejh%;rv^SV z@j3n}$nmQ)bK`S;1Je%SO9Nk-_*eW6UqA05d}HEUd>7y9>*HOC?@jz0|A~)DKco7n zi4NtUC)_l)F%<G)COS<Vb6Asui=&El!XzBlq{YDoAKIyz)Ul0liDOlY;Wpu>hj15; z8&@=4tmrkFMqk{QJ|t#P5PZ(A6)4l0X)+5h5b5Ej%IM@^Q&TY7Y%n{eXRky*GnH~T zlX(yfvq|ER)b@$An-34Nr^$eF#w*TDZ4Nf8eXy6wd^{`owV}9`o>O+3$v&7yWHg2Z z<nmynD2Hl%sOIS=`(ZbcwlExtOb&<U+x7!Y4rD?6c=`ZOk;y?Uju)Bdc}h&4!P0ot zEQ^(>Rn8Jy7AR_{$zd!b{K|<?Bs5>pZ7?FMuqb)t3cbRIw|I`p5lNp%*GK9bRS+vo zp34G>s(2_-oyk!q&vPO_J{+x8tP4zDs8}&Mv&-u17b@Nula-1mc{VXv8=fByMh#w+ z%BUpI$FV%e$4fZg-~^KsIZ52TD!3?E8VN>gOE0ayO1w^ladbpZMCEGHgf0b}S)tBj zvI)b@DMYuz_!P5SOn|4Fyqpr>O!0kmeM304dw(k5?adcWH+V(rl<ggGIwu>PA;;@f zKr~#tpxMVN#h#sFUl?v$P~YI=EXAHDC!5foa!n`}l9ZaO*z;4!cDz{4$tq3cF_yI^ z7pN1;loLA1LxWePur89w$--eVzyW0yWxc@$lUK7*47)-xG1$C-(1X<yBv)a^xT0}B z1lVly8ZL@|Y8ITn#N@TSPLfI%8xx8&2dhNAuxN}Ax%{Qc8+c>ekc=D_rG>i6+Mmpl zWMh!cq{Q(^X0QJ4P&8C`Eun(ts;gfl?Zn&QXiM!WPE-7r%xN_Zq7#;nY|S4^7R&{W zjp0SXh_IK)ju%Qor8pVMrR_5k)H)}R#NH7lv#3HAny)gp?eokqGq?Kq9Jd+#qsi@j zzHOf0#gRKyi?S2v$|a?tMWJYOX{CBr6iv@^^CcCkohF}Qo1bmMcv&(2Z1QPt^7Ak8 zN3sk1>`|;&O>X3qa{l9@(NLqEeW50UuM-2}`}{rb$?<bvJUeIQsF-x!QpmpK+dZfq z+$4m?rSkOH%naTnw3$%gGTtn2<Z|93&sf`AIity?@l(1jjw!WKVsrp`T)~yl@dgI* zSG-l=(vi*Ec)RdAF)+asl(QT-Mg5w;5x_eHBOC5cyup4Q>YMDq0HpCwY*OoqxXf|Z zt8d4~EqE&F?=ZjzO%!Isz?_qu_VO;?Eqtm3OMvJb;euE8SrD(x8=z@gJd!soHfS^E z47TuY3nn<^{v9}A;e&Elz-8fJxjW$AiZ6&3^i|Z?#16EVdqlZbJ{19vKh474))Vg* zt5@}MxJ22BdBToiMLBkEwMf8i;YbU13LQ&;xIKcQMB>U1tC8uD$6N5-HndkM18cBF zw$oMa(aQ`Q#UmV}1(k^xF>FE4B)xwJ(=BGSz~f44TM)RD75o-+E>39V3C`JK>v-c$ zc;jp^`4$i-cUV{^dKHFjvlUm^%ej>w@sIQR^Kd+^d;i#B#r>a+^p{PLe(xHXHsxB2 z>>sb#dOWVq)n(`51`HB<z8r52(ou^XEI<JkVlW~YiaMN!C?=pDv(PBgCM-rXR^b|~ zLu?V&%j?s)9<SmCyp0>>)?X?)coQ?RjM=!Er(!t=;TE2Y6>?wP%JI03vvE7;;ZBBd z7n^Xm<kCI77pwRH?&V{+k8QZ0yV1h8v6_eQkd}vswSHKu4aB2%-pxXqIFQAAVvI{c zEXD|~5&)Mhx{~)Po-DnbS-f9T^;K!<4+zhV!R%m*P#R`&H&=^=u2M8vBtrdG%8GnY zqS0Nn61WdZDkt<Gf^HX3C9>0doxpT>Vg>>RRvKtG@QM9@2r{)4bRex0ZUcupQ7OV> zxKN(#a}-0hGyCS{bRgr1;1j#>a-v{7uZVwAFs|XQk@<e_I?Qm5>aD&fsGRJbuaePa zXMhxnBwucVj#*IIr(1LwcH*UIk@-c|eYwuo6PuT7@?2kRvByYdZSj;z^3uE9mEWRo z$#<>M+wzUId_u{js*<H4q~!8JDbQp_DM~U*C1h-lD%>Nhahkl;Dmt087Eg6p?5hwB zi~SWtJ`+pirBE?T6zX8bwy7blxX~^_!Ldr55>!=OtBUfc$dclHrzw<#kZ1nL)HTnp zUnRGAw#DJ@wa5&36soJnV!0BONR=g*7ix&jvp6#TevkZ^(*S->FW?d=+jW~7(yGmK z%+GJprWs{!iJRs3u7%<El)05_d2Ty~DYpWy)ba^3vAz?MSSlu(H(y}p=w<FaxBvV{ zF-6v?&69xKFDEIIisbvUmr<Icg{W}OAjPxrjKoY{=ZHDaT<(^9c&e3;=X=)j5~X$0 z0mhQn${*WC_B*<T{gk=V+h1<?SJ|dy+1PTA+RVjehUz!ta+$s!IRVc$rdO5Z8ST8( z;$@Cxx+9sMko=-cQsqdhlqA;9nO&k;j%ZfGNRBiKH`kHOO-O=Wl4?g%osh_(CvE(W z#GjCax+G)Q!yoVj+&dT>Yw^l1LD(?~CrlP5B{>HY0vt#PA|g;ZrlQ80Ev%EY8?Hj8 zDyjuJ4ylS(H0(l66xc};zeu{<m*r3EL!FU)DlF_#-CI}Pn=_;lLE5kvt?=V<^uiO; zy*FSuHexiM#8lx|iF_{Fq`z;Lp8l-#aZ6hE7HQR6aUZsc#dhI7k5}*l_TeSGgV;{# z<h$^-G^k_JLbLE1Psd&s<8=;~;bA=Xu?qWHgTFG0zi|oPk-_DCu8>jxE*Vc(;RCM2 zhkOzrv0Z*8zKDa|gHN~@pYa_W;(Pd#2k{j@m&^JnzR_IxR?EV7S^$To(|@lGjNyn@ zjHB8xbZC|ML7Re3Er?@UGmdLF2!91V+U+#7hw0T?>C>K}scmP5wwsySK4xiONau4i zTR)9C`UvLgQ`t?gW1hZ}-Ssu>p>JhReLwT{kJwxPil^$w*vI8%Usn$faP{RtSFD)D zt}+g`?;A_5#9lau56k7@l56r(u92xrmli&oYwh_f3t{`>aZ6-M_=xCvBo>u?RHSZ+ zL?PGNy!UXC!#gUoo6XbCke_~PigU{b@&x5~LhX*x%g4AL9@!1qDq=(34#~SpsK;g8 zBWm<F`Gj%-5q%Fg$Rau#^<DhEa@D@A=A&<?Oo*K@<TF_Ap$_zt(NF%5qm1${|2YN4 z$8cqWK8oB<^oq$`IHD7$$k(~b^ao553+*^+47_E?FP4D)*CTL5=A1yTUsL07;x5A& z@kVY|cm@?)*qNLklk@Inc1ZgqG?M#~aH;W?%8F0%4~S_3DMR=Ffn?K9A;<p=q?(eu zAQhs_^$z0s_W8-+Ed|w6?!m<tuRjU5+BU4Tfz>P^iYZ@B@o=-qbv`S6jh3W1AUom~ e`Mkgv`6q|k#aA3^w@|N%mQR-7%Qv_mf&T({$5Ffh delta 2113 zcmah}Yfw~W7=E5*FR*)%n<&d2M1ciV3{gQq15^TyL@{p|=t>(4tGlF5HSTn^rps7o zYNCre&LoXl#!yRYI?k9~Y)0!xKbkB{)6y){tke*D&)F3n#-=%Q&UwD~d*A1Kzvp|u zcl)dz#nwXuyY~Sor?1CaWVIc|w-$V-;26GF_gbe$9LEU@epGN$HP}XlAIDD$e#U9F zz?NRP7{4eui(d(|%QwU8bP{nnb?u%NPWQNakI&WV@^qBuF0x`V&MEjE=hc(8@m4D~ z;12~C@uxc9Hn!|<1(!k;_04NLtmwlP1^-|VVQh7FF0|q`Tvafj8N$WT(AnJS6iPxN z)n^rZu~DH3^NC2W)937**X$K9=L#!YXi*rBLqtTI%k8drIhX5!R)sby>QQC1d6>c| zMyr;{3UjQ&I1X3qB8w|yHTsbX6GC~_x;k1VFD5E5F^Mqc)YRlQYECH%Q$tR3J)Slz z>`Ygf!Ax~qRCZ>T!qFTf%S%F4PIqVXLLw|Dx5|n*<|xdiqxW1?EFH#n&l=G#dZ=`= z;Z-3SWl_yZb;Km8Z7~f|>j+z$q&3~^b**W3_h!brIBcPni@4arB?_0askbZ6NZzAv z8lEz$Mayit!ntgSW<!*TD>Xx_!g}5nO&5`wqppt4NS7IX6K;idoGlX9baXhqmF{Mr z&*`(!qo&0>jH`)M^~<<awJm;Sd7hNcI8YwI<mdx?1Q?hvU$br;#sa}g(1Bw)PDbQ- z7RooTH)=#BnXfjCTwATVl}peu#B%~~Lm0k*gGHPubT-7Wn3KfTk1;`;uuKTiX=pO1 z2w{mDm5^X5MUO_Vj!m#n(h{-4Am631py{S$!a0>?dNOien!hk!fKf64?dtl3(FR;p z-$<BPSrEWCB}Th(7k(hRuv0^)i2dj*F*)8tlid`+nJx?$+$wLW-DD2na5okNC-VdN zO-)bC;sv!jF{|u?W)<6CUC7cRFGq)OhN2_m7R1~j3D-!j&DQiZ>UuUJUhPSY^ShCc zb`+rl74V=AtFQz<tV1Ur!~J*>Yp@k-@vc}t!2|dT58^b|(*i%^@vs#2qq+!1Fp0<O zEN6wFe4OPpK?dRakkfg)NG&o93T$Vk90^$k`1QjKx>X~LC6ZtoB5X+mD6yc=f}<83 z@5cneg&8SV5P3;hiG%n!D6(O%h-?vde_jCnWttoTT$_^@prOQ=+{I<d#?4%mY}vwe zZBEn|saoyE>r%DoP_&w-O>2WQuOLm+O~d;Gctmh%fMFpM&6=MjzzEGC@9Y8@L~6zY ziJ&gIj^cG&fFsloQj*JXxsUb|J-EPb9`qBW``L{JA)AikyRk78p4^4U)tFSf|0V{z zagZVigKG_0zZ;X2&0GF|Gq=cFue<<0*UBYKFPCk8<jUX)Io%D2#FL1_Q%J_s$iOpl z-p@((Y(y=dM-yH^tJIALFX17)ED>EYvlXvm8#bXEZ_2X++p!04$tmu@5xkAB@eWR4 zCr-&#JCFCJn+I@JS|qWHG1$#yY1jU2DWyW}WhwTt90yp5kJyNVT!v5S!e{j1FxTUV zUXDu;A&XUWhTM0PES1BVQjTUJo*A?Wts`WU(itpFKW9l_koL$2Sflj{MAFMUBsR=1 zZPv|NfkwSZQxP$M3b_bUqkY*q{Yc^!OzB6W{HCVIMH{r97pzfK36b0Ym>p822Zr{v zxq8a!L67UHz^u0@tr40zhj+qn5K3vVx1eO&P|Di>pwv3y4N8qsdU%L&nk1lgHbn|A zLGI6}0JCr6ZP5d(b>b00$H80`$#9;`hjG3T7}&@K@|PX)Zh4onnJYrb$$LZSK0)o` NWtHVSxQbrb{{`kAuJ!-` diff --git a/MavenChess/MavenChess/target/classes/model/Board.class b/MavenChess/MavenChess/target/classes/model/Board.class index 3f59b5de49f9289154a28c351733feece290d730..d7205579cb1b8491f6d63f543ac471e8ac5a086a 100644 GIT binary patch literal 4599 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 delta 1955 zcma)6TW=Fb7(MH?<FGgvj2#qgRcV06af%}G01`ncB0wpGTPT-s4W%K4I0>->;l5C4 zq2bPQDTM+B3Ps`p1Ts=9@rEk(x$0XVE9D1N?F&LZ-|S>Ph?iLM?w;A1bIy0Z+4*nU z@jB=Cx4*msFdvVfId4PW47*{@))=;-&O&)l_fXqFZXoX<jqNdfjvW>z>?*Vk<n!G- zhAh~b#*Gfj(H+B1^mr%iX=S@&*p1%jPwaoJNI3Ip<2vtlWVu&aHp9)K4;K2V6~X{& zvB$uJ#CZc3h=&Zkmw2Cnhl%$a_yF-i10NzjY~UlPb#c@fa5>?afsYe^WneLM!oXta zq=CiI*9I0t-xyd7oigwtwAA9XF+fN7*1#^}n8d%NGZ8V~tC&^<WxS4fx#(-_j5n)% z+oH3oS7k_GGR~>>b7AAWdRl-aF7U}lD++q75hJ+Bu@Kk2z$IMf-Shq|pXZM7X)))@ zo6779R5cYbrHEA1nr9pd;S8^idfR{sWFX2l{%p;|b-047bZB8IJ`<;$GoN#W)6tx% zSx<?4KB)$15-wMhIRTl2Yb@L+Tc*icG+9*0-e+nyTtx$-D6XqKEap+;6Io|fmcZz* zNOz{vFX2@?e>2m6ofda2Q@#y2MpcsHc2p%P6^*JSZT0jW6~gS)U${Zj5qKPpW8xdM zMv<-_`&Cf=drZ~EH1jTu5f&3Ih2r|Dw5eJo0M5`pENsGNy?QpIkaw}HEN7#NSW+VK zIX*EsVgbiZY|tF-WR^-2S&4xSZ|C1@j#ap&ZZG4`YBzFC1eqjMty04+{Gb^N+(BV7 zrm|$}STXbCBGzVS7STA?eaqNRHIxTda#OEjbgNN~4u-RaVoQOn&l9Mna9eE$a^nu4 zLR^+q`^~2IUHqsW{6SLbNq@G8&LXyWt1EJ<oDUG?@H(DP>oJ`X%t0r0Hew4y?c-J2 zUgs|jMEfC)<<Z9j&Hrqqu?`|{Fx`sB<ML7RsMFG$_3liv_O2VKQW^Y)XxN)q=_n7C zioXjJu$`Z5ml10+&`j!BMTza1+$ss*!+kAsgcMR=#uup<kuSKZlo;#HGV%`I?@;#< z!uAu+wfXhBvLU54-BjPn!=(oed@fa;2^?fpz_PhAD)f-r&h+w;^70@kSk4jIKlQ$s zwDywFUcQVkco?{#zStOZ(MuOOy6D4)=rwYv4_ws0n?s$_{%QQ$vrF0{t@8I17^HTd n+68J4j$ixX__Y_kt1V?O^tFeny`S0#s69M>?MGw?;phJWdXE)k diff --git a/MavenChess/MavenChess/target/classes/model/Giant.class b/MavenChess/MavenChess/target/classes/model/Giant.class index 212b8b22a9ff9ca0be66779f2376a6f0e3223a40..3585b01c7aac9a58774cfa823e3b6de25154838e 100644 GIT binary patch delta 752 zcmZuuO-~b16g_Xg-puQW3XZf^TNFQOi(hrrs#yF$(O^l4(UAmHB$3#NE=<HtS+LNh z8C}q26T^ay1_MzHdtLe?{1GguXQtx9IGOkEz31F}-+kx(-10r4er$YQ1JH+?Z`H3v z7F`m1UF<`5*eS|(76)7$#G!CpbX!MU^dJ|$7Mbvim`}eH5HkYuVRd@q$>bwO_qe9G zo`x08?=T-!tK&@4Mh6ArU?yD9Ms$h(a9yi91YtoSA5QDZT7g3-Xxt@H8@=?ppvUo1 z9HWhxc66{J@{Z#Kvjt9~NSg;V#kvH!rB%pa1<sKCrUG5B1cq4&Oj>K(Mx|uLC=r8* zNhGlJO3AG0zU5gdW37P~DZ{gReVH;NW9z<S_{vkVf!m%_$M7oLpyxB%ma)T=o_c)0 z6(l`73RaN5l`FKMOdW|_VHx}9;pAx#--)9-EW>x^lvrpk&RN{w<UiIpxPeH70c_{q zMhV)H;dP7fa1lF+cVY-h3?qdR?7|q*n8j|q!yeR;MT2sE;KMC4{}ZNS0iRKjS>$kv zeROu1giqNd`;6f<J)7M|aRz5mbJ+AQN(2?DS2#z{iqyoW`b#*E3sl_Z5q%s<<9P2; zMn4BHqJ~TKOk8G-`#0+fv#t_(4%uW|DX~=|D>;J10Drz^llMr-iGK;fFCxn%H#rIS bPg#pKRg)+FujxARYdlxOb<Q#vdpCXqxjAo1 literal 1746 zcmbVN&r@4f6#fo*$;*#NAV6Aep}(jS2x(e>q}U)Wqy=LGtwvj5Y==kkfLlWzeR<Gf z?_b~!7A{=qq8oLb;@BC-l?xZn_<y)_#&K2rUVcEK=yc=_@7;UuIo~<=`_8@j_1TX< z0T{zf7;W(B&<ywy5JXn(vQ<gnR#wRp1V&X=xnqK!M4`E0*OaU5YBoQ3M@LZ5{lMHX z)9bFPq{kh{+$^Y?8-|Xs2N)6f5}sqbAbJoWgbsA-h#BZY_g>y9Wma8*tO+^~XAHwY z+`us$7ii0tJ6i|Od*)XSoM@TnJVURSy-(mz<XNa^Ic?w!&I&@Rma`qlDlrXfn-8NO z=XJbh;B^e_)iGh4PFbL<+KsBUx+&;?fq=v1HJ}C!3?WJ8RBh6+NMZL2fu5s|lz|IK zvj(%wMDawS&SS-_E~jrTK45v-2H+(FZ!`gKs_HVgo})s7j)JOMGwZ91mh+LhSfQn> zV3*9w9n(?XylK?j6;%_oH><7ln<XzLyJ9;eIxmQk%kd3URlKlid&8pt`Bv3+BC>;x z>JF+*7~OOnwP98Ww78$75yK>_4Y2sXM2q5XD%O%G_&nVmwY=h~;@Xs7E8CB%f@23a zwYk>X*uYVsqlZNqW0CDe*DQTHZLT#b2^H0H)pXY#a+Z0CeI5xKF52r($(mFi^Wi$J z7d!=VmVMpEqXoV-?@U4PCTDs0_yGD)vUdmaZQbE5zP$rTGaZ9?o1-%gH)L>`GjD|l zgdpB%1n<yWa0OX@3ETD;<3fNud<uPT2cc;#qxmv^Unbzo=)O!auIXRO$4_C*4SkR3 z6ZFJ2|H?vR{K^ha&ZM5;)E2UF|2C4zRAb@XHX=zbB(@M5=6Cq6H@kRXme@u>%lHo= zmybXW{4eCdbI485dg=Q$r{elH`u@A-MwR-}Smo!jf-j5pnI>O9dp!IN1<~LM_!S2E zj#9oDA`~l1xnk(y6UT8reK<+sdU2Jb>o|p3oW^~e!xC?v3I^aJfk#N;b6yBrNaG7! z#CN!aA1Lt8%<v1Nf1~8T6X6eB!=D((-<S{sIqAZboIqasa7#vTTdv{*xsDHI7Dc&_ zyRw8iQMe~I7V6FQ37cg^E@PB6vK!@LtIarimp=!>D_t?qHMUoT(c^454N)m!0y%bb zOcuC@9Gk93?%@VUI`7?iOmY;&6nQZAFy13Zo|YmycS%D?M~9Anoe|>w0lQ4IZ`ENm f?f&-gmHIzF;az6kcWQ;=eFC@PCX*HFqv?MDzCvih diff --git a/MavenChess/MavenChess/target/classes/model/Kamikaze.class b/MavenChess/MavenChess/target/classes/model/Kamikaze.class index 621fc71ea9f694f98ebc401e45ae56b6b263c205..bc82b5d2c762f16d0c5a41e2e7af6163853c6daa 100644 GIT binary patch literal 1804 zcma)*U2hvj6o%iicXw=O-MCHNHqg+tX&XDv2Tg(taWMJ7flxb+2x@VO)NT?hY`gYG zYdbXDA@vV%36~(m1via~5{W`3Zn@$2AfbeJ)*o%sR6_Rb%sF$;nRA{w^Vh*|&jDny z96<m<3C)BKLm*OdH_Fb~vh`I}z?inHc0DU_Hj!`X-I`su-D+krd0QeR(DT6Bw#FKD z+ZmhnJZmR!*Xj{SL{z*kfnY)zMg>kC4G=~*ViKoKoIy`#_m)+$A6j3R1;my>?D(M( zn24J=hw}p3X1V^kAAeD)driF2R+p6GqDr7oKu;_(*9b15U*fWfD;N;yY9=%1THc0$ zv}?I)xw0cL@JgM>Q%K%bp{|*@jzI#lYYSeP>Gr(hs0<~NCWeq=n$`vniYM|uF2|~F zjuqD)l-KJSWoKf<#3;rD!gg)m^*nC)rQKzn^Sls&?z~+sFEuJ_W$!a<&7tN@-d(qx z+m>f5xuw+VU)r@7<k~zl<go5Ku1Bzo0;kDtcH6QY<ymmI%XGQguE2+qNj5V*da(>6 z9&wPAv^>w=wj4@q6tN}{ZJ}!V^T0|oaQroqbjxw>F<RgYX5<SDd+umaJ6r9-22YAI zef)N^%rLrAx7HsPtSujj#2l%v*qc?W-tdSm{XgnFF|J8yxkp<LUx3S!&nI4o$f#Q$ zZ3U7io17Ruvf?(p_40zPt~T1fw^7wDxXiZ_;A;hfASxLAzD;S7a*(qeN?qKC*yS>S z8~my_O*IWe80V_LX@&_*Qc^p7bPS?a?;uTUftz@jGsB8Mctn_cPoF`S_7N_`Lcd2! zL9JNQ^kPZpFu0b1Vks0mD3)S||D`;oH7#kO(L$$%zbBPJh*C^B#-v`H(t~LuZuDx; ze?XyEiyNb9*{iE5^bBTc=vSQD!`ZmJ-&|dYhwks=&85^xQ-14vbfrf2aP>QchdC$i zJT}D7hr7d1n6~C47)2M?Q3AL^1Or&bHEi<HRxyYM68IKL{KU8U3-!BvdkWJk%dX;m zyhkLGR%uLeglOB341oo451(S1Iz!><;CxD-ED?qn?E}mZ<2b&-EasTYD(+yOD;*!w z$Lv_;XthAiGPFa6l@i?&mn6@X_=taA&LMILck~iwYe#VJALxgw6FS>1H%9!JBf#De z_yo6FR~n(MPW@8rO7nqipY|hW0%<L-adG1%>U|yPnu1;!-or3Cr#O?dM$Ugf4)XhF z>ILoVe#1<VK$^XJ6BpP_6XZC>-wfpi>holyC{Hqz3DV4S1lWj^K4pzfJLi*E9lg|I z8=|KoDqf<eG&yP%y>aLVh$v>_Ur2F?5$HY=@-!7E1xaga=%TQ-_!KBEF+u>v{{UMA BaJv8i delta 702 zcmb7?O=}ZT6o#KWnR=6Ph}aJ)Mw9wg+hl61@!MK8wYITT3NEC(gw9Y4X$K+}cliOj zuv}2$%AM|1kOnNc>dL)4e}JGH>DuC%L<XUBAp`fEIp?|OocrGUEWPD8Uv@ry1|}%4 zJKvL<oXY^m%&N*xrZ~U}my?`QbS;Lpu&z*L&1uE{mCz4rqw~wbVh~}&E_n(H_hI!> zDF{~Q!nME`+B{W9GY)4trzyIe=R&-<6jtlLnNm6PR^2r_YTV3Q#iXv*>&t7^nt5T} zH$Sauvz{1iSjYhEll7vES|%YM=zQTw3-v)<i%YUPVkInKlFQ-^bTF=PRsNz(H$74$ z^5jrLE3PpvR?4cTw6G<&y@_6Ek(%4YUC4hVz0shzZRu~3x#x{+kbNM5<MwNo#16e; zEM{Z0s}jM&dQA=%#Evydb@uLt?SJ6Mf8mu5{06_VcN71An(PgG@8#fjTf_;uO-PG` zJ!I(>p$;|h=%>hGX30<?#}m=^IfJ}ph<6OL#R%Ux!!Nn%Ncnt6$yoVquFDHkQuGHm sxG9Qf`N}P6k)R~J8|Nk^ce_1+{hNwLYuvukqQ{g3E$#?7-S%ew0J4LF&Hw-a diff --git a/MavenChess/MavenChess/target/classes/model/Magician.class b/MavenChess/MavenChess/target/classes/model/Magician.class index 9cb9112d36bf90d87c427dbc257a0887af5d10bf..a6c93ebe3cfc690fedc4ddf1307820b1a0664976 100644 GIT binary patch delta 149 zcmbQv{+*rc)W2Q(7#JAr7<4ysePvYSOHVCv&M(MJO$o?MO-^NG;MdUf$<0qm&Cv%7 zSWo`TXu!z2S&xZ}(Mpp+i-D0r2B=*hNHYRyR;?`zTpNH4CI(p`$p#h_XOIK3c_0cH h<QWtg7$%!C8*@rAurf$9@G{6uE@YNx*9Pm-0RW5s8iN1; delta 56 zcmey)KAoNG)W2Q(7#JAr7_>KXePx`i#H7c_vN@26i*fP{W&=(!237`f23`h<$rqXB L*)@R*nHaPH&S4Ck diff --git a/MavenChess/MavenChess/target/classes/model/Nwap.class b/MavenChess/MavenChess/target/classes/model/Nwap.class index 900487542c16548ca728b2437c64d2dedfb7bbf0..c273033df9b7465fdafc8be19375d84470913a55 100644 GIT binary patch literal 1955 zcmb7FO>Y}j6g|%wXKH7hCT-Kwra(heYCDciDNO-~&?Lmv#Ysa`0?8^b_K;3-X2Q%k zRaX3jZrFqs3nVrOQ3)D}O5Lzy%aR|!0wIu)kf;jcy!i-m+DfiQns?vzx#!(;-@W4> z|NZ_xfC((5kwBLY%|H^}0_k<9VKz(i@|G>oJ#N{SKOt}=TZ{aTXZe<6m#ewO6b>Mz zBW<7u#%|=?Ex93(GVOWkdD8X;#IlZFfx|cDrYyC5t67?KUAa}WJU@*L`qat&0$tgV z^00v;7!XL-ou=b5ysG1vKu?r_W!6n~@^J$v)Un15=}noYJ?m_m4IL*1dfQV~;O7iH zk5lAgYJK~qq%nvW44lTWfVO7(9|XBnmHR~lXJhx0a^zI9c_x>wvI5FeFffWD6<gl4 z<GN;@iYa9|jhApv$IAxJ<CWd?ryS`vSXj%exTeXXJW^N{nZcNWi+GhxvO)MjwiXnx zDebk=)zzCkq#T~`x`8sr1$4`svCZ`@fzyvL?$?`Jrp{?zv%tZcWt(%Y^;OfoE?1lM z9I82W*<6&arS_3i^KV!lOC2$(D=rK4vsROv(rPNCDnB8^@#%rkaxTof{n8n#OV_nF zWs^6uDv*hI!x$EKJtP}=LiEx09Je;&JkLHZV0^#+2_}$P@MZm@S-BA@Of6Vzw)9&r zOEA`fhR2fjs7u&wd&4vRJzFiioLl6SEI2K<ZdNQ+?3AixQC%&D*rf?hq~M$5L`$R1 zk>vXg?yjMW4`Ad+PVPYDyS{^dhx-I)80ZatOA(!BbPwL7?^KA#B}{V1NHqdvQx*q| zkpfeg=1Ts=Up!0W@xR|gW@!fpXY=3UkoGzL<oe8KkoPdSMDy9Z7)mxm<4kg82idvN zyBOI<{|ML8Hc|zy7vA3sUwJCH7PD&|v1>7VXYeSM5Iiy(ZeQER-(lKc;t#r>sJHQS zdOL#uueUS!uHKH|vEBf@M{jgZg>TpnTF^ot;yCSow&4K!aE#9hoa6Vc!nRpq<Fqi0 z+c<+Ski&iC@e>O86{GB@^Fqg%7{Wy{hO(IF=g7n*@d+lyr<f66qauDlRs4)A;y26& zt$7(bx!>ZWn)Eh44lQ!TJ~m?9xU^=Ng}?#v3*N?MB*?uH#a4rMj(@wtW`2jB9Mb=w zq9dbY@BxYsQKV6PfWkvuXmjOIBRs*h1m;lWTg_UDD|I2s>gitv05xQ46oL6bfe`|t t90jh@9|lj5P7QK*ez0vs)&DGTon!W1z;HA~#VX0J#$Fx#E^!H5`wtU8sa*g7 literal 1743 zcmb7E-%k`*7(EvThFu2~1qG{B)XL8CW2FWBvA7l}t7{i(LPLcoF1sUMyX?@}SqM-5 z3BL3NpL}T2x27hIB%1irH(!195AeY>ZPKJkiEVoB%q$huWZg~X-udQy=YHqA=iX=k zK7I-ygXuUL&}hQ2(1d1z_=;O}N~s%iy)4i?rpn6C2y`U!QQWO4U%BOU&Ym;TB5>%A zT$8D)uS%(L&yyQ@Rq^965!ZbC1R4|eTnw#fGqK;o0krQdF|#gL1)2(O$@K(8&cq>s zebF+?DL6W<)52jK5wLE{%7o*Tr`<KDNc4h<Zh^MlMd^f(EF8meBFKGUZ_#md;e>^g z=n*iM9sg!fUrvWlTR2k-&+EWhEufbLCUVrOBesPk`UGOCGU<ArQ}BcIg*XN<Xd-3d z9ENrzOt{ixrOm36^&E$ddaH#tGfjMEVHhK1l10Kh6ZxQ_C0SlheYJFli=;Jf0Ou`S zz(oO5Ri?_$%7(z{w;1>8wHK&!k{c?pKd;KpOm$_+@xGQzB}NYB-GVI5Nl)qbC}{Y% zRfX-2nDic{1=`uG@inPR8mYH{kTbQ_1EFa<tb4Z+m}*MTQ){xs9a$1+jd;TxHg_c? z>wHi4;oUWEtk&x6eOJQRUi}#s&^qhO!nf0MHBuOxRm)}RS3S01v<?mLB#qCyRj=S= zm2PBAcWF>>8+z!#2A(VMNp)!E^Ag{3XyhL-lYPgwARY#QG@ttPF-%|!#yC3}!f=^K zQ~yluW|HU`4^KdQ1)p;yZNpz&!T`kYPhie(AvT@-1(xvue{$@&5BUUL^PC=igpZqw z;p9});ub!c8F+-mCffTr_HQEA&+*f5-h?lH5ZtJ-8+EZ8HTL@8Q7Iv~Zy<af-NfHv z*+1eBhTf~U_+fhMg8#3#KKPE_y5Kdv0r(BQ(Khw}Ogk9R_PK>_KHF%XgS1Bnj_^Ok zt13&|EYdhtI`SS);Rl?>Q}p6FY`j8}emW<3^@tt}i&0z<H+Zu+xGe4>BfiIk_z9EZ zS7gNtTou3JdSK0KwBQiFz&Lpu$@*P5BS$SpBi4+|*#stO+!pbY->1+(?$sza%bKm7 tZ&zvNYmC^4|AVXv(?r)c24CwtwQF!2{jV{yD`fLH=>vA16ki6j{D11Bj-LPk diff --git a/MavenChess/MavenChess/target/classes/model/Pawn.class b/MavenChess/MavenChess/target/classes/model/Pawn.class index 07a780168facd29ef0f800edf01c6bd32e74749f..6dae773e174ac427e7b93206b7439cdf8da34f98 100644 GIT binary patch delta 246 zcmWNHJugFX7)Q_VxwqPCQc`NrDh3q>inc;sA{y`UZXprrpqq)wAQFqg)UlJqQWI%v zx0xEdFW>_hjQ%;vNltPaiALhp_XoTd;WxloagO6TN9mxG7_sKC-?rOsBJ{dU(nFu4 zpGi{8k|rQSnL*AO;*t>_$WmvFcgFc-f-iS|ljD~u#hF%y8I6)xfr3gDwalDOnAa60 z-Ls%a0@Yd66H9ubtQM<k7g^H}>-uBE#HMwzWl6Rz#jfSqvmN&Bj03B3XxALs4aauJ VY4bUpmMXQ6ND#UpM78Ecv;RdvC<_1p delta 246 zcmWN{J4=Fb97pl<{rT9V1qzx$nMTmfp}TgoCkVR-W|zq!YN)oRni?W#X=rkE3R-L` z#P+r(Y3~j60va0oFCRE?8i_{Y)$=l53;zu;O3oM|XOs?ny69{UdTqOn6Cvrc+nJ(= zUMA^do-_d&*2r?g0GAB$z%X^jcqhjv<9so}x4VCtQjBS3nb9b-Dv(!^f>v2jl|@~# zq<e~bWLb3rJ+Yz}N@}sL_8c4fVN-u>nb@{CJC<VC(v&UFo|UQCG5dDGfn9TGHyqg= W)#kI`FP+vtB0>0!Fz2;UbmSi{eJ9rd diff --git a/MavenChess/MavenChess/target/classes/model/Position.class b/MavenChess/MavenChess/target/classes/model/Position.class index bf4b97164c8118351d4b88aa50f9425eaff273f9..d08ee04d724822d2ca396ded99593f1d5aef9acc 100644 GIT binary patch delta 398 zcmYjMyGjF55IuA6ZnAkACGn9>Ow49?v#a8xj$ox2u+mzHVx@(JjfL0<c7hDp*{G0K zi{M{a_#qZHrZUcMBFKfg^Eh+noX_-A=EbFaZtuK%bh6t$+wUHp9<xJRd_gx?w@}ak zyzmWV8;?j`lhqpz?1J?i<%8bvJGA>qhLt{YuY%N=msmzZVj2cAm_Qaba;PH@SE`y! z>LXV97o-w?!DT^l7U2~dk{625L*dX#SR})AMj#F!sCAm+JJqHVzpM7#Y)m;?H^-EO zCR}#(&SV7^swj!9n!EsYzSJ`*FFr@``9UwG8ZhCA+$MkMK(}P`N4uscU7uS<O$XBH z7_J{kCycL6i$sXYKLd%_CW*cfi+pcvmzMvjYK?IX{xUkW#v5j}7#TF7%A3*BiWCZ~ Ezxd5GTL1t6 delta 352 zcmYk0u};H45JczhY$b8x1c4k-Vn~1(+h;@|h>ju!5(0?|3MfD_5fu~^NR-sn`w9F2 z6cH^I4ILlCH!yKfM6)+Dr=7Pi)gSLQQnIHG>i+3NKDs^0@6Yn<yBm2_&sP`FFaR3% z9m=-HDA{lf|BaEx3g<i=PLH#S3TmjsM~6vwy2f{vjs^U$K^3Y&rK#6M^gzwYr`}f! zGBklKnOHR^%B-U&=jLdqg)-U*5VCa{DVdY@Ciek5YqyAsc7+Z3Hk*|$Tyi}UN=|BG zcI`Tm+hZEZrPDD9lP4xIlZ45ld^ly3!pfI(7-R)wdTsK@$Ru`;2mOEaa7GWYMVdm! Pn_TGDP|@^hG`4>Mkf<r) diff --git a/MavenChess/MavenChess/target/classes/model/Queen.class b/MavenChess/MavenChess/target/classes/model/Queen.class index 10479f12d5926eab2359e138d32913df50571a05..99db5da17bccc0d501fdc65cf89700ac9c579f60 100644 GIT binary patch delta 14 VcmaFI{f>KsCo?1CW-sO?OaLg-1eX8+ delta 14 VcmaFI{f>KsCo?0<W-sO?OaLh41eyQ< diff --git a/MavenChess/MavenChess/target/classes/view/BoardView.class b/MavenChess/MavenChess/target/classes/view/BoardView.class index 0fa96c7105936d1ac4ba9becd2e2e9ba818040e1..dad9befd6db93d0d81adc0e81ba4275c84441a0e 100644 GIT binary patch delta 3467 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 A^#A|> delta 2571 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 agrDKc;bDi~4NdqmFR{8p4Caw03jPJckGEF< diff --git a/MavenChess/MavenChess/target/classes/view/CustomMaterial.class b/MavenChess/MavenChess/target/classes/view/CustomMaterial.class index 06ac3d5e95495a07bff9fe1ddba2c69a20ed8c70..8dc8f459dec29d3bd79feacd9f5bfa14b963d72e 100644 GIT binary patch delta 413 zcmYjM%}N4c6g_vwQ5;J@Aq<=Tvmccf%_a&fq$ZsjbyAC3Nj*TX(5eTJ52Ds>+V!)@ zC<t;DK|Mh90ui*17S)}JpvCud&$;*9bK0HFsQ&PEeG6b7wR8PV$wsYB*QwO(O1V+D z9ZO{@Oo)~8b*pOUorYtT3-zK0>rz+S)FB_$qq!s&F$IFjxPm40!1`A&Ge*!5<h#HP zT?jA&+R3y)LYFeI9-N5dK;-0mz)<gnD<j(B=mjDoe1q^-3$dDCm~k*E%qxgXB-EV2 z!zWrcROGe0FyynA-rGkKO*U{01E=W49s2Nue!O4+uNcG!hDgIObz_85NYOOLXaVEo z^1FdFZ6gDl^%78MhG$p&AZ!+^a2PM~5m3IFR6+<5@X1>UWmLR)o|Rcn$N3Os(}sD* aKLsA{<p(DJ<bC8<)Z<)#5n;{mul@kgIzP(* delta 356 zcmXw!yGjFL5QV?l%_by4vla%EXiU7|C5X6SBO(bJlV}oev9PicU&F=+P`1(52N1O| zUO*(32tI+OjgUe+!9tzgU@`wcoHKLgoa63RSLFHU?g3a}<1*4VdSkUhqqtcqRClYz zdZ|%1l?%HWvn5gY%{-k-vd9dAqqxD6mS7Row+PZEpa@c!Y$A5py$x&+J3TzvdpFqE z#IJ}3?+NcTiEVkkV=Mb<x{h^Xne!>#_^@)JW!2s%;bwyq2Ztm$BFPyk>io0bWS+ z${_D#_#!I-h9u62q#2cI{bw1IJmZv9CypU~x>NRDt1~LBD88y?WBe*<ga`?ItGZC7 o*2%)0CNc6l7F4Gx=R!LJ&zct&a{ux^(h>Ezx_?Mm^XJ$90OpW3P5=M^ diff --git a/MavenChess/MavenChess/target/classes/view/TileView.class b/MavenChess/MavenChess/target/classes/view/TileView.class index df2fc8f7e944a9eb86325a43fab5c5685fb402d6..10d5f7a31ef3220a528617df33384f178c13ee0a 100644 GIT binary patch delta 373 zcmZvYO%B0O5Xb-Xq^b>RL_?Y`)Hn6*0CpA<L1N<yPT>HSJ%9^XXt1$x09SCA#=KXt zD4Usi|C!%>yhuN0%x83e0GMJDnmSp=Y`b2pHuKdo#j19(NGCFalGwQpJlG%<IU!Ji z#<7Mf+gflC4XOvBaIFSsJxJI_6RqGSoP8S|S;g9rJ+asPEA%r50(G`&CEAd1HZG7b zzX(3MY?E*<377uDJ@i5QA3A?ZjCTLh1GTRlJ>^9O`?T-gkPpAKsnjz6gQq$a<Eqc{ O@~{GIc@bfxpz#|$ogYsC delta 363 zcmZvY%?*M;5QX2YB8Z|A2*!92@ee`83h2iwD1riPfP+T8c(4F#GQ`=Hct9_2HgD(K zd9z2O)Xiske*j3aKbtyT0@8?#JQRnH27(5kb($Aq5eMAnu>)9WqK7v6tOGc(F=N+9 zgVn_xi~J=<*%B+svX^iru3B`3e&U0Ge5|ERSHay+gM|5p5Ms?*hpjq1{0m2jLD>&& u7q!vjzw`#%YIMp$g$x>vZ?Ml_+EngD{f^w+`*c;|<zfz8xe;NfpyUk=RvSJ5 -- GitLab