diff --git a/MavenChess/.idea/inspectionProfiles/Project_Default.xml b/MavenChess/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000000000000000000000000000000000..82ed0ad8cd6b2e5c4f05cfd861609c31e78b11de --- /dev/null +++ b/MavenChess/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true"> + <Languages> + <language minSize="74" name="Java" /> + </Languages> + </inspection_tool> + </profile> +</component> \ No newline at end of file diff --git a/MavenChess/MavenChess/src/main/java/model/Bishop.java b/MavenChess/MavenChess/src/main/java/model/Bishop.java index fa0c14db3058556bceff756ef4a700862e11b028..2f52deaf8fe84dbc777c03def65595305986aefc 100644 --- a/MavenChess/MavenChess/src/main/java/model/Bishop.java +++ b/MavenChess/MavenChess/src/main/java/model/Bishop.java @@ -2,7 +2,8 @@ package model; import java.util.ArrayList; -public class Bishop extends Pawn{ +public class Bishop extends Piece { + public Bishop(Position p, int color) { super(p, color); } @@ -14,13 +15,75 @@ public class Bishop extends Pawn{ ArrayList<Position> moves = new ArrayList<Position>(); Position arrival; - if(color == Piece.WHITE) { // black and white have an opposite direction behavior - // King white move - } - else { - // King black move + Position Cursor = new Position(p.getX(), p.getY()); + + int i = 1; + boolean leftTop = false; + boolean rightTop = false; + boolean leftDown = false; + boolean rightDown = false; + + while (i < 8) { + + //left diagonal + + arrival = new Position(p.getX() + i, p.getY() + i); + + if (!leftTop) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + + if (!b.isFree(arrival)) { + leftTop = true; + } + + + + + + //right diagonal + arrival = new Position(p.getX() - i, p.getY() + i); + if (!rightTop) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + rightTop = true; + } + + + + arrival = new Position(p.getX() + i, p.getY() - i); + if (!leftDown) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + leftDown = true; + } + + + + arrival = new Position(p.getX() - i, p.getY() - i); + if (!rightDown) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + rightDown = true; + } + + + i++; } + + return moves; } } diff --git a/MavenChess/MavenChess/src/main/java/model/Board.java b/MavenChess/MavenChess/src/main/java/model/Board.java index c935d12bbaf66b1aeb8da83bceeb2d5545b41dab..d458d600096b7aa174f0a0b551d4832ee2deaa8b 100644 --- a/MavenChess/MavenChess/src/main/java/model/Board.java +++ b/MavenChess/MavenChess/src/main/java/model/Board.java @@ -73,7 +73,7 @@ public class Board { } public boolean isFree(Position p) { - return (pieces[p.getID()] == null); + return (Position.isCorrect(p) && pieces[p.getID()] == null); } public boolean isBlack(Position p) { return (!isFree(p) && pieces[p.getID()].getColor() == Piece.BLACK); @@ -84,7 +84,7 @@ public class Board { } public boolean isEnnemy(Position p, Position origin) { - return (!isFree(p) && pieces[p.getID()].getColor() != pieces[origin.getID()].getColor()); + return (Position.isCorrect(p) && !isFree(p) && pieces[p.getID()].getColor() != pieces[origin.getID()].getColor() ); } public boolean isKing(Position p) { return (!isFree(p) && pieces[p.getID()].getClass() == King.class); diff --git a/MavenChess/MavenChess/src/main/java/model/King.java b/MavenChess/MavenChess/src/main/java/model/King.java index af0389c02e567073a44e1a3f725f362e1588c3ea..e1ec7723dc919b8e121a5b1e4dcd35b6f778177d 100644 --- a/MavenChess/MavenChess/src/main/java/model/King.java +++ b/MavenChess/MavenChess/src/main/java/model/King.java @@ -4,8 +4,13 @@ import java.util.ArrayList; public class King extends Piece { + + private boolean Casteling = true; + private final Position original; + public King(Position p, int color) { super(p, color); + this.original = p; } @@ -15,13 +20,44 @@ public class King extends Piece { ArrayList<Position> moves = new ArrayList<Position>(); Position arrival; - if(color == Piece.WHITE) { // black and white have an opposite direction behavior - // King white move - } - else { - // King black move - } + // up + arrival = new Position(p.getX(), p.getY() + 1); + if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); } + + //down + arrival = new Position(p.getX(), p.getY() - 1); + if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); } + + //left + arrival = new Position(p.getX()+1, p.getY()); + if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); } + + //right + arrival = new Position(p.getX()-1, p.getY()); + if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); } + + //up left + arrival = new Position(p.getX()-1, p.getY() + 1); + if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); } + + //up right + arrival = new Position(p.getX()+1, p.getY() + 1); + if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); } + + //down left + arrival = new Position(p.getX()-1, p.getY() -1); + if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); } + + //down right + arrival = new Position(p.getX()+1, p.getY() - 1); + if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); } + + arrival = new Position(p.getX(), p.getY() + 1); + if(b.isEnnemy(arrival,p) || b.isFree(arrival)) { moves.add(arrival); } + + + return moves; } } diff --git a/MavenChess/MavenChess/src/main/java/model/Knight.java b/MavenChess/MavenChess/src/main/java/model/Knight.java index 601368d12d66331323905047d1965c159ded0070..7a731d0c95c2c066eaabfe3670422c754e756156 100644 --- a/MavenChess/MavenChess/src/main/java/model/Knight.java +++ b/MavenChess/MavenChess/src/main/java/model/Knight.java @@ -2,7 +2,9 @@ package model; import java.util.ArrayList; -public class Knight extends Pawn{ +public class Knight extends Piece { + + public Knight(Position p, int color) { super(p, color); } @@ -14,13 +16,53 @@ public class Knight extends Pawn{ ArrayList<Position> moves = new ArrayList<Position>(); Position arrival; - if(color == Piece.WHITE) { // black and white have an opposite direction behavior - // King white move + + arrival = new Position(p.getX() - 1, p.getY() + 2); + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + + // up right + arrival = new Position(p.getX() + 1, p.getY() + 2); + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + + // down left + arrival = new Position(p.getX() - 1, p.getY() - 2); + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + + //down right + arrival = new Position(p.getX() + 1, p.getY() - 2); + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + + arrival = new Position(p.getX() - 2, p.getY() + 1); + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + + // up right + arrival = new Position(p.getX() + 2, p.getY() + 1); + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + // down left + arrival = new Position(p.getX() - 2, p.getY() - 1); + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); } - else { - // King black move + + //down right + arrival = new Position(p.getX() + 2, p.getY() - 1); + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); } + return moves; } } diff --git a/MavenChess/MavenChess/src/main/java/model/Pawn.java b/MavenChess/MavenChess/src/main/java/model/Pawn.java index 0467039c5f4efe967f158d8a6fb21bdb8dc38f3e..0861484c74d2ec2a1f1bd1b88f053b011afac658 100644 --- a/MavenChess/MavenChess/src/main/java/model/Pawn.java +++ b/MavenChess/MavenChess/src/main/java/model/Pawn.java @@ -3,10 +3,13 @@ package model; import java.util.ArrayList; public class Pawn extends Piece { + private final Position original; public Pawn(Position p, int color) { super(p, color); + this.original = p; } + public ArrayList<Position> getAvailableMoves(Board b) { // creates a dynamic list of available moves @@ -15,6 +18,13 @@ public class Pawn extends Piece { Position arrival; if(color == Piece.WHITE) { // black and white have an opposite direction behavior + if(this.p.getID() == this.original.getID()){ + // up, free movement first time + arrival = new Position(p.getX(), p.getY() + 2); + if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); } + + } + // up, free movement arrival = new Position(p.getX(), p.getY() + 1); if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); } @@ -30,6 +40,12 @@ public class Pawn extends Piece { } else { + if(this.p.getID() == this.original.getID()){ + // up, free movement first time + arrival = new Position(p.getX(), p.getY() - 2); + if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); } + } + // down, free movement arrival = new Position(p.getX(), p.getY() - 1); if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); } diff --git a/MavenChess/MavenChess/src/main/java/model/Queen.java b/MavenChess/MavenChess/src/main/java/model/Queen.java index 541e831de3bebe8b08dc5a8758b36e546ceaae07..0d740f16487c0cb1688577459fbe89defc7f35bb 100644 --- a/MavenChess/MavenChess/src/main/java/model/Queen.java +++ b/MavenChess/MavenChess/src/main/java/model/Queen.java @@ -14,13 +14,127 @@ public class Queen extends Piece{ ArrayList<Position> moves = new ArrayList<Position>(); Position arrival; - if(color == Piece.WHITE) { // black and white have an opposite direction behavior - // King white move - } - else { - // King black move + + int i = 1; + boolean left = false; + boolean right = false; + boolean top = false; + boolean down = false; + boolean leftTop = false; + boolean rightTop = false; + boolean leftDown = false; + boolean rightDown = false; + + while (i < 8) { + // Bishop moves + arrival = new Position(p.getX() + i, p.getY() + i); + + if (!leftTop) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + + if (!b.isFree(arrival)) { + leftTop = true; + } + + + + + + //right diagonal + arrival = new Position(p.getX() - i, p.getY() + i); + if (!rightTop) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + rightTop = true; + } + + + + arrival = new Position(p.getX() + i, p.getY() - i); + if (!leftDown) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + leftDown = true; + } + + + + arrival = new Position(p.getX() - i, p.getY() - i); + if (!rightDown) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + rightDown = true; + } + + + // RooK moves + + arrival = new Position(p.getX() +i, p.getY()); + + if (!left) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + + if (!b.isFree(arrival)) { + left = true; + } + + + + //right diagonal + arrival = new Position(p.getX()- i , p.getY() ); + if (!right) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + right = true; + } + + + + arrival = new Position(p.getX(), p.getY() + i); + if (!top) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + top = true; + } + + + + arrival = new Position(p.getX(), p.getY() - i); + if (!down) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + down = true; + } + + + i++; } + return moves; } } diff --git a/MavenChess/MavenChess/src/main/java/model/Rook.java b/MavenChess/MavenChess/src/main/java/model/Rook.java index cbb3c82d513266e4db893f966fcdfb616b65c854..859120d2d532b813f744407c780094342c1e7291 100644 --- a/MavenChess/MavenChess/src/main/java/model/Rook.java +++ b/MavenChess/MavenChess/src/main/java/model/Rook.java @@ -2,9 +2,14 @@ package model; import java.util.ArrayList; -public class Rook extends Pawn{ +public class Rook extends Piece { + + + private final Position original; + public Rook(Position p, int color) { super(p, color); + this.original = p; } @@ -14,13 +19,85 @@ public class Rook extends Pawn{ ArrayList<Position> moves = new ArrayList<Position>(); Position arrival; - if(color == Piece.WHITE) { // black and white have an opposite direction behavior - // King white move - } - else { - // King black move + int i = 1; + boolean left = false; + boolean right = false; + boolean top = false; + boolean down = false; + + + while (i < 8) { + + //left + + arrival = new Position(p.getX() + i, p.getY()); + if (Position.isCorrect(arrival)) { + if (!left) { + if (b.isEnnemy(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, p.getY()); + if (Position.isCorrect(arrival)) { + if (!right) { + if (b.isEnnemy(arrival, p) || b.isFree(arrival)) { + moves.add(arrival); + } + if (b.isKing(arrival)) { + moves.add(arrival); + } + } + + if (!b.isFree(arrival)) { + + right = true; + } + } + + + arrival = new Position(p.getX(), p.getY() + i); + if (Position.isCorrect(arrival)) { + if (!top) { + if (b.isEnnemy(arrival, p)|| b.isFree(arrival)) { + moves.add(arrival); + } + } + + if (!b.isFree(arrival)) { + + top = true; + } + } + + + arrival = new Position(p.getX(), p.getY() - i); + if(Position.isCorrect(arrival)||b.isFree(arrival)) { + if (!down) { + if (b.isEnnemy(arrival, p)) { + moves.add(arrival); + } + } + if (!b.isFree(arrival)) { + + down = true; + } + } + + i++; } + return moves; } } diff --git a/MavenChess/MavenChess/target/classes/model/Bishop.class b/MavenChess/MavenChess/target/classes/model/Bishop.class index 32156f2253d3bdfe153b1ece2163495390335a29..398d50bd457f077c36e29485a75dfac67ee15440 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Bishop.class and b/MavenChess/MavenChess/target/classes/model/Bishop.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Board.class b/MavenChess/MavenChess/target/classes/model/Board.class index 60d2800598b989d8ec14cb16a3ef8ae53b102a85..50215dddae1418b33ede47485b465cdb3d5f4022 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/King.class b/MavenChess/MavenChess/target/classes/model/King.class index c4aece04f0d991f6eeb05a95e0bd5b8d7a223ac0..2b7365022be2e1d12fc9d6144b60ef72220043f0 100644 Binary files a/MavenChess/MavenChess/target/classes/model/King.class and b/MavenChess/MavenChess/target/classes/model/King.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Knight.class b/MavenChess/MavenChess/target/classes/model/Knight.class index d5899db6ea9e76ef0a5d0e856cb3bffddb9eeff4..09ed6279d228976b0614f6977c88b26d6efd00ac 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Knight.class and b/MavenChess/MavenChess/target/classes/model/Knight.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Pawn.class b/MavenChess/MavenChess/target/classes/model/Pawn.class index 075844d3ad6e57acb80518f4ceeb7cc1493e88fb..a9d05b2520252001c47ac6dc5354e655d8b2eb69 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/Queen.class b/MavenChess/MavenChess/target/classes/model/Queen.class index b6a5f4b973d66ee2e73a445038cbd118276673e9..ce7f8807817995cd62883140b43a974c44646d23 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/model/Rook.class b/MavenChess/MavenChess/target/classes/model/Rook.class index d20e385f6b33a6b1069572d9926c3a3a17ff46ec..ee62dd3c32855be4fe2f5261aed520c175275f3d 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Rook.class and b/MavenChess/MavenChess/target/classes/model/Rook.class differ