From c3f85f0128b7665b811888c410b5087fbd9673e1 Mon Sep 17 00:00:00 2001 From: loveb Date: Tue, 5 Apr 2022 15:06:47 +0200 Subject: [PATCH] =?UTF-8?q?halvv=C3=A4gs=20fixat=20schack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/schack/Board.java | 30 +++++++++++++++++++++++++----- src/schack/Pawn.java | 23 ++++++++++++++++++++++- src/schack/Piece.java | 4 ++++ src/schack/Schack.java | 5 +++++ 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src/schack/Board.java b/src/schack/Board.java index 8345020..7fb228b 100644 --- a/src/schack/Board.java +++ b/src/schack/Board.java @@ -20,8 +20,7 @@ public class Board extends JPanel implements MouseListener { private Point selectedPiece = new Point(); private Color moveableColor = new Color(255, 191, 0); private boolean turn = true; - private LinkedHashSet whiteAttacks = new LinkedHashSet<>(); - private LinkedHashSet blackAttacks = new LinkedHashSet<>(); + public boolean developerMode = false; public Board() throws IOException { @@ -127,12 +126,33 @@ public class Board extends JPanel implements MouseListener { try { Piece p = pieces[mouseCoordinateX][mouseCoordinateY]; + // Kolla endast ifall vi kan röra på pjäsen om det är samma färg som den tur vi är på - if (p.isWhite() == turn) { + if (p.isWhite() == turn||developerMode) { + + LinkedHashSet blackAttacks = new LinkedHashSet<>(); + LinkedHashSet whiteAttacks = new LinkedHashSet<>(); + + // Fråga alla pjäser vart de kan gå/ta + for (Piece[] pieceArr : pieces) { + for (Piece piece : pieceArr) { + // Ifall det är tomrum skippa + if (piece == null) { + continue; + } + // Lägg till alla attacker för respektive färg + if (piece.white) { + whiteAttacks.addAll(piece.validAttacks(pieces)); + } else { + blackAttacks.addAll(piece.validAttacks(pieces)); + } + } + } + LinkedHashSet validMoves = p.validMoves(pieces); validMovesToDraw.addAll(validMoves); - - + validMovesToDraw.addAll(blackAttacks); + } } catch (Exception e) { validMovesToDraw.clear(); diff --git a/src/schack/Pawn.java b/src/schack/Pawn.java index b0480c4..5361db5 100644 --- a/src/schack/Pawn.java +++ b/src/schack/Pawn.java @@ -11,6 +11,27 @@ public class Pawn extends PieceKnownIfMoved { setPieceIcon("Pawn"); } + @Override + public LinkedHashSet validAttacks(Piece[][] pieces) { + LinkedHashSet movable = new LinkedHashSet<>(); + + // Kolla ifall vi kan ta någon + for (int pawnX : new int[]{-1, 1}) { + // Position vi kollar just nu, snett upp åt höger & vänster + try { + Point pos = new Point(this.position.x + pawnX, this.position.y + (this.white ? -1 : 1)); + Piece piece = pieces[pos.x][pos.y]; + if (piece == null || piece.white != piece.white) { + movable.add(pos); + } + } catch (Exception e) { + // Out of bounds + } + } + + return movable; + } + @Override public LinkedHashSet validMoves(Piece[][] pieces) { // TODO: Lösa bugg där bunder på kanterna inte kan röra sig @@ -18,7 +39,7 @@ public class Pawn extends PieceKnownIfMoved { // Om bonden har gått en gång, får gå 1 steg, annars 2 final int upTo = moved ? 1 : 2; - + // Kolla om man kan gå rakt frak for (int pawnDY = 1; pawnDY <= upTo; pawnDY++) { System.out.println("this.position.x: " + this.position.x); diff --git a/src/schack/Piece.java b/src/schack/Piece.java index fd72d36..9e1fd49 100644 --- a/src/schack/Piece.java +++ b/src/schack/Piece.java @@ -36,6 +36,10 @@ public abstract class Piece { public abstract LinkedHashSet validMoves(Piece[][] pieces); + public LinkedHashSet validAttacks(Piece[][] pieces) { + return validMoves(pieces); + } + public void draw(Graphics2D g2) { g2.drawImage( diff --git a/src/schack/Schack.java b/src/schack/Schack.java index f39cb2c..8d26178 100644 --- a/src/schack/Schack.java +++ b/src/schack/Schack.java @@ -52,6 +52,7 @@ public class Schack { JMenuItem showLocalIP = new JMenuItem("Show IP"); JMenuItem askForRemi = new JMenuItem("Ask for remi"); JMenuItem surrender = new JMenuItem("Surrender"); + JMenuItem developerMode = new JMenuItem("Toggle Developermode"); // Actions connectToOpponent.addActionListener((ActionEvent ae) -> { @@ -71,6 +72,9 @@ public class Schack { surrender.addActionListener((ActionEvent ae) -> { System.out.println("I'M FRENCH! (TODO)"); }); + developerMode.addActionListener(ae -> { + board.developerMode = !board.developerMode; + }); // Add the menu stuff frame.setJMenuBar(menuBar); @@ -80,6 +84,7 @@ public class Schack { connectMenu.add(showLocalIP); gameMenu.add(askForRemi); gameMenu.add(surrender); + gameMenu.add(developerMode); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);