From 4ae11bba068053f8c4264e006681ea5569385441 Mon Sep 17 00:00:00 2001 From: lucas Date: Sun, 19 May 2024 14:29:23 +0200 Subject: [PATCH] V1.1-working board (make step broken) --- OOP_D7_Project/src/backend/Sheep.java | 2 +- OOP_D7_Project/src/backend/Simulator.java | 123 +++++++++++++++------ OOP_D7_Project/src/backend/Teleporter.java | 35 ++++++ OOP_D7_Project/src/backend/World.java | 51 +++++++++ 4 files changed, 175 insertions(+), 36 deletions(-) create mode 100644 OOP_D7_Project/src/backend/Teleporter.java create mode 100644 OOP_D7_Project/src/backend/World.java diff --git a/OOP_D7_Project/src/backend/Sheep.java b/OOP_D7_Project/src/backend/Sheep.java index ece8a18..173bcf6 100644 --- a/OOP_D7_Project/src/backend/Sheep.java +++ b/OOP_D7_Project/src/backend/Sheep.java @@ -36,7 +36,7 @@ public class Sheep extends Agent { hunger++; } this.moveRandom(); - return hunger>10; + return hunger<10; } private void moveRandom() { diff --git a/OOP_D7_Project/src/backend/Simulator.java b/OOP_D7_Project/src/backend/Simulator.java index 27e3430..fd5ca16 100644 --- a/OOP_D7_Project/src/backend/Simulator.java +++ b/OOP_D7_Project/src/backend/Simulator.java @@ -24,6 +24,8 @@ public class Simulator extends Thread { private boolean loopingBorder; private boolean clickActionFlag; private int loopDelay = 150; + + World currentWorld = new World(getWidth(), getHeight()); //TODO : add missing attribute(s) @@ -36,7 +38,7 @@ public class Simulator extends Thread { agents = new ArrayList(); fieldBirthValues = new ArrayList(); - fieldSurviveValues = new ArrayList(); + fieldSurviveValues = new ArrayList(); //TODO : add missing attribute initialization @@ -50,13 +52,11 @@ public class Simulator extends Thread { } public int getWidth() { - //TODO : replace with proper return - return 0; + return COL_NUM; } public int getHeight() { - //TODO : replace with proper return - return 0; + return LINE_NUM; } //Should probably stay as is @@ -91,7 +91,8 @@ public class Simulator extends Thread { // only modify if sure of what you do // to modify agent behavior, see liveTurn method // in agent classes - for(Agent agent : agents) { + for(int i=agents.size()-1;i>=0;i--) { + Agent agent = agents.get(i); ArrayList neighbors = this.getNeighboringAnimals( agent.getX(), @@ -103,6 +104,25 @@ public class Simulator extends Thread { agents.remove(agent); } } + ArrayListframe= new ArrayList(); + String frameLine = ""; + + for (int i=0;i getSaveState() { - //TODO : complete method with proper return - return null; + ArrayList outputSaveState = new ArrayList(); + for (int i=0; i lines) { + public void loadSaveState(ArrayList lines) { + /* * First some checks that the file is usable * We call early returns in conditions like this @@ -241,14 +284,7 @@ public class Simulator extends Thread { * to be alive in new state */ public void generateRandom(float chanceOfLife) { - //TODO : complete method - /* - * Advice : - * as you should probably have a separate class - * representing the field of cells... - * maybe just make a constructor in there - * and use it here - */ + currentWorld.randomizer(chanceOfLife); } public boolean isLoopingBorder() { @@ -266,11 +302,15 @@ public class Simulator extends Thread { } public void setLoopDelay(int delay) { - //TODO : complete method + loopDelay = delay; } public void toggleClickAction() { - //TODO : complete method + if (clickActionFlag) { + clickActionFlag = false; + } else { + clickActionFlag = true; + } } /** @@ -282,9 +322,18 @@ public class Simulator extends Thread { * @see loadRule for inverse process */ public ArrayList getRule() { - //TODO : complete method with proper return - - return null; + ArrayList outputRule = new ArrayList(); + String rule = ""; + for (int i:fieldBirthValues) { + rule += (i+";"); + } + outputRule.add(rule); + rule = ""; + for (int i:fieldSurviveValues) { + rule += (i+";"); + } + outputRule.add(rule); + return outputRule; } public void loadRule(ArrayList lines) { @@ -292,7 +341,8 @@ public class Simulator extends Thread { System.out.println("empty rule file"); return; } - //TODO : remove previous rule (=emptying lists) + fieldSurviveValues.clear(); + fieldBirthValues.clear(); String surviveLine = lines.get(0); @@ -300,16 +350,15 @@ public class Simulator extends Thread { String[] surviveElements = surviveLine.split(";"); for(int x=0; x=0) { + out = value; + if (out>=size) { + out = out - size; + } + } + else { + out = size + value; + } + } + else { + if (value>=0) { + out = value; + if (out>=size) { + out = -99; + } + } + else { + out = -99; + } + } + return out; + } + +} diff --git a/OOP_D7_Project/src/backend/World.java b/OOP_D7_Project/src/backend/World.java new file mode 100644 index 0000000..0776158 --- /dev/null +++ b/OOP_D7_Project/src/backend/World.java @@ -0,0 +1,51 @@ +package backend; +import java.util.Random; + + +public class World { + Random randGen = new Random(); + Teleporter teleportX ; + Teleporter teleportY ; + + private int[][] currentWorld; + public World(int width, int height) { + currentWorld = new int[width][height]; + this.teleportX = new Teleporter(width); + this.teleportY = new Teleporter(height); + } + public void randomizer(double randValue) { + for (int i =0; i < currentWorld.length; i++) { + for (int j =0; j < currentWorld[i].length; j++) { + if (randGen.nextFloat()