From ba4b29208634b871de5418ccfea96ff2b3fe757a Mon Sep 17 00:00:00 2001
From: MasterPyo <olivier.pillods@gmail.com>
Date: Mon, 24 Apr 2023 23:09:46 +0200
Subject: [PATCH] pawn availableMoves implementation

---
 .../MavenChess/src/main/java/model/Board.java |  14 ++++++
 .../MavenChess/src/main/java/model/Pawn.java  |  40 +++++++++++++++++-
 .../MavenChess/src/main/java/model/Piece.java |   2 +
 .../src/main/java/model/Position.java         |   4 ++
 .../target/classes/model/Board.class          | Bin 1841 -> 905 bytes
 .../MavenChess/target/classes/model/Log.class | Bin 0 -> 246 bytes
 .../target/classes/model/Pawn.class           | Bin 517 -> 520 bytes
 7 files changed, 58 insertions(+), 2 deletions(-)
 create mode 100644 MavenChess/MavenChess/target/classes/model/Log.class

diff --git a/MavenChess/MavenChess/src/main/java/model/Board.java b/MavenChess/MavenChess/src/main/java/model/Board.java
index e27bbb6..9f3de8d 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 a9bf9a5..0467039 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 6119ba2..c9580db 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 e0f39a2..03c8aa6 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
GIT binary patch
delta 544
zcmXYt&q^Cn6vlt|&LoqJn#8Dq)JbV#s>#IG{>e(C1!;wW76fTQSG6_Rl$a@IpwNvQ
zH(g2|pn?n6LWxqr2k5HL(8maE?a5UxoOADYzH`p^-LuqJ$Nl;5#}%-`(<ApwJ+&9^
zG}{a7VYd~v!j3~$;of4~pF1vTCP#@erHEC6p!&vT{OICSE=_5a8Oj3hHlyIV!m3n*
z-Y-?JszAW^VLRMc*wKepS26bTX5?zPy}z?0<#ubg)9mH7-#gL8qCzu9N>pj2NL=E5
zQ1dw0f=0d9R_VZM*vp>%jf59FX3evYNyHkb#4}FAUMXY}C*1Wf8Q;7ly;+z(XTm!t
z*C&5ysnhG<hHo2wqH(AN>YvGIi&=@QWF*FAnIl46rWnDKToO@b`GQAeIap+ZWhQwc
z<t@o?$@7sr><OXEoE)f&`n2#WRK>$Hism+4@(N!tEu4rN^ODP~^T6;Pn%Bs+v}y-e
z!GP>vETxi3{RgE6+)KXG0~xNE7G>spSQGWbfhqqx$y%R6pJHue=t>(`uBrOssAk0F
TZrHc$rH=)1rsO;}Jx~4vgi2DT

literal 1841
zcmbVM+fEZv6kTW9GPD*LD2iNEz*{K_-fu;PVu48u6p9eygBi*M2I~xI3;uv_eucjH
zY@(1z^aD)vTYUCGTxUAgiRnYrhfeoeXP-4|?|sgE`~CSVfJe|HP!LcNj3R^<0d2?F
zH^z&Gy*0kLv11l00xc7kZB-r#1mYvBDq00jymU6r;&{$73uYJ*oKO*sq7Ch}rIcfo
zHo0|Irj!NRpJjb}k}5QTh{qVOY!zM1@vu|2DwbnM(1~v8>ZCv@uInSK5p<wOGN%Q)
z<9`Lc^rV{*L0=U87@*m*N$*-MO&Uo`4HajjIEO)c-7+gVZ@WNOeB^&gX<;~u^SD3@
zOxB;cP0)$b^SPCE0l~O!+Of+O!>+6v#XU2?wt~g2&FL%Y=eeo11<8mSv%I*Nk&Ge`
zt>$DF^x3%;$pva$O3%+N<|G%S&uZS%({$Pu3)RFj`ogSC;^2bQoQXh3*0Rloy_Xwi
zX~ozmlIhAi1*5oXlq`uoQdrzk*|s>EHm_=TWJ%(D#VEX(H+H?$kUPVFdG6Gir?SC0
z&W=skWuyP^9eY%8icYDTxa>GD1j5{sv8}CbPDaKltGw-Sb1UPeJ=3I?RLxlS7E8=K
zd!>RoW62^SuDdaLI5ET%r?BW&K6&OC_2MEfvFVo?D~J=1_;7-F)Q7JSU-jWJ;&C6o
zMtt3eZxG+~;ahw&t3wN)w>jD@kCgQDBXJ0k&?dh?{e*B}qF<YQ2QBdt;eL^SEyVld
zpNS)MtRJCsJs3JfEO>}h2k5Plp?YLXJyNYlw$>xHy8E@d0-9gp11k#P4xbO)9)}TR
z-`fzyNj?YoKMW0bc|)@3f`J(J(Tz7;eT!2#L=V2BkLw^(cyVL6=k}0&!hLE2N&Yk_
z$6QoYL<I1QN<v=WYG*M+2ePy6vWcSyICFrZ(Y$n~xX!BQ;0*not-Xoap1zDG@Q_-9
zAG*_?<`U;7uT0F-9Fij$9pET@!g93WM?%^ktftpQV|a{7cRhwFmZUIFH6uURu>5p0
h@<R>FKWRpOxMBHpGxFyfmY-=x{zAj@v+ik|`vbbyBC-Gg

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
GIT binary patch
literal 246
zcmX|5I|{;35S-1&#6*pF13R@a2T;-oRzVBJ{v|%*lYAgX?`0)ecmNM2?hE2B%<jyx
z!@NJw7k~&u4+cyJRu48hgyC7-M3{>*3%AKxrVXL9RHbSnf;pKU9JqvTQ5|I-##KhJ
zR=g8}Se0^fEfQJpMUt~JimO!Q2T?1{f1=f#)P>;3e}@IZ+f~;(m20KnTy~x75E#SZ
oY`Tb>(=m3Lg)Il{*#mTE!GOo8&wvS^vDfZ4&ptE4fYCtk1v{55xc~qF

literal 0
HcmV?d00001

diff --git a/MavenChess/MavenChess/target/classes/model/Pawn.class b/MavenChess/MavenChess/target/classes/model/Pawn.class
index 60f6cda92cbfee29e71c4f64b130f087131959c2..87d5bc815e55dce7814ad20e95dfa5d3904fc549 100644
GIT binary patch
delta 16
XcmZo=>0p^~j#V%{wZw7b1ye=<Fgyjq

delta 13
UcmeBRX=Rykj)^aE<7HDu03dS&p8x;=

-- 
GitLab