diff --git a/src/main/java/org/example/chaosgame/controller/ChaosGameController.java b/src/main/java/org/example/chaosgame/controller/ChaosGameController.java index f35c5b7893d0f580b2138992730dbbea115a634b..e0bb81efc91866d9f8dbde354e8cd66e4a649651 100644 --- a/src/main/java/org/example/chaosgame/controller/ChaosGameController.java +++ b/src/main/java/org/example/chaosgame/controller/ChaosGameController.java @@ -73,6 +73,14 @@ public class ChaosGameController implements Observer, Subject, GameController { if (steps < 1 || steps > 10000000) { throw new NumberFormatException(); } + if (chaosGame.getDescription().getTransforms().getFirst() instanceof JuliaTransform && steps > 250000) { + AlertUtility.showErrorDialog("Invalid input", "Please enter a lower amount of steps for Julia transformations."); + return; + } + if (chaosGame.getTotalSteps() > Math.pow(10, 8)) { + AlertUtility.showErrorDialog("Invalid input", "The total number of steps is too high. Please reset the game."); + return; + } chaosGame.setSteps(steps); chaosGame.addTotalSteps(steps); chaosGame.runSteps(); @@ -153,14 +161,33 @@ public class ChaosGameController implements Observer, Subject, GameController { if (result.isPresent()) { Object fractalData = result.get(); - + List<Transform2D> transforms = new ArrayList<>(); if (fractalData instanceof List) { - List<AffineTransform2D> transformations = (List<AffineTransform2D>) fractalData; - List<Transform2D> transforms = new ArrayList<>(transformations); - updateChaosGame(new ChaosGameDescription( - new Vector2D(0, 0), - new Vector2D(1.0, 1.0), - transforms)); + List<List<String>> userInput = (List<List<String>>) fractalData; + for(List<String> input : userInput) { + try { + double a = Double.parseDouble(input.get(0)); + double b = Double.parseDouble(input.get(1)); + double c = Double.parseDouble(input.get(2)); + double d = Double.parseDouble(input.get(3)); + double x = Double.parseDouble(input.get(4)); + double y = Double.parseDouble(input.get(5)); + + if (a < -5 || a > 5 || b < -5 || b > 5 || c < -5 || c > 5 || + d < -5 || d > 5 || x < -5 || x > 5 || y < -5 || y > 5) { + throw new NumberFormatException(); + } else { + transforms.add(new AffineTransform2D(new Matrix2x2(a, b, c, d), new Vector2D(x, y))); + } + updateChaosGame(new ChaosGameDescription( + chaosGame.getDescription().getMinCoords(), + chaosGame.getDescription().getMaxCoords(), + transforms)); + } catch (NumberFormatException e) { + AlertUtility.showErrorDialog("Invalid input", "Please enter a valid number."); + } + } +// List<Transform2D> transforms = new ArrayList<>(transformations); } else if (fractalData instanceof Pair) { Pair<String, String> userInput = (Pair<String, String>) fractalData; try { // Check if the input is a valid number @@ -171,24 +198,13 @@ public class ChaosGameController implements Observer, Subject, GameController { AlertUtility.showErrorDialog("Invalid input", "Please enter a double between -1 and 1. No letters are allowed."); } else { updateChaosGame(new ChaosGameDescription( - new Vector2D(-1.6, -1), - new Vector2D(1.6, 1.0), + chaosGame.getDescription().getMinCoords(), + chaosGame.getDescription().getMaxCoords(), List.of(new JuliaTransform(new Complex(real, imaginary), 1)))); } } catch (NumberFormatException e) { AlertUtility.showErrorDialog("Invalid input", "Please enter a valid number."); } - double real = Double.parseDouble(userInput.getKey()); - double imaginary = Double.parseDouble(userInput.getValue()); - - if (real < -1 || real > 1 || imaginary < -1 || imaginary > 1) { - AlertUtility.showErrorDialog("Invalid input", "Please enter a double between -1 and 1. No letters are allowed."); - } else { - updateChaosGame(new ChaosGameDescription( - new Vector2D(-1.6, -1), - new Vector2D(1.6, 1.0), - List.of(new JuliaTransform(new Complex(real, imaginary), 1)))); - } } } } diff --git a/src/main/java/org/example/chaosgame/view/GamePage.java b/src/main/java/org/example/chaosgame/view/GamePage.java index 74a8bdaa625ae904050c64bf97751309aa1cb954..a88da5c8d7da50df25efed1ac203754ea9ea6306 100644 --- a/src/main/java/org/example/chaosgame/view/GamePage.java +++ b/src/main/java/org/example/chaosgame/view/GamePage.java @@ -19,7 +19,7 @@ import java.util.Objects; public abstract class GamePage extends BorderPane { protected final GraphicsContext gc; - private static final int COLOR_FACTOR = 6; + private static final int COLOR_FACTOR = 3; private static final int CANVAS_WIDTH = 1250; private static final int CANVAS_HEIGHT = 805; private static final int MAX_COLOR_VALUE = 255;