From 3f37c035844e95b7f56750d99611011379ab2eb9 Mon Sep 17 00:00:00 2001 From: przemuuu Date: Wed, 22 Nov 2023 21:26:46 +0100 Subject: [PATCH 1/3] lab4 - Bonus --- .../src/main/java/agh/ics/oop/Simulation.java | 9 +-- .../java/agh/ics/oop/model/MoveValidator.java | 4 +- .../agh/ics/oop/model/RectangularMap.java | 19 +++--- .../main/java/agh/ics/oop/model/TextMap.java | 68 +++++++++++++++++++ .../main/java/agh/ics/oop/model/WorldMap.java | 16 +++-- .../java/agh/ics/oop/model/AnimalTest.java | 2 +- .../agh/ics/oop/model/RectangularMapTest.java | 16 ++--- .../java/agh/ics/oop/model/TextMapTest.java | 63 +++++++++++++++++ 8 files changed, 165 insertions(+), 32 deletions(-) create mode 100644 oolab/src/main/java/agh/ics/oop/model/TextMap.java create mode 100644 oolab/src/test/java/agh/ics/oop/model/TextMapTest.java diff --git a/oolab/src/main/java/agh/ics/oop/Simulation.java b/oolab/src/main/java/agh/ics/oop/Simulation.java index 394ad52..35d5ee8 100644 --- a/oolab/src/main/java/agh/ics/oop/Simulation.java +++ b/oolab/src/main/java/agh/ics/oop/Simulation.java @@ -13,15 +13,15 @@ public class Simulation { private List animals = new ArrayList(); private List moves; - private WorldMap map; + private WorldMap map; private MapVisualizer visualizer; - public Simulation(List positions, List moves, WorldMap map) { + public Simulation(List positions, List moves, WorldMap map) { this.moves = moves; this.map = map; this.visualizer = new MapVisualizer(map); for(Vector2d position : positions) { Animal animal = new Animal(position); - if(map.place(animal)) { + if(map.place(animal,position)) { animals.add(animal); } } @@ -33,10 +33,11 @@ public void run() { int i = 0; int count = animals.size(); Vector2d upperRight = map.getUpperRight(); + Vector2d lowerLeft = map.getLowerLeft(); for(MoveDirection move : moves) { Animal animal = animals.get(i%count); map.move(animal,move); - System.out.println(visualizer.draw(new Vector2d(0,0),upperRight)); + System.out.println(visualizer.draw(lowerLeft,upperRight)); i++; } } diff --git a/oolab/src/main/java/agh/ics/oop/model/MoveValidator.java b/oolab/src/main/java/agh/ics/oop/model/MoveValidator.java index f5dd730..837e858 100644 --- a/oolab/src/main/java/agh/ics/oop/model/MoveValidator.java +++ b/oolab/src/main/java/agh/ics/oop/model/MoveValidator.java @@ -2,7 +2,7 @@ import agh.ics.oop.model.Vector2d; -public interface MoveValidator { +public interface MoveValidator

{ /** * Indicate if any object can move to the given position. @@ -11,5 +11,5 @@ public interface MoveValidator { * The position checked for the movement possibility. * @return True if the object can move to that position. */ - boolean canMoveTo(Vector2d position); + boolean canMoveTo(P position); } diff --git a/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java b/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java index 561630b..31dad1c 100644 --- a/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java +++ b/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java @@ -6,7 +6,7 @@ import java.util.HashMap; import java.util.Map; -public class RectangularMap implements WorldMap { +public class RectangularMap implements WorldMap { Map animals = new HashMap<>(); private final Vector2d lowerLeft; private final Vector2d upperRight; @@ -28,9 +28,9 @@ public boolean isOccupied(Vector2d targetPosition) { return (animals.get(targetPosition)!=null); } @Override - public boolean place(Animal animal) { - if(!isOccupied(animal.getPosition())) { - animals.put(animal.getPosition(),animal); + public boolean place(Animal animal, Vector2d position) { + if(!isOccupied(position)) { + animals.put(position,animal); return true; } return false; @@ -40,12 +40,12 @@ public Animal objectAt(Vector2d targetPosition) { return (animals.get(targetPosition)); } @Override - public void move(Animal animal, MoveDirection direction) { - Vector2d oldPosition = animal.getPosition(); - animal.move(direction,this); - if(!animal.getPosition().equals(oldPosition)) { + public void move(Animal object, MoveDirection direction) { + Vector2d oldPosition = object.getPosition(); + object.move(direction,this); + if(!object.getPosition().equals(oldPosition)) { animals.remove(oldPosition); - animals.put(animal.getPosition(),animal); + animals.put(object.getPosition(),object); } } @Override @@ -58,5 +58,4 @@ public boolean canMoveTo(Vector2d targetPosition) { public String toString() { return (visualiser.draw(this.lowerLeft,this.upperRight)); } - } diff --git a/oolab/src/main/java/agh/ics/oop/model/TextMap.java b/oolab/src/main/java/agh/ics/oop/model/TextMap.java new file mode 100644 index 0000000..4d6296d --- /dev/null +++ b/oolab/src/main/java/agh/ics/oop/model/TextMap.java @@ -0,0 +1,68 @@ +package agh.ics.oop.model; + +import java.util.ArrayList; +import java.util.List; + +public class TextMap implements WorldMap{ + List map = new ArrayList(); + public TextMap() { + } + @Override + public boolean place(String object, Integer position) { + map.add(object); + return true; + } + @Override + public void move(String object,MoveDirection direction) { + Integer position = map.indexOf(object); + String temp = map.get(position); + switch(direction) { + case LEFT: { + if(position-1>=0) { + map.set(position, map.get(position-1)); + map.set(position-1, temp); + } + break; + } + case RIGHT: { + if(position+1=map.size()) { + return false; + } + if(map.get(position) == null) + return false; + return true; + } + @Override + public Integer getLowerLeft() { + return(0); + } + @Override + public Integer getUpperRight() { + return(map.size()); + } + @Override + public String objectAt(Integer position) { + return(map.get(position)); + } + @Override + public boolean canMoveTo(Integer position) { + if(position<0 || position>=map.size()) { + return false; + } else { + return true; + } + } +} diff --git a/oolab/src/main/java/agh/ics/oop/model/WorldMap.java b/oolab/src/main/java/agh/ics/oop/model/WorldMap.java index 724a144..f1d4ecc 100644 --- a/oolab/src/main/java/agh/ics/oop/model/WorldMap.java +++ b/oolab/src/main/java/agh/ics/oop/model/WorldMap.java @@ -9,21 +9,21 @@ * * @author apohllo, idzik */ -public interface WorldMap extends MoveValidator { +public interface WorldMap extends MoveValidator

{ /** * Place a animal on the map. * - * @param animal The animal to place on the map. + * @param object The animal to place on the map. * @return True if the animal was placed. The animal cannot be placed if the move is not valid. */ - boolean place(Animal animal); + boolean place(T object,P position); /** * Moves an animal (if it is present on the map) according to specified direction. * If the move is not possible, this method has no effect. */ - void move(Animal animal, MoveDirection direction); + void move(T object, MoveDirection direction); /** * Return true if given position on the map is occupied. Should not be @@ -33,7 +33,7 @@ public interface WorldMap extends MoveValidator { * @param position Position to check. * @return True if the position is occupied. */ - boolean isOccupied(Vector2d position); + boolean isOccupied(P position); /** * Return an animal at a given position. @@ -41,7 +41,9 @@ public interface WorldMap extends MoveValidator { * @param position The position of the animal. * @return animal or null if the position is not occupied. */ - Animal objectAt(Vector2d position); + T objectAt(P position); - Vector2d getUpperRight(); + P getUpperRight(); + + P getLowerLeft(); } diff --git a/oolab/src/test/java/agh/ics/oop/model/AnimalTest.java b/oolab/src/test/java/agh/ics/oop/model/AnimalTest.java index 92c15f1..6e1b716 100644 --- a/oolab/src/test/java/agh/ics/oop/model/AnimalTest.java +++ b/oolab/src/test/java/agh/ics/oop/model/AnimalTest.java @@ -9,7 +9,7 @@ class AnimalTest { - class valid implements MoveValidator { + class valid implements MoveValidator { public boolean canMoveTo(Vector2d position) { return true; } diff --git a/oolab/src/test/java/agh/ics/oop/model/RectangularMapTest.java b/oolab/src/test/java/agh/ics/oop/model/RectangularMapTest.java index f658422..cede478 100644 --- a/oolab/src/test/java/agh/ics/oop/model/RectangularMapTest.java +++ b/oolab/src/test/java/agh/ics/oop/model/RectangularMapTest.java @@ -20,21 +20,21 @@ void placeTest() { Animal animalTested1 = new Animal(new Vector2d(2,1)); Animal animalTested2 = new Animal(new Vector2d(3,7)); Animal animalTested3 = new Animal(new Vector2d(3,7)); - assertTrue(map.place(animalTested1)); - assertTrue(map.place(animalTested2)); - assertFalse(map.place(animalTested3)); + assertTrue(map.place(animalTested1,animalTested1.getPosition())); + assertTrue(map.place(animalTested2,animalTested2.getPosition())); + assertFalse(map.place(animalTested3,animalTested3.getPosition())); } @Test void isOccupiedTest() { Animal animalTested4 = new Animal(new Vector2d(6,9)); - map.place(animalTested4); + map.place(animalTested4,animalTested4.getPosition()); assertTrue(map.isOccupied(new Vector2d(6,9))); assertFalse(map.isOccupied(new Vector2d(6,6))); } @Test void objectAtTest() { Animal animalTested5 = new Animal(new Vector2d(2,2)); - map.place(animalTested5); + map.place(animalTested5,animalTested5.getPosition()); assertEquals(map.objectAt(new Vector2d(2,2)),animalTested5); assertNotEquals(map.objectAt(new Vector2d(3,3)),animalTested5); } @@ -42,20 +42,20 @@ void objectAtTest() { void toStringTest() { System.out.println(map.toString()); Animal animalTested6 = new Animal(new Vector2d(4,4)); - map.place(animalTested6); + map.place(animalTested6,animalTested6.getPosition()); System.out.println(map.toString()); } @Test void canMoveToTest() { Animal animalTested7 = new Animal(new Vector2d(5,5)); - map.place(animalTested7); + map.place(animalTested7,animalTested7.getPosition()); assertTrue(map.canMoveTo(new Vector2d(4,5))); assertFalse(map.canMoveTo(new Vector2d(5,5))); } @Test void moveTest() { Animal animalTested8 = new Animal(new Vector2d(7,7)); - map.place(animalTested8); + map.place(animalTested8,animalTested8.getPosition()); map.move(animalTested8,MoveDirection.BACKWARD); assertTrue(map.isOccupied(new Vector2d(7,6))); map.move(animalTested8,MoveDirection.BACKWARD); diff --git a/oolab/src/test/java/agh/ics/oop/model/TextMapTest.java b/oolab/src/test/java/agh/ics/oop/model/TextMapTest.java new file mode 100644 index 0000000..08ab087 --- /dev/null +++ b/oolab/src/test/java/agh/ics/oop/model/TextMapTest.java @@ -0,0 +1,63 @@ +package agh.ics.oop.model; + +import org.junit.jupiter.api.Test; + +public class TextMapTest { + String[] args = {"Wiśnia","Borówka","Jabłko","Ananas","Gruszka","Truskawka","Poziomka"}; + + @Test + public void placeTest() { + TextMap map = new TextMap(); + for(int i=0;i Date: Thu, 30 Nov 2023 12:15:15 +0100 Subject: [PATCH 2/3] small bugfix TextMapTest.java --- oolab/src/test/java/agh/ics/oop/model/TextMapTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/oolab/src/test/java/agh/ics/oop/model/TextMapTest.java b/oolab/src/test/java/agh/ics/oop/model/TextMapTest.java index 08ab087..dbfb704 100644 --- a/oolab/src/test/java/agh/ics/oop/model/TextMapTest.java +++ b/oolab/src/test/java/agh/ics/oop/model/TextMapTest.java @@ -21,18 +21,18 @@ public void moveTest() { for(int i=0;i Date: Thu, 30 Nov 2023 12:15:56 +0100 Subject: [PATCH 3/3] small bugfix TextMap.java --- oolab/src/main/java/agh/ics/oop/model/TextMap.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oolab/src/main/java/agh/ics/oop/model/TextMap.java b/oolab/src/main/java/agh/ics/oop/model/TextMap.java index 4d6296d..cd14754 100644 --- a/oolab/src/main/java/agh/ics/oop/model/TextMap.java +++ b/oolab/src/main/java/agh/ics/oop/model/TextMap.java @@ -17,14 +17,14 @@ public void move(String object,MoveDirection direction) { Integer position = map.indexOf(object); String temp = map.get(position); switch(direction) { - case LEFT: { + case BACKWARD: { if(position-1>=0) { map.set(position, map.get(position-1)); map.set(position-1, temp); } break; } - case RIGHT: { + case FORWARD: { if(position+1