Ändra tillbaka till pjäs vet sin ikon. Ändra tillbaka tilld det överlägset snyggare sättet där varje pjäs vet sin egna ikon. Anledningen till att det byttes mot att istället ha en statisk map med samtliga ikoner, var därför att man inte kan skicka ikoner över nätverk. Detta är nu löst med att man endast skickar kordinater över nätverk som sedan görs om till en kordinat med pjäs.

This commit is contained in:
Love 2022-12-06 18:41:44 +01:00
parent ee85052295
commit bf9d170040
5 changed files with 54 additions and 51 deletions

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -42,21 +42,9 @@ public class Schack {
// Förlåt mig fader för jag kommer synda
public final static Map<String, BufferedImage> pieceIcons = new HashMap<>();
/**
* Ladda in samtliga pjäsbilder från paketet img
*
* @throws IOException ifall det inte finns någon bild 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()

View File

@ -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 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();

View File

@ -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 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;
}
}