diff --git a/MavenChess/MavenChess/src/main/java/controller/Main.java b/MavenChess/MavenChess/src/main/java/controller/Main.java index 9328f91194a1e86914b9c3feb04a53fffb1e2313..c1f195760832a964402094c0ae1839c8c7753de5 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 b7c82d5d6f593eec61e0081b49ff9a3b7f39afc1..1ba3182cfb691e5c7b3480ab6f3c34f673db4b11 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 edc669a622e0e6c050960be8cc960170c062b09e..f7f9d899315dbe08cf745ff005b441abbcd68290 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 1b8909d0c5df24f5dcb584d6ab246d61d76125fa..882a687868c44d60ebe2ebf59a4f8b42662cad07 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 c0cf19181a0e11db02dc4a7d3859bec71c424ce8..e43e4c502cdb675d20a30f055879ab2b2c42f340 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 e15c4485448bb39f3d3b33c5f2b88e0c1bf85c38..61b7f88be68160e78ab4b32ab5ac6d16838b19bc 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 69509fc9bf08129214730783e0d8bf5a87d9f028..a61afdc47e30508188f76d2c6bb7c0aa2e477bd7 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 b1562dce36959388bc1e51114e3f4f0fd448ea79..2eceaf8d503067c0dcbd9eee21bc718423e01907 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 08f4ae3130cfc72640421c3b4b2c3ba558950b40..0bf59fd6223f09a7810b6a2892ac682886312491 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 0a670eae9797be6d129e967426362892f28f6738..2608e65dadfb8341897a59b6c31bb3ebf05120fa 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 8a31a0209658c41f93c73b1257df2483653eb62a..ede4a370eba286f4263b2767f92ca8fe82a83fc2 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 d92276eb1bb4c1c82b4a5e2bc32f9f67ab69de31..a19c08c735df5ef18345256ee4a502da3b54301f 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 Binary files a/MavenChess/MavenChess/target/classes/controller/Main.class and b/MavenChess/MavenChess/target/classes/controller/Main.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Board.class b/MavenChess/MavenChess/target/classes/model/Board.class index 3f59b5de49f9289154a28c351733feece290d730..d7205579cb1b8491f6d63f543ac471e8ac5a086a 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Board.class and b/MavenChess/MavenChess/target/classes/model/Board.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Giant.class b/MavenChess/MavenChess/target/classes/model/Giant.class index 212b8b22a9ff9ca0be66779f2376a6f0e3223a40..3585b01c7aac9a58774cfa823e3b6de25154838e 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Giant.class and b/MavenChess/MavenChess/target/classes/model/Giant.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Kamikaze.class b/MavenChess/MavenChess/target/classes/model/Kamikaze.class index 621fc71ea9f694f98ebc401e45ae56b6b263c205..bc82b5d2c762f16d0c5a41e2e7af6163853c6daa 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Kamikaze.class and b/MavenChess/MavenChess/target/classes/model/Kamikaze.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Magician.class b/MavenChess/MavenChess/target/classes/model/Magician.class index 9cb9112d36bf90d87c427dbc257a0887af5d10bf..a6c93ebe3cfc690fedc4ddf1307820b1a0664976 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Magician.class and b/MavenChess/MavenChess/target/classes/model/Magician.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Nwap.class b/MavenChess/MavenChess/target/classes/model/Nwap.class index 900487542c16548ca728b2437c64d2dedfb7bbf0..c273033df9b7465fdafc8be19375d84470913a55 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Nwap.class and b/MavenChess/MavenChess/target/classes/model/Nwap.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Pawn.class b/MavenChess/MavenChess/target/classes/model/Pawn.class index 07a780168facd29ef0f800edf01c6bd32e74749f..6dae773e174ac427e7b93206b7439cdf8da34f98 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Pawn.class and b/MavenChess/MavenChess/target/classes/model/Pawn.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Position.class b/MavenChess/MavenChess/target/classes/model/Position.class index bf4b97164c8118351d4b88aa50f9425eaff273f9..d08ee04d724822d2ca396ded99593f1d5aef9acc 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Position.class and b/MavenChess/MavenChess/target/classes/model/Position.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Queen.class b/MavenChess/MavenChess/target/classes/model/Queen.class index 10479f12d5926eab2359e138d32913df50571a05..99db5da17bccc0d501fdc65cf89700ac9c579f60 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Queen.class and b/MavenChess/MavenChess/target/classes/model/Queen.class differ diff --git a/MavenChess/MavenChess/target/classes/view/BoardView.class b/MavenChess/MavenChess/target/classes/view/BoardView.class index 0fa96c7105936d1ac4ba9becd2e2e9ba818040e1..dad9befd6db93d0d81adc0e81ba4275c84441a0e 100644 Binary files a/MavenChess/MavenChess/target/classes/view/BoardView.class and b/MavenChess/MavenChess/target/classes/view/BoardView.class differ diff --git a/MavenChess/MavenChess/target/classes/view/CustomMaterial.class b/MavenChess/MavenChess/target/classes/view/CustomMaterial.class index 06ac3d5e95495a07bff9fe1ddba2c69a20ed8c70..8dc8f459dec29d3bd79feacd9f5bfa14b963d72e 100644 Binary files a/MavenChess/MavenChess/target/classes/view/CustomMaterial.class and b/MavenChess/MavenChess/target/classes/view/CustomMaterial.class differ diff --git a/MavenChess/MavenChess/target/classes/view/TileView.class b/MavenChess/MavenChess/target/classes/view/TileView.class index df2fc8f7e944a9eb86325a43fab5c5685fb402d6..10d5f7a31ef3220a528617df33384f178c13ee0a 100644 Binary files a/MavenChess/MavenChess/target/classes/view/TileView.class and b/MavenChess/MavenChess/target/classes/view/TileView.class differ