Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions oolab/src/main/java/agh/ics/oop/Simulation.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.ArrayList;
import java.util.List;

public class Simulation {
public class Simulation implements Runnable{
private final List<Animal> Animals = new ArrayList<>();
private List<MoveDirection> Moves = new ArrayList<>();
private final WorldMap Map;
Expand All @@ -26,10 +26,9 @@ public Simulation(List<Vector2d> positions, List<MoveDirection> moves, WorldMap

}

public void run() {
public synchronized void run() {
int animal_count = Animals.size();
int cnt = 0;

for(MoveDirection currentMove : Moves) {
Animal current_animal = Animals.get(0);
Animals.remove(0);
Expand Down
32 changes: 22 additions & 10 deletions oolab/src/main/java/agh/ics/oop/World.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package agh.ics.oop;

import agh.ics.oop.model.*;
import org.w3c.dom.css.Rect;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -27,22 +28,33 @@ public static void run(List<MoveDirection> directions) {
}
}
}

public static void main(String[] args) {
List<MoveDirection> directions = new ArrayList<>();

String[] args1 = {"f", "f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f"};
String[] args1 = {"f", "f","f","f","f","f","f","f","f"};

try {
directions = OptionsParser.Parser(args1);
List<Vector2d> positions = List.of(new Vector2d(2,2), new Vector2d(3,4), new Vector2d(0,0));
GrassField map = new GrassField(10);
map.addListener(new ConsoleMapDisplay());
Simulation sim = new Simulation(positions, directions, map);
sim.run();
} catch (IllegalArgumentException e){
e.printStackTrace();
}
List <Simulation> listOfSimulations = new ArrayList<>();
ConsoleMapDisplay listener = new ConsoleMapDisplay();
for(int i = 0; i < 20; i++) {
directions = OptionsParser.Parser(args1);
List<Vector2d> positions = List.of(new Vector2d(2,2), new Vector2d(3,4), new Vector2d(0,0));
GrassField map = new GrassField(10);
map.addListener(listener);
listOfSimulations.add(new Simulation(positions, directions, map));
}


SimulationEngine simulationEngine = new SimulationEngine(listOfSimulations);
simulationEngine.runAsyncInThreadPool();
simulationEngine.awaitSimulationsEnds();

System.out.println("koniec programu");

} catch (IllegalArgumentException | InterruptedException e){
e.printStackTrace();
}


}
Expand Down
3 changes: 3 additions & 0 deletions oolab/src/main/java/agh/ics/oop/model/AbstractWorldMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

public abstract class AbstractWorldMap implements WorldMap {
protected Map<Vector2d, Animal> animals = new HashMap<>();

public static int ID = 0;
protected Map<Vector2d, WorldElement> all_elements = new HashMap<>();
protected MapVisualizer mapVisualizer = new MapVisualizer(this);
Vector2d MAP_LEFT_BOTTOM = new Vector2d(0,0);
Expand All @@ -16,6 +18,7 @@ public abstract class AbstractWorldMap implements WorldMap {
protected ArrayList<MapChangeListener> listeners = new ArrayList<>();

public AbstractWorldMap() {
ID+=1;
listeners = new ArrayList<>();
}

Expand Down
10 changes: 4 additions & 6 deletions oolab/src/main/java/agh/ics/oop/model/ConsoleMapDisplay.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package agh.ics.oop.model;

public class ConsoleMapDisplay implements MapChangeListener{
private int changescount;

public ConsoleMapDisplay() {
this.changescount = 0;
}
private int changescount = 0;
@Override
public void mapChanged(WorldMap worldMap, String message) {
public synchronized void mapChanged(WorldMap worldMap, String message) {
changescount++;

System.out.println(worldMap.getId());
System.out.println(message);
System.out.println(worldMap.toString());
System.out.println("Number of changes: " + changescount + "\n\n\n");
Expand Down
4 changes: 4 additions & 0 deletions oolab/src/main/java/agh/ics/oop/model/GrassField.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,8 @@ public Map<Vector2d, WorldElement> getElements(){

return all_elements;
}

public String getId(){
return "GrassField Map nr " + ID;
}
}
8 changes: 8 additions & 0 deletions oolab/src/main/java/agh/ics/oop/model/RectangularMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,12 @@ public Vector2d getMAP_RIGHT_TOP() {
public Vector2d getMAP_LEFT_BOTTOM() {
return MAP_LEFT_BOTTOM;
}
@Override
public String toString() {
return mapVisualizer.draw(MAP_LEFT_BOTTOM, MAP_RIGHT_TOP);
}

public String getId(){
return "Rectangular MAP nr " + ID;
}
}
51 changes: 51 additions & 0 deletions oolab/src/main/java/agh/ics/oop/model/SimulationEngine.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package agh.ics.oop.model;

import agh.ics.oop.Simulation;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;

import static java.util.concurrent.Executors.newFixedThreadPool;

public class SimulationEngine{

ExecutorService simulatorExecutor = null;
List <Simulation> simulationList = new ArrayList<>();
List <Thread> simulationThreads = new ArrayList<>();
public SimulationEngine(List<Simulation> simulationList){
this.simulationList = simulationList;
}
public void runSync(){
for(Simulation simulation : simulationList){
simulation.run();
}
}
public void runAsync() {
for(Simulation simulation : simulationList) {
Thread thread = new Thread(simulation);
simulationThreads.add(thread);
thread.start();
}
}

public void awaitSimulationsEnds() throws InterruptedException
{
for(Thread thread : simulationThreads) {
thread.join();
}

if(simulatorExecutor != null) {
simulatorExecutor.shutdown();
if (!simulatorExecutor.awaitTermination(10, TimeUnit.SECONDS)) {
simulatorExecutor.shutdownNow();
}
}
}

public void runAsyncInThreadPool(){
simulatorExecutor = newFixedThreadPool(4);
simulationList.forEach(simulatorExecutor :: submit);
}
}
2 changes: 2 additions & 0 deletions oolab/src/main/java/agh/ics/oop/model/WorldMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,6 @@ public interface WorldMap extends MoveValidator {
* @return animal or null if the position is not occupied.
*/
WorldElement objectAt(Vector2d position);

String getId();
}