summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriy Cherniy <qugalet@m0e.space>2024-06-17 05:10:58 +0300
committerAndriy Cherniy <qugalet@m0e.space>2024-06-17 05:10:58 +0300
commit943bc45a13256d57c82ed58f22aa2cb802292744 (patch)
treeada8c6d5eefa3e4034504bfcc5eb03ab84597ebe
parent3401d742ca53dce6bb1464cc12f94d107cfc285d (diff)
downloadoop-kursach-943bc45a13256d57c82ed58f22aa2cb802292744.tar.gz
oop-kursach-943bc45a13256d57c82ed58f22aa2cb802292744.zip
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEADmaster
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/Main.java68
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java1
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java2
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/common/MiniMap.java4
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java16
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java41
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/handlers/DwarfHandler.java42
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/handlers/ImmigrantHandler.java2
8 files changed, 136 insertions, 40 deletions
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/Main.java b/src/main/java/space/m0e/quga/oop/lab56maven/Main.java
index 65a0f5d..17b1e0f 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/Main.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/Main.java
@@ -36,10 +36,7 @@ import space.m0e.quga.oop.lab56maven.handlers.DwarfHandler;
import space.m0e.quga.oop.lab56maven.handlers.ImmigrantHandler;
import java.io.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@@ -54,8 +51,8 @@ public class Main extends Application {
public static MiniMap miniMap;
- public static final double width = 3555;
- public static final double height = 2000;
+ public static final double width = 5000;
+ public static final double height = 2812;
public static ImageView imgviewmap;
public static Rectangle rectMinimap;
@@ -68,29 +65,68 @@ public class Main extends Application {
fileChooser.setInitialFileName("serial.csv");
root.getChildren().add(rect);
- Fortress fortress = new Fortress("Eartha", 150, 150,
+
+ fortresses.add(new Fortress("Eartha", 150, 150,
new ArrayList<>(List.of(
new Workstation("Torgrus", Ability.MASONIST),
new Workstation("Abbacus", Ability.WOODCUTTER)
)),
new ArrayList<>(List.of(
new ThroneRoom("Halzorga"))
- ));
-
- Fortress fortressTrade = new Fortress("Aboba", 1000, 150,
+ )));
+ fortresses.add(new Fortress("Aboba", 1000, 150,
new ArrayList<>(List.of(
new Workstation("Torgrass", Ability.WOODCUTTER)
)),
new ArrayList<>(List.of(
+ ))));
+
+ fortresses.add(new Fortress("Eldoria", 2300, 500,
+ new ArrayList<>(List.of(
+ new Workstation("Eldoria Workstation", Ability.MASONIST)
+ )),
+ new ArrayList<>(List.of(
+ new ThroneRoom("Eldoria Throne Room"))
)));
- fortresses.add(fortressTrade);
- fortresses.add(fortress);
- fortressTrade.setWoodCount(999);
+ fortresses.add(new Fortress("Valeria", 800, 1600,
+ new ArrayList<>(List.of(
+ new Workstation("Valeria Workstation", Ability.WOODCUTTER)
+ )),
+ new ArrayList<>(List.of(
+ new ThroneRoom("Valeria Throne Room"))
+ )));
+ fortresses.add(new Fortress("Dunewood", 2700, 2100,
+ new ArrayList<>(List.of(
+ new Workstation("Dunewood Workstation", Ability.MASONIST)
+ )),
+ new ArrayList<>(List.of(
+ new ThroneRoom("Dunewood Throne Room"))
+ )));
+ fortresses.add(new Fortress("Glimmerstone", 3300, 200,
+ new ArrayList<>(List.of(
+ new Workstation("Glimmerstone Workstation", Ability.WOODCUTTER)
+ )),
+ new ArrayList<>(List.of(
+ new ThroneRoom("Glimmerstone Throne Room"))
+ )));
+ fortresses.add(new Fortress("Stormwatch", 4000, 1000,
+ new ArrayList<>(List.of(
+ new Workstation("Stormwatch Workstation", Ability.MASONIST)
+ )),
+ new ArrayList<>(List.of(
+ new ThroneRoom("Stormwatch Throne Room"))
+ )));
+
+ fortresses.get(0).setWoodCount(1000);
+ fortresses.get(1).setStoneCount(1000);
-// immigrants.add(new Immigrant("Melbil", "Lancerpaddle", 50, 100,100, Ability.WOODCUTTER));
-// immigrants.add(new Immigrant("Atír", "Razorpaddle", 50, 0,0, Ability.WOODCUTTER));
-// immigrants.add(new Immigrant("Onget", "Sabreletter", 52, 200,150, Ability.WOODCUTTER));
+ immigrants.add(new Immigrant("Melbil", "Lancerpaddle", 50, 0,50, Ability.COMMUNICATION));
+ immigrants.add(new Immigrant("Atír", "Razorpaddle", 50, 0,50, Ability.COMMUNICATION));
+ immigrants.add(new Immigrant("Onget", "Sabreletter", 52, 200,140, Ability.MASONIST));
immigrants.add(new Immigrant("Limul", "Rockrack", 52, 700,150, Ability.WOODCUTTER));
+// for (int i = 0; i < 20; i++) {
+// immigrants.add(new Immigrant())
+// }
root.getChildren().add(status);
group.getChildren().add(root);
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java
index 6dc4448..9002fc5 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java
@@ -19,7 +19,6 @@ public class GoToWorkstationDecision extends Decision {
public void cycle() {
Workstation near = dwarf.findNearestWorkstation();
if (near != null) {
- System.out.println(near.getName());
Platform.runLater(dwarf::updateItemLabel);
dwarf.getFortress().removeFromContainer(dwarf);
Coordinates nearCoordinates = dwarf.getCoordinatesToWorkstation(near);
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java
index 493fb45..784f061 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java
@@ -33,10 +33,12 @@ public class GoTradingDecision extends Decision {
Item getItem = null;
switch (tradingItem) {
case WOOD -> {
+ near.setWoodCount(near.getWoodCount() + amountOfItem);
near.setStoneCount(near.getStoneCount() - amountOfItem);
getItem = Item.STONE;
}
case STONE -> {
+ near.setStoneCount(near.getStoneCount() + amountOfItem);
near.setWoodCount(near.getWoodCount() - amountOfItem);
getItem = Item.WOOD;
}
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/MiniMap.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/MiniMap.java
index 5e5f319..0a6b25b 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/MiniMap.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/MiniMap.java
@@ -16,8 +16,8 @@ public class MiniMap extends Rectangle
setWidth(width);
this.mainGroup = mainGroup;
setFill(Color.GREY);
- setStroke(Color.GREEN);
- setStrokeWidth(5);
+ setStroke(Color.YELLOW);
+ setStrokeWidth(2);
rect.setWidth(selectionWidth);
rect.setHeight(selectionHeight);
rect.setFill(Color.TRANSPARENT);
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java
index 3264802..fe34ce1 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java
@@ -36,6 +36,13 @@ public class Fortress {
return throneRooms;
}
+ public ArrayList<String> getAvailableDecisions() {
+ return availableDecisions;
+ }
+
+ private ArrayList<String> availableDecisions = new ArrayList<String>();
+
+
ArrayList<ThroneRoom> throneRooms = new ArrayList<>();
ArrayList<Dwarf> dwarves = new ArrayList<>();
@@ -112,6 +119,14 @@ public class Fortress {
// this.dwarvesContainer.setBorder(new Border(new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3))));
// dwarvesContainer.setMinSize(100 * 3, 100 * 3);
hBox.getChildren().addAll(countLabel, resourcesLabel);
+ availableDecisions.add("GoToDwarvesContainer");
+ availableDecisions.add("GoTrading");
+ if (!workstations.isEmpty()) {
+ availableDecisions.add("GoToWorkstation");
+ }
+ if (!throneRooms.isEmpty()) {
+ availableDecisions.add("GoToThroneRoom");
+ }
vBox.setLayoutX(x);
vBox.setLayoutY(y);
@@ -137,6 +152,7 @@ public class Fortress {
public void add(Dwarf dwarf) {
dwarves.add(dwarf);
countLabel.setText(String.valueOf(dwarves.size()));
+ dwarf.getTimeline().play();
dwarvesContainer.getChildren().add(dwarf.getGroup());
}
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java
index daaa9c5..a36f66a 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java
@@ -4,6 +4,7 @@ import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Platform;
+import javafx.geometry.Bounds;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.util.Duration;
@@ -139,16 +140,44 @@ public class Dwarf extends Immigrant {
}).findFirst().orElse(null);
}
+// public Coordinates getCoordinatesToWorkstation(Workstation workstation) {
+// double workstationX = workstation.getGroup().getLayoutX() + workstation.getGroup().getBoundsInParent().getWidth() - this.getGroup().getBoundsInParent().getWidth();
+// double workstationY = workstation.getGroup().getLayoutY() + workstation.getGroup().getBoundsInParent().getHeight() - this.getGroup().getBoundsInParent().getHeight();
+// return new Coordinates(workstationX, workstationY);
+// }
public Coordinates getCoordinatesToWorkstation(Workstation workstation) {
- double workstationX = workstation.getGroup().getLayoutX() + workstation.getGroup().getBoundsInParent().getWidth() - this.getGroup().getBoundsInParent().getWidth();
- double workstationY = workstation.getGroup().getLayoutY() + workstation.getGroup().getBoundsInParent().getHeight() - this.getGroup().getBoundsInParent().getHeight();
+ // Отримання меж групи робочої станції в координатах сцени
+ Bounds workstationBoundsInScene = workstation.getGroup().localToScene(workstation.getGroup().getBoundsInLocal());
+
+ // Отримання меж кореневої групи в координатах сцени
+ Bounds rootBoundsInScene = this.getGroup().getScene().getRoot().localToScene(this.getGroup().getScene().getRoot().getBoundsInLocal());
+
+ // Обчислення відносних координат робочої станції відносно кореневої групи
+ double workstationX = workstationBoundsInScene.getMinX() - rootBoundsInScene.getMinX();
+ double workstationY = workstationBoundsInScene.getMinY() - rootBoundsInScene.getMinY();
+
return new Coordinates(workstationX, workstationY);
}
- public Coordinates getCoordinatesToThroneRoom(ThroneRoom throneRoom) {
- double throneRoomX = throneRoom.getGroup().getLayoutX() + throneRoom.getGroup().getBoundsInParent().getWidth() / 2 + this.getGroup().getBoundsInParent().getWidth();
- double throneRoomY = throneRoom.getGroup().getLayoutY() + throneRoom.getGroup().getBoundsInParent().getHeight() / 2 + this.getGroup().getBoundsInParent().getHeight();
- return new Coordinates(throneRoomX, throneRoomY);
+
+// public Coordinates getCoordinatesToThroneRoom(ThroneRoom throneRoom) {
+// double throneRoomX = throneRoom.getGroup().getLayoutX() + throneRoom.getGroup().getBoundsInParent().getWidth() / 2 + this.getGroup().getBoundsInParent().getWidth();
+// double throneRoomY = throneRoom.getGroup().getLayoutY() + throneRoom.getGroup().getBoundsInParent().getHeight() / 2 + this.getGroup().getBoundsInParent().getHeight();
+// return new Coordinates(throneRoomX, throneRoomY);
+// }
+
+ public Coordinates getCoordinatesToThroneRoom(ThroneRoom workstation) {
+ // Отримання меж групи робочої станції в координатах сцени
+ Bounds workstationBoundsInScene = workstation.getGroup().localToScene(workstation.getGroup().getBoundsInLocal());
+
+ // Отримання меж кореневої групи в координатах сцени
+ Bounds rootBoundsInScene = this.getGroup().getScene().getRoot().localToScene(this.getGroup().getScene().getRoot().getBoundsInLocal());
+
+ // Обчислення відносних координат робочої станції відносно кореневої групи
+ double workstationX = workstationBoundsInScene.getMinX() - rootBoundsInScene.getMinX();
+ double workstationY = workstationBoundsInScene.getMinY() - rootBoundsInScene.getMinY();
+
+ return new Coordinates(workstationX, workstationY);
}
public void free() {
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/handlers/DwarfHandler.java b/src/main/java/space/m0e/quga/oop/lab56maven/handlers/DwarfHandler.java
index 7ba5466..1e6b0c7 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/handlers/DwarfHandler.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/handlers/DwarfHandler.java
@@ -10,9 +10,10 @@ import space.m0e.quga.oop.lab56maven.entities.common.Coordinates;
import space.m0e.quga.oop.lab56maven.entities.common.Item;
import space.m0e.quga.oop.lab56maven.entities.macro.Fortress;
import space.m0e.quga.oop.lab56maven.entities.micro.Dwarf;
+import space.m0e.quga.oop.lab56maven.entities.micro.Nobel;
-import java.util.Objects;
import java.util.Random;
+import java.util.concurrent.atomic.AtomicBoolean;
public class DwarfHandler implements EventHandler<ActionEvent> {
public Dwarf getDwarf() {
@@ -25,10 +26,6 @@ public class DwarfHandler implements EventHandler<ActionEvent> {
private int timer = 0;
- public Decision getDecision() {
- return decision;
- }
-
public void setDecision(Decision decision) {
this.decision = decision;
}
@@ -78,30 +75,47 @@ public class DwarfHandler implements EventHandler<ActionEvent> {
}
} else {
if (decision == null) {
- String decisionName = availableDecisions[new Random().nextInt(availableDecisions.length)];
- while (Objects.equals(lastDecision, decisionName)) {
- decisionName = availableDecisions[new Random().nextInt(availableDecisions.length)];
- }
- lastDecision = decisionName;
+ Fortress fortress = dwarf.getFortress();
+ String decisionName = fortress.getAvailableDecisions().get(new Random().nextInt(fortress.getAvailableDecisions().size()));
+// while (Objects.equals(lastDecision, decisionName)) {
+// decisionName = availableDecisions[new Random().nextInt(availableDecisions.length)];
+// }
+// lastDecision = decisionName;
switch (decisionName) {
case "GoToWorkstation" -> {
if (dwarf.getAge() > 12 && dwarf.getAge() < 70 && dwarf.getAbility() != Ability.COMMUNICATION ) {
- decision = new GoToWorkstationDecision(new Random().nextInt(timer + 200, timer + 500), dwarf);
+ decision = new GoToWorkstationDecision(new Random().nextInt(timer + 5, timer + 50), dwarf);
}
}
case "GoToDwarvesContainer" -> {
if (dwarf.getFortress().contains(dwarf))
break;
- decision = new GoToDwarvesContainerDecision(new Random().nextInt(timer + 200, timer + 500), dwarf);
+ decision = new GoToDwarvesContainerDecision(new Random().nextInt(timer + 5, timer + 50), dwarf);
}
case "GoToThroneRoom" -> {
if (dwarf.getAge() > 35 && dwarf.getAge() < 70) {
- decision = new GoToThroneRoomDecision(new Random().nextInt(timer + 200, timer + 500), dwarf);
+// if (!dwarf.getFortress().getDwarves().stream().anyMatch(dwarf1 -> {
+// DwarfHandler dwarfHandler = (DwarfHandler) dwarf1.getHandler();
+// return dwarfHandler.decision.getClass().getSimpleName().equals("GoToThroneRoomDecision");
+// }))
+ AtomicBoolean isThroneEmpty = new AtomicBoolean(false);
+ dwarf.getFortress().getDwarves().stream().forEach(dwarf1 -> {
+ if (dwarf1 instanceof Nobel) {
+ return;
+ }
+
+ DwarfHandler dwarfHandler = (DwarfHandler) dwarf1.getHandler();
+ if (dwarfHandler.decision != null && dwarfHandler.decision.getClass().getSimpleName().equals("GoToThroneRoomDecision")) {
+ isThroneEmpty.set(true);
+ }
+ });
+ if (!isThroneEmpty.get()) {
+ decision = new GoToThroneRoomDecision(new Random().nextInt(timer + 5, timer + 50), dwarf);
+ }
}
}
case "GoTrading" -> {
if (dwarf.getAbility() == Ability.COMMUNICATION) {
- Fortress fortress = dwarf.getFortress();
Item itemToTrade;
int amountToTrade;
if (fortress.getWoodCount() > 0 && fortress.getWoodCount() >= fortress.getStoneCount()) {
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/handlers/ImmigrantHandler.java b/src/main/java/space/m0e/quga/oop/lab56maven/handlers/ImmigrantHandler.java
index fe9a3f0..28edbb9 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/handlers/ImmigrantHandler.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/handlers/ImmigrantHandler.java
@@ -37,10 +37,10 @@ public class ImmigrantHandler implements EventHandler<ActionEvent> {
Platform.runLater(() -> {
immigrant.getTimeline().stop();
Dwarf dwarf = new Dwarf(immigrant, fortress);
- dwarf.getTimeline().play();
Main.immigrants.remove(immigrant);
Main.immigrants.add(dwarf);
fortress.add(dwarf);
+// dwarf.getTimeline().play();
Main.root.getChildren().remove(immigrant.getGroup());
});
}