From 6eea10491b35f2cdd956b13269c241653d955f56 Mon Sep 17 00:00:00 2001 From: lov3b Date: Sun, 15 May 2022 14:12:44 +0200 Subject: [PATCH] =?UTF-8?q?Fixa=20s=C3=A5=20att=20varje=20pj=C3=A4s=20enda?= =?UTF-8?q?st=20roppar=20p=C3=A5=20en=20schackfunktion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/schack/Pawn.java | 12 ++++++++++-- src/schack/Piece.java | 31 +++++++++++++++---------------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/schack/Pawn.java b/src/schack/Pawn.java index b71a35b..36be572 100644 --- a/src/schack/Pawn.java +++ b/src/schack/Pawn.java @@ -10,6 +10,14 @@ public class Pawn extends PieceKnownIfMoved { super(isWhite, startingPosition); } + /** + * Ger tillbaks alla ställen pjäsen kan attackera + * + * @param pieces + * @param shouldNotCareIfAttackSpaceIsEmptyOrNot Ifall man ska kolla ifall det är något i möjliga attackrutor + * ifall + * @return Alla lämpliga attackMoves + */ @Override public ArrayList validAttacks(Piece[][] pieces, boolean shouldNotCareIfAttackSpaceIsEmptyOrNot) { ArrayList movable = new ArrayList<>(); @@ -75,7 +83,7 @@ public class Pawn extends PieceKnownIfMoved { Piece piece = pieces[pos.x][pos.y]; // Ifall det är tomt här, gör ingenting if (piece != null && piece.isWhite() != this.isWhite()) { - if (!isInSchackHere(pieces, pos)) { + if (!isInSchack(pieces, pos)) { movable.add(pos); } } @@ -90,7 +98,7 @@ public class Pawn extends PieceKnownIfMoved { Piece pieceToCheck = pieces[pos.x][pos.y]; if (pieceToCheck == null) { - if (!isInSchackHere(pieces, pos)) { + if (!isInSchack(pieces, pos)) { movable.add(pos); } return false; diff --git a/src/schack/Piece.java b/src/schack/Piece.java index b98dae6..df538ea 100644 --- a/src/schack/Piece.java +++ b/src/schack/Piece.java @@ -38,10 +38,6 @@ public abstract class Piece { this.isWhite = white; } - public void setPosition(Point p) { - this.position = p; - } - /** * Ladda in pjäsbild från paketet img * @@ -69,9 +65,9 @@ public abstract class Piece { * Ger tillbaks alla ställen pjäsen kan attackera * * @param pieces - * @param shouldNotCareIfAttackSpaceIsEmptyOrNot Ifall man inte ska bry sig + * @param shouldNotCareIfAttackSpaceIsEmptyOrNot För bönder ifall den ska kolla ifall det är något i möjliga attackrutor * ifall - * @return + * @return Alla lämpliga attackMoves */ public ArrayList validAttacks(Piece[][] pieces, boolean shouldNotCareIfAttackSpaceIsEmptyOrNot) { return validMoves(pieces, false); @@ -83,7 +79,6 @@ public abstract class Piece { * @param g2 */ public void draw(Graphics2D g2) { - g2.drawImage( icon, position.x * Board.SIZE_OF_TILE, @@ -99,7 +94,6 @@ public abstract class Piece { * @param toMove */ public void move(Piece[][] pieces, Point toMove) { - // Gör ingenting ifall vi är utanför brädet if (toMove.x >= pieces.length || toMove.y < 0 || position.x >= pieces[0].length || position.y < 0) { return; @@ -114,7 +108,7 @@ public abstract class Piece { * Lägg till move ifall det går, alltså inte är schack där * * @param pos drag att lägga till ifall det går - * @param movable lägger till drag i denna ArrayList + * @param movable lägger till drag i denna ArrayList * @param pieces Piece[][] över brädet * @param isSelected * @return true ifall man inte kan gå längre i denna riktning @@ -132,7 +126,7 @@ public abstract class Piece { if (!isSelected) { movable.add(pos); } else { - if (!isInSchackHere(pieces, pos)) { + if (!isInSchack(pieces, pos)) { movable.add(pos); } } @@ -153,7 +147,7 @@ public abstract class Piece { if (!isSelected) { movable.add(pos); } else { - if (!isInSchackHere(pieces, pos)) { + if (!isInSchack(pieces, pos)) { movable.add(pos); } } @@ -170,7 +164,7 @@ public abstract class Piece { * @param pos * @return */ - boolean isInSchackHere(Piece[][] pieces, Point pos) { + private boolean moveAndTestSchackHere(Piece[][] pieces, Point pos) { // Kom ihåg vart vi var Point previousPosition = new Point(this.position); @@ -182,7 +176,7 @@ public abstract class Piece { pieces[previousPosition.x][previousPosition.y] = null; this.position = new Point(pos); - boolean inSchack = isInSchack(pos, pieces); + boolean inSchack = isInSchack(pieces, null); // Flytta tillbaka pieces[previousPosition.x][previousPosition.y] = this; @@ -195,11 +189,16 @@ public abstract class Piece { /** * Kolla ifall det är schack vid den här positionen * - * @param pos - * @param pieces + * @param pieces Piece[][] över hela brädet + * @param pos null ifall man endast ska kolla ifall det är schack just nu, + * alltså ifall pos inte är null testar vi att flytta oss dit och sedan + * kollar ifall det är schack där * @return true ifall det är schack */ - boolean isInSchack(Point pos, Piece[][] pieces) { + boolean isInSchack(Piece[][] pieces, Point pos) { + if (pos != null) { + return moveAndTestSchackHere(pieces, pos); + } ArrayList enemyAttacks = new ArrayList<>(); // Fråga alla pjäser vart de kan gå/ta