From e2ac73d6b8fe8482bd912422fe43a4637bb2b224 Mon Sep 17 00:00:00 2001 From: ACIKBAS TUNA BATIKAN <tuna.acikbas@etu.unistra.fr> Date: Thu, 27 Apr 2023 03:00:02 +0200 Subject: [PATCH] Finished piece mouvement and Rook --- .../inspectionProfiles/Project_Default.xml | 10 ++ .../src/main/java/model/Bishop.java | 75 ++++++++++- .../MavenChess/src/main/java/model/Board.java | 4 +- .../MavenChess/src/main/java/model/King.java | 48 ++++++- .../src/main/java/model/Knight.java | 52 +++++++- .../MavenChess/src/main/java/model/Pawn.java | 16 +++ .../MavenChess/src/main/java/model/Queen.java | 124 +++++++++++++++++- .../MavenChess/src/main/java/model/Rook.java | 89 ++++++++++++- .../target/classes/model/Rook.class | Bin 1599 -> 1769 bytes 9 files changed, 388 insertions(+), 30 deletions(-) create mode 100644 MavenChess/.idea/inspectionProfiles/Project_Default.xml diff --git a/MavenChess/.idea/inspectionProfiles/Project_Default.xml b/MavenChess/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..82ed0ad --- /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 fa0c14d..2f52dea 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 c935d12..d458d60 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 af0389c..e1ec772 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 601368d..7a731d0 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 0467039..0861484 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 541e831..0d740f1 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 cbb3c82..859120d 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/Rook.class b/MavenChess/MavenChess/target/classes/model/Rook.class index 3fad285a58fc5c38e16638a253835fa8b8c78c1f..ee62dd3c32855be4fe2f5261aed520c175275f3d 100644 GIT binary patch literal 1769 zcmbVNTT@$A6#f=D$w|Tq<rbh<+XCehAl6G-4boB!nl?}@3Z;XWljH~+LJo5haCrCK zH)o1(KG;VuV@szUeeq3a{2RXMgYU&}=Y%2`9miyH&f06Q^{vad_Ri1Gp8N=43^P$Q zAYj6<5JX7OxaJm}QgTK)1xFAXRb^Ej6SVi|>KkrFRh3	wmY2qR)5YM~L9AnIG( zaotrx*!9$sD%&MN^I=yLO@g)+d(%#CR8=WC?s@iBPF1Q=#L%o0X%Pha2j)z)37QTD z)<NSII&?%?kD?V_7Ea=nz*usscWaJWtv+Mn?4Ei-D_+pZ=LNz3ER)xoix#@kBZ#QV zgzI@up~}3DR61}kic9D-(Qjb@gU@?(!?nF4D^-<Dx$LZM3A&H?9xmO-8nQ5~<Azja z(sLYLcGAL&xXkSBA~ECrxmtTlc6ljzJHNur(!T4<7G9~l-cscyRy{$&1SfK;>`ZU0 z<sI)`J71!vHRl%W(wyxny{;>b>awZ`ta@IWt28@Oa7(Voer5$N?Be*QtxDQ!%H4Em z-m_O%t>pB8pWH$22xHowr#3a^k{874F?=5eS@Xf-|KKf(#gv?n$${LXIp=4Ya-iz2 zbED{fQWkU^tZ8d~udcr1Kt~UEe~d}SW~+8#b;@3^cO){amdbW@!(+=*|Dn!fL8G(o zhF5SVm2P}QcXdSbhYK9m2A(srq0b1V2Fg5We7?%n9R&CVtii;Y9mrtfA<S=URw+K4 zYI}{e)+a26E7YC$?Qs>aaYavk5{Ray*O9K_kKzr!iQn)CV?`K#<tbtdJ2)|Aq>Ml+ z7)XTzDKn4?$BpLjmooJftqX(Sqx}&&<Hkq6bb1HpriUNn!hNLU!EGcG!~RC^HX0Md zkC3>J$PnKn^Lq8tfmLD~AtMz$fLlBUH}t=7Lx01qgEH;?e23%aHqQQgzJ7-0aY)5I zr2RsB<Kb<@pCcYqYxq+`9z6SQ=o>O&K(qH1FAJcJ6VOTay2$29wBQulahjTQ{9YuZ z-MoW)Fo9mo^OAX=J`M)4iV;+h#3m2>XJqnoB7Q;ZugUvE^85pt{t4Ic3&!y)Ch;5I z!tZz+e<CX;Zb}T(632{m;XS#GIk}E`$>6TMg9Vw#qI`%CB#*o-Gn$^NMNY{TT8?pw zIFGWjH(!*l;X3ClO#5-%;9ND*dxG%|-r|dR6Pen5y}&FooYZ!iV=ft(=#*Jzlwti@ zM$j|rW85UhEox@byvs)L4<u~jlF9iN{Q-6va$jqrwXP4wqE~CbXkSNkS5Nj4SL6uX MfGGx>u1UB50>b8Opa1{> literal 1599 zcma)6O>Yxd6g}6T@z~D9`5@+_goHq7>^Q-YwuaVj+7Ob;$Vq`zDM6^}#GZzMi6<IQ zQl*=2s{Vnh3$klfsoPenh*Z=ry5tA2>ar3N|9}nYd1D*M2U2Y7`Mo>$o_p^(ci!U{ zfBp?%5}zayLDYa|LPt!HT=i<Uo4;;-T^GbkPTdJ61$~)H%kDLt!13zEa(2-`TyW%` zwPEGg1INuz`M$MTaT-Aq29gS|LlDg<$4)_NH$Vbi=r+(}q8CSAroHKT_XV;h=-!(! z2@`1(M{!J`t=Pe>5WB3*CrrH6HZLhdze;{epl8agGl@Z*HZWx349*HVnuT2PEWaj* zJB^uo-Co@koZZ*t-WsyE71lWuZ)1e)IE`7~w#mW1K;>v4Yhn~R)@jw4DV?c=T)9?# zCI9L2J-Zqdv$xsIG#M9kRh+s#zrMO``=43ME-k$kuWGrAmhY%@%cuo+orb_{m8J+Q zveByNdOn#e3wlV-)Q07_Dr(N#u<1VBt}yJnm~B?FTQ$NMmhU?omP?>zL1!yRGlof4 zn_%fTM2o{_T>Gnl;p|KIot3-XM+1*~YBf(y)Y08NZLYQZ8aW8Gv{!&h7TLKFSk?P; z)>?~^#DcR@w}N$_lobxq=YgQf1#jK2+Ov)#KA~7Wuf)O-$27th1zgz@VqC{~DkI7- zV2tMaw;{iW4&z+a>qIjh<2cXV>82a<xWJQo!g(i%+Fis%2>TA+<v(E~KQcuEkcmey zmbQ_Y(+XO&phpX_Xu*gU;%Tir{<EYX!CV^s1F47TOKV>?cgMGJaz3qZ;Z$zCX&Kl; zM{fKfh94j?#{bOc;b{vot)TCMsJ#vmJ0wKxHHcO`iwUbR4hdl#1W^ki;)jHYf2YZ> zFP@G4Mn*L#1-_?fK#KhLqJvzg(1#wRx$^G7aSWgzm$;VrDqp8Qix|ciI0p+kd_xt! zCCU%f?g91ri3<Hf@4s*v|KNQ*!3X#kAL2jWoKG=L8Lx_t899Mj8AMq|a7{)rFBfnl zRR0duyoBd?k9BZdWTHI>+!gqQ_YeIq6FI`ma)js;>>?$@D6&2sJu<{>B~DYH3@~Sj zQ*%sC;v??j_?Uf~FEOTwafOx}NbRuEgn=#tg9al+eSjS%dSx|Ww(NTHV*9tF=5Jph PrU@ItRi>H=ceDQk%FIP5 -- GitLab