diff --git a/src/schack/Bishop.java b/src/schack/Bishop.java index 3bd5fa8..4b6d5a7 100644 --- a/src/schack/Bishop.java +++ b/src/schack/Bishop.java @@ -56,10 +56,6 @@ public class Bishop extends Piece { } } - @Override - public void move(Piece[][] pieces) { - throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody - } @Override public String toString() { diff --git a/src/schack/Board.java b/src/schack/Board.java index 9daeefd..6769b8f 100644 --- a/src/schack/Board.java +++ b/src/schack/Board.java @@ -5,15 +5,20 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.io.IOException; import java.util.Arrays; import java.util.LinkedHashSet; import javax.swing.JPanel; -public class Board extends JPanel { +public class Board extends JPanel implements MouseListener { public static final int SIZE_OF_TILE = 100; private Piece[][] pieces = new Piece[8][8]; + private LinkedHashSet validMovesToDraw = new LinkedHashSet<>(); + private Point selectedPiece = new Point(); + private Color moveableColor = new Color(200, 200, 200); public Board() throws IOException { @@ -30,7 +35,7 @@ public class Board extends JPanel { {new Bishop(false, new Point(2, 0)), null, null, null, null, null, null, new Bishop(true, new Point(2, 7))}, {new Queen(false, new Point(3, 0)), null, null, null, null, null, null, new Queen(true, new Point(3, 7))}, {new King(false), null, null, null, null, null, null, new King(true)}, - {null, null, null, null, null, null, null, null}, + {null, null, null, null, null, null, null, new King(false, new Point(5, 7))}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null} }; @@ -70,41 +75,48 @@ public class Board extends JPanel { Graphics2D g2 = (Graphics2D) g; drawSquares(g2); + // måla alla ställen man kan gå¨till + validMovesToDraw.forEach(point -> { + if (point != null) { + g2.setColor(moveableColor); + g2.fillOval(point.x * SIZE_OF_TILE, point.y * SIZE_OF_TILE, SIZE_OF_TILE, SIZE_OF_TILE); + } + }); // Draw piece Arrays.stream(pieces).forEach(pieceArr -> Arrays.stream(pieceArr).forEach(piece -> { if (piece != null) { piece.draw(g2); } })); - // Check valid moves method -// Arrays.stream(pieces).forEach(pieceArr -> Arrays.stream(pieceArr).forEach(piece -> { -// if (piece != null) { -// // Draw eglible moves -// LinkedHashSet validMoves = piece.validMoves(pieces); -// Color c = new Color((int) (230 * Math.random()), (int) (230 * Math.random()), (int) (230 * Math.random())); + // Arrays.stream(pieces).forEach(pieceArr -> Arrays.stream(pieceArr).forEach(piece -> { + // if (piece != null) { + // // Draw eglible moves + // LinkedHashSet validMoves = piece.validMoves(pieces); + // Color c = new Color((int) (230 * Math.random()), (int) (230 * Math.random()), (int) (230 * Math.random())); + // g2.setColor(c); + // validMoves.forEach(point -> g2.fillOval(point.x * SIZE_OF_TILE, point.y * SIZE_OF_TILE, SIZE_OF_TILE, SIZE_OF_TILE)); + // System.out.println("x:" + piece.position.x + ", y:" + piece.position.y + ": " + validMoves.size()); + // } + // })); + + // draw valid moves +// for (int y = 0; y < pieces.length; y++) { +// for (int x = 0; x < pieces.length; x++) { +// Piece p = pieces[y][x]; +// if (p == null) { +// continue; +// } +// +// LinkedHashSet validMoves = p.validMoves(pieces); +// Color c = new Color((int) (255 * Math.random()), (int) (255 * Math.random()), (int) (255 * Math.random())); // g2.setColor(c); // validMoves.forEach(point -> g2.fillOval(point.x * SIZE_OF_TILE, point.y * SIZE_OF_TILE, SIZE_OF_TILE, SIZE_OF_TILE)); -// System.out.println("x:" + piece.position.x + ", y:" + piece.position.y + ": " + validMoves.size()); // } -// })); - // Check valid moves method - for (int y = 0; y < pieces.length; y++) { - for (int x = 0; x < pieces.length; x++) { - Piece p = pieces[y][x]; - if (p == null) { - continue; - } - - LinkedHashSet validMoves = p.validMoves(pieces); - Color c = new Color((int) (255 * Math.random()), (int) (255 * Math.random()), (int) (255 * Math.random())); - g2.setColor(c); - validMoves.forEach(point -> g2.fillOval(point.x * SIZE_OF_TILE, point.y * SIZE_OF_TILE, SIZE_OF_TILE, SIZE_OF_TILE)); - } - } +// } } - private void printPieces(Piece[][] pieces) { + public static void printPieces(Piece[][] pieces) { System.out.println(""); for (int loopX = 0; loopX < pieces.length; loopX++) { for (int loopY = 0; loopY < pieces.length; loopY++) { @@ -149,4 +161,60 @@ public class Board extends JPanel { } } + + @Override + public void mouseClicked(MouseEvent mouseEvent) { + int mouseCoordinateX = (int) (mouseEvent.getX() / SIZE_OF_TILE); + int mouseCoordinateY = (int) (mouseEvent.getY() / SIZE_OF_TILE); + + Point clicked = new Point(mouseCoordinateX, mouseCoordinateY); + + // Ifall vi har tryckt på en pjäs och sedan ska gå dit + if (validMovesToDraw.contains(clicked)) { + try { + Piece p = pieces[selectedPiece.x][selectedPiece.y]; + p.move(pieces, clicked, selectedPiece); + validMovesToDraw.clear(); + System.out.println("came here"); + + } catch (Exception e) { + + } + + } else { + + selectedPiece = new Point(clicked); + validMovesToDraw.clear(); + + } + + System.out.println("X: " + mouseCoordinateX + ", Y: " + mouseCoordinateY); + try { + Piece p = pieces[mouseCoordinateX][mouseCoordinateY]; + LinkedHashSet validMoves = p.validMoves(pieces); + System.out.println("valid moves " + validMoves); + moveableColor = new Color((int) (255 * Math.random()), (int) (255 * Math.random()), (int) (255 * Math.random())); + validMovesToDraw.addAll(validMoves); + System.out.println("valid moves to draw " + validMovesToDraw); + + } catch (Exception e) { + validMovesToDraw.clear(); + } + } + + @Override + public void mousePressed(MouseEvent e) { + } + + @Override + public void mouseReleased(MouseEvent e) { + } + + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + } } diff --git a/src/schack/Horse.java b/src/schack/Horse.java new file mode 100644 index 0000000..09513ff --- /dev/null +++ b/src/schack/Horse.java @@ -0,0 +1,21 @@ +package schack; + +import java.awt.Point; +import java.io.IOException; +import java.util.LinkedHashSet; + +public class Horse extends Piece { + + public Horse(boolean isWhite, boolean isLeft, Point startingPosition) throws IOException { + super(isWhite, startingPosition); + setPieceIcon("Horse"); + } + + @Override + public LinkedHashSet validMoves(Piece[][] pieces) { + return new LinkedHashSet<>(); + } + + + +} diff --git a/src/schack/King.java b/src/schack/King.java index 0ffca44..a68a2fc 100644 --- a/src/schack/King.java +++ b/src/schack/King.java @@ -13,10 +13,7 @@ public final class King extends Piece { public King(boolean isWhite, Point startingPosition) throws IOException { super(isWhite, startingPosition); - String colorName = isWhite ? "White" : "Black"; - String fileName = colorName + "King.png"; - InputStream is = King.class.getResourceAsStream("../img/" + fileName); - icon = ImageIO.read(is); + setPieceIcon("King"); } public King(boolean isWhite) throws IOException { @@ -64,12 +61,6 @@ public final class King extends Piece { } @Override - public void move(Piece[][] pieces) { - eglibleForCastling = false; - throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody - } - - @Override public String toString() { return "Piece{" + "eglibleForCastling=" + eglibleForCastling + "position=" + position + ", isWhite=" + isWhite + '}'; } diff --git a/src/schack/Pawn.java b/src/schack/Pawn.java index 921c109..5e1aa81 100644 --- a/src/schack/Pawn.java +++ b/src/schack/Pawn.java @@ -22,10 +22,6 @@ public class Pawn extends Piece { } @Override - public void move(Piece[][] pieces) { - throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody - } -@Override public String toString() { return "Pawn{" + "position=" + position + ", isWhite=" + isWhite + '}'; } diff --git a/src/schack/Piece.java b/src/schack/Piece.java index 14df417..82ec095 100644 --- a/src/schack/Piece.java +++ b/src/schack/Piece.java @@ -16,7 +16,7 @@ public abstract class Piece extends Component { public boolean isWhite; protected BufferedImage icon; - public Piece(boolean isWhite, Point startingPosition) { + public Piece(boolean isWhite, Point startingPosition) throws IOException { this.isWhite = isWhite; this.position = startingPosition; } @@ -48,7 +48,23 @@ public abstract class Piece extends Component { ); } - public abstract void move(Piece[][] pieces); + public void move(Piece[][] pieces, Point toMove, Point selected) { + + try { + System.out.println("toMove: " + toMove); + + pieces[toMove.x][toMove.y] = this; //new Rook(true,new Point(toMove)); + pieces[selected.x][selected.y] = null; + // varför funkar det nu? det borde inte funka nu. + System.out.println("equals: " + selected.equals(this.position)); + + this.position = new Point(toMove); + Board.printPieces(pieces); + + } catch (Exception e) { + System.out.println("jmgfmhyfhm"); + } + } @Override public String toString() { diff --git a/src/schack/Queen.java b/src/schack/Queen.java new file mode 100644 index 0000000..bf29ce8 --- /dev/null +++ b/src/schack/Queen.java @@ -0,0 +1,20 @@ +package schack; + +import java.awt.Point; +import java.io.IOException; +import java.util.LinkedHashSet; + +public class Queen extends Piece { + + public Queen(boolean isWhite, Point point) throws IOException { + super(isWhite,point); + setPieceIcon("Queen"); + } + + @Override + public LinkedHashSet validMoves(Piece[][] pieces) { + return new LinkedHashSet<>(); + } + + +} diff --git a/src/schack/Rook.java b/src/schack/Rook.java new file mode 100644 index 0000000..f0dfd53 --- /dev/null +++ b/src/schack/Rook.java @@ -0,0 +1,20 @@ +package schack; + +import java.awt.Point; +import java.io.IOException; +import java.util.LinkedHashSet; + +public class Rook extends Piece { + + public Rook(boolean isWhite, Point startingPosition) throws IOException { + super(isWhite, startingPosition); + setPieceIcon("Rook"); + } + + @Override + public LinkedHashSet validMoves(Piece[][] pieces) { + return new LinkedHashSet<>(); + } + + +} diff --git a/src/schack/Schack.java b/src/schack/Schack.java index 9d05897..5f84f62 100644 --- a/src/schack/Schack.java +++ b/src/schack/Schack.java @@ -1,10 +1,11 @@ package schack; -import java.awt.Dimension; import java.awt.event.ActionEvent; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; @@ -15,13 +16,16 @@ import javax.swing.JOptionPane; * * @author Love Billenius & Simon Hansson */ -public class Schack extends JFrame { +public class Schack extends JFrame implements Runnable { public Schack() throws IOException { setTitle("Schack"); setAlwaysOnTop(false); setResizable(false); - setContentPane(new Board()); + Board board = new Board(); + setContentPane(board); + getContentPane().addMouseListener(board); + Thread thread = new Thread(this); // Create menu JMenuBar menuBar = new JMenuBar(); @@ -62,6 +66,7 @@ public class Schack extends JFrame { pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); + this.run(); } @@ -70,4 +75,18 @@ public class Schack extends JFrame { } + @Override + public void run() { + + while (true) { + try { + Thread.sleep(12); + } catch (InterruptedException ex) { + Logger.getLogger(Schack.class.getName()).log(Level.SEVERE, null, ex); + } + repaint(); + + } + } + }