diff --git a/src/main/java/com/billenius/schack/BasicMove.java b/src/main/java/com/billenius/schack/BasicMove.java new file mode 100644 index 0000000..7153a04 --- /dev/null +++ b/src/main/java/com/billenius/schack/BasicMove.java @@ -0,0 +1,24 @@ +package com.billenius.schack; + +import java.awt.Point; +import java.io.Serializable; + +public class BasicMove implements Serializable { + public Point from; + public Point to; + + public BasicMove(Point from, Point to) { + this.from = from; + this.to = to; + } + + public BasicMove(Move m) { + this.from = m.from; + this.to = m.to; + } + + public String toString() { + return (from.x + 1) + ":" + (from.y + 1) + + " " + '\u27F6' + " " + (to.x + 1) + ":" + (to.y + 1); + } +} diff --git a/src/main/java/com/billenius/schack/Move.java b/src/main/java/com/billenius/schack/Move.java index 13915b3..73d9a8a 100644 --- a/src/main/java/com/billenius/schack/Move.java +++ b/src/main/java/com/billenius/schack/Move.java @@ -1,25 +1,20 @@ package com.billenius.schack; import java.awt.Point; -import java.io.Serializable; import com.billenius.schack.pieces.Piece; -public class Move implements Serializable { +public class Move extends BasicMove { public Piece movedPiece; - public Point from; - public Point to; - public String color; - public Move(Piece movedPiece, Point from, Point to) { - this.from = from; - this.to = to; - this.color = movedPiece.isWhite() ? "White" : "Black"; - this.movedPiece = movedPiece; + public Move(Piece piece, Point from, Point to) { + super(from, to); + this.movedPiece = piece; } - public String toString() { - return (from.x + 1) + ":" + (from.y + 1) - + " " + '\u27F6' + " " + (to.x + 1) + ":" + (to.y + 1); + public Move(Piece piece, BasicMove basicMove) { + super(basicMove.from, basicMove.to); + this.movedPiece = piece; } + } diff --git a/src/main/java/com/billenius/schack/Schack.java b/src/main/java/com/billenius/schack/Schack.java index 41d1823..23acc35 100644 --- a/src/main/java/com/billenius/schack/Schack.java +++ b/src/main/java/com/billenius/schack/Schack.java @@ -42,21 +42,9 @@ public class Schack { // Förlåt mig fader för jag kommer synda public final static Map pieceIcons = new HashMap<>(); - /** - * Ladda in samtliga pjäsbilder från paketet img - * - * @throws IOException ifall det inte finns någon bild på pjäsen - */ - public void loadAllPieceIcons() throws IOException { - for (String color : new String[] { "Black", "White" }) - for (String piece : new String[] { "Bishop", "Horse", "King", "Pawn", "Queen", "Rook" }) { - InputStream is = getClass().getResourceAsStream("/com/billenius/img/" + color + piece + ".png"); - pieceIcons.put(color + piece, ImageIO.read(is)); - } - } + public Schack() throws IOException { - loadAllPieceIcons(); // Set theme try { if (UIManager.getSystemLookAndFeelClassName() diff --git a/src/main/java/com/billenius/schack/boards/NetworkBoard.java b/src/main/java/com/billenius/schack/boards/NetworkBoard.java index a70f3cf..d29276b 100644 --- a/src/main/java/com/billenius/schack/boards/NetworkBoard.java +++ b/src/main/java/com/billenius/schack/boards/NetworkBoard.java @@ -7,6 +7,7 @@ import java.io.ObjectOutputStream; import java.net.Inet4Address; import java.net.ServerSocket; import java.net.Socket; +import java.net.SocketException; import java.net.SocketTimeoutException; import java.util.Random; import java.awt.BorderLayout; @@ -19,6 +20,7 @@ import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; +import com.billenius.schack.BasicMove; import com.billenius.schack.Move; import com.billenius.schack.SchackState; import com.billenius.schack.pieces.Piece; @@ -79,7 +81,9 @@ public final class NetworkBoard extends Board implements Runnable { "What's the IP of your opponent?", "Schack: Networking", JOptionPane.QUESTION_MESSAGE); - this.socket = new Socket("localhost", 1339); + if (ip.equals("")) + ip = "localhost"; + this.socket = new Socket(ip, 1339); myColor = false; // SVART // Get input/output stream @@ -101,7 +105,7 @@ public final class NetworkBoard extends Board implements Runnable { System.out.println("repainting"); getParent().repaint(); System.out.println("Sending move to opponent"); - outputStream.writeObject(move); + outputStream.writeObject(new BasicMove(move)); System.out.println("Move sent"); SchackState state = getSchackState(); @@ -130,20 +134,6 @@ public final class NetworkBoard extends Board implements Runnable { } - // Hitta våran lokala pjäs på brädet - protected Piece getLocalFromRemote(Piece remotePiece) { - for (Piece[] row : pieces) - for (Piece localPiece : row) { - if (localPiece == null) - continue; - - if (localPiece.equals(remotePiece)) - return remotePiece; - - } - return null; - } - @Override protected void toDoIfNoPreviousPieceSelected(Piece selectedPiece) { if (selectedPiece != null && selectedPiece.isWhite() == myColor) @@ -154,17 +144,18 @@ public final class NetworkBoard extends Board implements Runnable { public void run() { try { while (true) { - Move move = (Move) inputStream.readObject(); + BasicMove basicMove = (BasicMove) inputStream.readObject(); + Move move = new Move(pieces[basicMove.from.x][basicMove.from.y], basicMove); System.out.println("Got move"); moveList.addElement(move); turnCount++; System.out.println("Moving piece"); - pieces[move.from.x][move.from.y].move(pieces, move.to); + move.movedPiece.move(pieces, move.to); System.out.println("Repainting"); getParent().repaint(); } - } catch (EOFException eof) { + } catch (EOFException | SocketException e) { JOptionPane.showMessageDialog(this, "Lost connection to opponent"); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/com/billenius/schack/pieces/Piece.java b/src/main/java/com/billenius/schack/pieces/Piece.java index cf6db96..202e785 100644 --- a/src/main/java/com/billenius/schack/pieces/Piece.java +++ b/src/main/java/com/billenius/schack/pieces/Piece.java @@ -5,15 +5,13 @@ import java.awt.Point; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.imageio.ImageIO; -import com.billenius.schack.Schack; import com.billenius.schack.boards.Board; -public abstract class Piece implements Serializable { +public abstract class Piece { /** * Variabel som alltid bör vara samma värde som pjäsen är i brädes av @@ -33,10 +31,12 @@ public abstract class Piece implements Serializable { * Nödvändigt för rockad */ protected boolean moved = false; + protected BufferedImage pieceIcon; public Piece(boolean white, Point startingPosition) throws IOException { this.isWhite = white; this.position = startingPosition; + this.pieceIcon = getPieceIcon(); } public Piece(boolean white) { @@ -65,6 +65,13 @@ public abstract class Piece implements Serializable { return validMoves(pieces, false); } + private BufferedImage getPieceIcon() throws IOException { + String colorName = isWhite() ? "White" : "Black"; + String path = "/com/billenius/img/" + colorName + getClass().getSimpleName() + ".png"; + InputStream inputStream = getClass().getResourceAsStream(path); + return ImageIO.read(inputStream); + } + /** * Ritar ut pjäsen baserat på den ihågkommna positionen * @@ -220,9 +227,7 @@ public abstract class Piece implements Serializable { } public BufferedImage getIcon() { - String className = this.getClass().getSimpleName(); - String colorName = this.isWhite() ? "White" : "Black"; - return Schack.pieceIcons.get(colorName + className); + return this.pieceIcon; } }