Skip to content
Snippets Groups Projects
Commit b0e832b1 authored by jez04's avatar jez04
Browse files

feat: :tada: solution

parent e06b33a4
Branches solution
No related merge requests found
package lab.game; package lab.game;
import java.io.Serial;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
public class Background extends WorldEntity { public class Background extends WorldEntity {
@Serial
private static final long serialVersionUID = 2566936061563448971L;
private MyPoint[] imagePosition; private MyPoint[] imagePosition;
private static Image[] image; private static Image[] image;
private MyPoint speed; private MyPoint speed;
......
package lab.game; package lab.game;
import java.io.Serial;
import java.util.Random; import java.util.Random;
import javafx.geometry.Rectangle2D; import javafx.geometry.Rectangle2D;
...@@ -9,6 +10,9 @@ import lab.Setup; ...@@ -9,6 +10,9 @@ import lab.Setup;
public class Boat extends WorldEntity implements Collisionable { public class Boat extends WorldEntity implements Collisionable {
@Serial
private static final long serialVersionUID = -8233882073179438194L;
private static final Random RANDOM = new Random(); private static final Random RANDOM = new Random();
private MyPoint speed; private MyPoint speed;
private static Image image; private static Image image;
......
package lab.game; package lab.game;
import java.io.Serial;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
...@@ -7,6 +8,7 @@ import java.util.Random; ...@@ -7,6 +8,7 @@ import java.util.Random;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import javafx.geometry.Rectangle2D; import javafx.geometry.Rectangle2D;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image; import javafx.scene.image.Image;
...@@ -14,13 +16,16 @@ import lab.Setup; ...@@ -14,13 +16,16 @@ import lab.Setup;
public class LochNess extends WorldEntity implements Collisionable { public class LochNess extends WorldEntity implements Collisionable {
@Serial
private static final long serialVersionUID = 5976652721811221254L;
private static Logger log = LogManager.getLogger(LochNess.class); private static Logger log = LogManager.getLogger(LochNess.class);
private static final Random RANDOM = new Random(); private static final Random RANDOM = new Random();
private MyPoint speed; private MyPoint speed;
private static Image image; private static Image image;
private List<DeadListener> deadListeners = new ArrayList<>(); private transient List<DeadListener> deadListeners = new ArrayList<>();
public LochNess(Scene scene) { public LochNess(Scene scene) {
super(scene, new MyPoint(0, 0), 90); super(scene, new MyPoint(0, 0), 90);
......
package lab.game; package lab.game;
import java.io.Serial;
import java.io.Serializable;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public class MyDimension { public class MyDimension implements Serializable {
@Serial
private static final long serialVersionUID = -4053578370437363200L;
private double width; private double width;
......
package lab.game; package lab.game;
public class MyPoint { import java.io.Serial;
import java.io.Serializable;
public class MyPoint implements Serializable {
@Serial
private static final long serialVersionUID = 5131948780897974323L;
public double x; public double x;
public double y; public double y;
......
package lab.game; package lab.game;
import java.io.Serial;
import java.util.Random; import java.util.Random;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
...@@ -10,6 +11,9 @@ import javafx.scene.transform.Transform; ...@@ -10,6 +11,9 @@ import javafx.scene.transform.Transform;
public class Rock extends WorldEntity { public class Rock extends WorldEntity {
@Serial
private static final long serialVersionUID = -7708255870460093800L;
private static final Random RANDOM = new Random(); private static final Random RANDOM = new Random();
private MyDimension size; private MyDimension size;
private double angle = 0; private double angle = 0;
......
package lab.game; package lab.game;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
...@@ -55,11 +62,67 @@ public class Scene { ...@@ -55,11 +62,67 @@ public class Scene {
} }
public void startServer() { public void startServer() {
//TODO: new Thread(() -> {
try (ServerSocket listenSocket = new ServerSocket(4600)) {
while (!Thread.currentThread().isInterrupted()) {
try {
Socket client = listenSocket.accept();
new Thread(() -> handleViewer(client), "Viewer handler").start();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
public void handleViewer(Socket client) {
try (OutputStream outputStream = client.getOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) {
while (!Thread.currentThread().isInterrupted()) {
synchronized (entitiesLock) {
objectOutputStream.reset();
synchronized (entitiesLock) {
objectOutputStream.writeObject(sceneEntitites);
}
objectOutputStream.flush();
}
sleepForWhile();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void sleepForWhile() {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
} }
public void connectToServer() { public void connectToServer() {
//TODO: new Thread(() -> {
try (Socket socketToServer = new Socket("localhost", 4600);
InputStream inputStream = socketToServer.getInputStream();
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream)) {
while (!Thread.currentThread().isInterrupted()) {
Object o = objectInputStream.readObject();
if (o instanceof List l) {
synchronized (entitiesLock) {
sceneEntitites = l;
}
}
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}).start();
} }
record LochNessDeadLog(LocalDateTime time, MyPoint position) { record LochNessDeadLog(LocalDateTime time, MyPoint position) {
......
package lab.game; package lab.game;
import java.io.Serial;
import java.io.Serializable;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
public abstract class WorldEntity implements DrawableSimulable { public abstract class WorldEntity implements DrawableSimulable, Serializable {
protected Scene scene; @Serial
private static final long serialVersionUID = 8500258821894708841L;
protected transient Scene scene;
protected MyPoint position; protected MyPoint position;
private int zIndex; private int zIndex;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment