diff --git a/MavenChess/MavenChess/src/main/java/model/Board.java b/MavenChess/MavenChess/src/main/java/model/Board.java index e27bbb61590b4e17f47e75e091488d1ee4fb395c..9f3de8d0b12ae4bec4858e7bef8d5b8926df45b1 100644 --- a/MavenChess/MavenChess/src/main/java/model/Board.java +++ b/MavenChess/MavenChess/src/main/java/model/Board.java @@ -41,4 +41,18 @@ public class Board { public void set(Piece piece) { pieces[piece.getPosition().getID()] = piece; } + + public boolean isFree(Position p) { + return (pieces[p.getID()] == null); + } + public boolean isBlack(Position p) { + return (pieces[p.getID()].getColor() == Piece.BLACK); + } + + public boolean isWhite(Position p) { + return (pieces[p.getID()].getColor() == Piece.WHITE); + } + public boolean isKing(Position p) { + return (pieces[p.getID()].getClass() == Pawn.class); // to change to king later + } } diff --git a/MavenChess/MavenChess/src/main/java/model/Pawn.java b/MavenChess/MavenChess/src/main/java/model/Pawn.java index a9bf9a56f525a26dcc179926ddc83fb3fe5ce769..0467039c5f4efe967f158d8a6fb21bdb8dc38f3e 100644 --- a/MavenChess/MavenChess/src/main/java/model/Pawn.java +++ b/MavenChess/MavenChess/src/main/java/model/Pawn.java @@ -1,12 +1,48 @@ package model; +import java.util.ArrayList; + public class Pawn extends Piece { public Pawn(Position p, int color) { super(p, color); } - public Move[] getAvailableMoves(Board b) { - Move[] moves = new Move[5]; + public ArrayList<Position> getAvailableMoves(Board b) { + + // creates a dynamic list of available moves + ArrayList<Position> moves = new ArrayList<Position>(); + + Position arrival; + if(color == Piece.WHITE) { // black and white have an opposite direction behavior + + // up, free movement + arrival = new Position(p.getX(), p.getY() + 1); + if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); } + + // up right, attack movement + arrival = new Position(p.getX() + 1, p.getY() + 1); + if(Position.isCorrect(arrival) && b.isBlack(arrival)) { moves.add(arrival); } + + // up left, attack movement + arrival = new Position(p.getX() - 1, p.getY() + 1); + if(Position.isCorrect(arrival) && b.isBlack(arrival)) { moves.add(arrival); } + + } + else { + + // down, free movement + arrival = new Position(p.getX(), p.getY() - 1); + if(Position.isCorrect(arrival) && b.isFree(arrival)) { moves.add(arrival); } + + // down right, attack movement + arrival = new Position(p.getX() + 1, p.getY() - 1); + if(Position.isCorrect(arrival) && b.isWhite(arrival)) { moves.add(arrival); } + + // down left, attack movement + arrival = new Position(p.getX() - 1, p.getY() - 1); + if(Position.isCorrect(arrival) && b.isWhite(arrival)) { moves.add(arrival); } + + } return moves; } } diff --git a/MavenChess/MavenChess/src/main/java/model/Piece.java b/MavenChess/MavenChess/src/main/java/model/Piece.java index 6119ba2cf0344d48ef2a853ba931653bbd1893e3..c9580db89c7d3274d09e20ea45437b0fa393f706 100644 --- a/MavenChess/MavenChess/src/main/java/model/Piece.java +++ b/MavenChess/MavenChess/src/main/java/model/Piece.java @@ -1,5 +1,7 @@ package model; +import java.util.ArrayList; + public abstract class Piece { protected Position p; protected int color; diff --git a/MavenChess/MavenChess/src/main/java/model/Position.java b/MavenChess/MavenChess/src/main/java/model/Position.java index e0f39a2cc99874f61f6b8bdc9e487886c5916a24..03c8aa65beebb4b163fb1f1a4df0f181b6e7adb9 100644 --- a/MavenChess/MavenChess/src/main/java/model/Position.java +++ b/MavenChess/MavenChess/src/main/java/model/Position.java @@ -37,4 +37,8 @@ public class Position { public void setY(int y) { this.y = y; } + + public static boolean isCorrect(Position arrival) { + return (arrival.getX() >= 1 && arrival.getX() <= 8 && arrival.getY() >= 1 && arrival.getY() <= 8); + } } diff --git a/MavenChess/MavenChess/target/classes/model/Board.class b/MavenChess/MavenChess/target/classes/model/Board.class index 1607f865bdea694975cea772c5e112c2b8bf410d..526acee78857de253659c92512c5d4d378a2ac11 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/Log.class b/MavenChess/MavenChess/target/classes/model/Log.class new file mode 100644 index 0000000000000000000000000000000000000000..59bcb237934dd8d469f702c385593215ee0d5885 Binary files /dev/null and b/MavenChess/MavenChess/target/classes/model/Log.class differ diff --git a/MavenChess/MavenChess/target/classes/model/Pawn.class b/MavenChess/MavenChess/target/classes/model/Pawn.class index 60f6cda92cbfee29e71c4f64b130f087131959c2..87d5bc815e55dce7814ad20e95dfa5d3904fc549 100644 Binary files a/MavenChess/MavenChess/target/classes/model/Pawn.class and b/MavenChess/MavenChess/target/classes/model/Pawn.class differ