diff --git a/Source/Core/src/ca/uqac/lif/synthia/map/AreaMap.java b/Source/Examples/src/examples/parcel_shipment/AreaMap.java similarity index 92% rename from Source/Core/src/ca/uqac/lif/synthia/map/AreaMap.java rename to Source/Examples/src/examples/parcel_shipment/AreaMap.java index 2a5d4fe..4259295 100644 --- a/Source/Core/src/ca/uqac/lif/synthia/map/AreaMap.java +++ b/Source/Examples/src/examples/parcel_shipment/AreaMap.java @@ -1,4 +1,4 @@ -package ca.uqac.lif.synthia.map; +package examples.parcel_shipment; import java.util.List; diff --git a/Source/Core/src/ca/uqac/lif/synthia/map/AreaMapPicker.java b/Source/Examples/src/examples/parcel_shipment/AreaMapPicker.java similarity index 97% rename from Source/Core/src/ca/uqac/lif/synthia/map/AreaMapPicker.java rename to Source/Examples/src/examples/parcel_shipment/AreaMapPicker.java index 8697bd5..007c21d 100644 --- a/Source/Core/src/ca/uqac/lif/synthia/map/AreaMapPicker.java +++ b/Source/Examples/src/examples/parcel_shipment/AreaMapPicker.java @@ -1,11 +1,11 @@ -package ca.uqac.lif.synthia.map; +package examples.parcel_shipment; import ca.uqac.lif.synthia.Picker; import ca.uqac.lif.synthia.random.RandomInteger; - import java.util.ArrayList; import java.util.List; +//Test public class AreaMapPicker implements Picker { protected Picker m_widthPicker; diff --git a/Source/Examples/src/examples/parcel_shipment/Parcel.java b/Source/Examples/src/examples/parcel_shipment/Parcel.java new file mode 100644 index 0000000..3fc5194 --- /dev/null +++ b/Source/Examples/src/examples/parcel_shipment/Parcel.java @@ -0,0 +1,208 @@ +package examples.parcel_shipment; +import ca.uqac.lif.synthia.Picker; +import ca.uqac.lif.synthia.random.RandomBoolean; + +/** + * @author Marc-Antoine Plourde + */ +public class Parcel implements Picker +{ + protected int m_id; + protected RandomBoolean m_direction; + protected RandomBoolean m_error; + protected Point m_initialLocation; + protected Point m_actualLocation; + protected Point m_destination; + protected int m_status; + + private Parcel(int id,RandomBoolean direction,RandomBoolean error,Point initial_location, Point actual_location, + Point destination, int status) + { + m_id = id; + m_direction = direction; + m_initialLocation = initial_location; + m_actualLocation = actual_location; + m_destination = destination; + m_error =error; + m_status = status; + } + + public Parcel(int id,RandomBoolean direction, RandomBoolean error, Point actual_location, Point destination) + { + m_id = id; + m_direction = direction; + m_error = error; + m_initialLocation = actual_location; + m_actualLocation = actual_location; + m_destination = destination; + m_status = 0; + } + + public int getID() + { + return m_id; + } + + public Point getActualLocation() + { + return m_actualLocation; + } + + public Point getDestination() + { + return m_destination; + } + + public int getStatus() + { + return m_status; + } + + public boolean isArrived() + { + if ((m_actualLocation.getX() == m_destination.getX()) && (m_actualLocation.getY() + == m_destination.getY())) + { + return true; + } + else return false; + } + + private void moveLeft() + { + m_actualLocation =new Point(m_actualLocation.getX()-1, m_actualLocation.getY()); + } + + private void moveRight() + { + m_actualLocation =new Point(m_actualLocation.getX()+1, m_actualLocation.getY()); + } + + private void moveUp() + { + m_actualLocation =new Point(m_actualLocation.getX(), m_actualLocation.getY()+1); + } + + private void moveDown() + { + m_actualLocation =new Point(m_actualLocation.getX(), m_actualLocation.getY()-1); + } + + private void horizontalMove() + { + if (m_actualLocation.getX()>m_destination.getX()) + { + moveLeft(); + } + else + { + moveRight(); + } + } + + private void verticalMove() + { + if(m_actualLocation.getY()>m_destination.getY()) + { + moveDown(); + } + else + { + moveUp(); + } + } + + @Override + public void reset() + { + m_actualLocation =new Point(m_initialLocation.getX(), m_initialLocation.getY()); + m_direction.reset(); + m_error.reset(); + } + + private void errorMove() + { + boolean error_move_vertical = m_direction.pick(); + boolean positive_move = m_direction.pick(); + + if(error_move_vertical) + { + if (positive_move) + { + moveUp(); + } + else + { + moveDown(); + } + } + else + { + if (positive_move) + { + moveRight(); + } + else + { + moveLeft(); + } + } + } + + @Override + public Point pick() + { + if (!isArrived()) + { + boolean move_vertical = m_direction.pick(); + boolean is_error =m_error.pick(); + + if (is_error) + { + errorMove(); + } + else if ((move_vertical)&&(m_actualLocation.getY()==m_destination.getY())) + { + + horizontalMove(); + } + else if ((!move_vertical)&&(m_actualLocation.getX()==m_destination.getX())) + { + verticalMove(); + } + else + { + if (move_vertical) + { + verticalMove(); + } + else + { + horizontalMove(); + } + } + } + return m_actualLocation; + } + + @Override + public Parcel duplicate(boolean with_state) + { + + if (with_state) + { + return new Parcel(m_id,m_direction.duplicate(true),m_error.duplicate(true), + new Point(m_initialLocation.getX(), m_initialLocation.getY()), + new Point(m_actualLocation.getX(), m_actualLocation.getY()), + new Point(m_destination.getX(),m_destination.getY()),m_status); + } + else + { + return new Parcel(m_id,m_direction.duplicate(false),m_error.duplicate(false), + new Point(m_initialLocation.getX(), m_initialLocation.getY()), + new Point(m_initialLocation.getX(), m_initialLocation.getY()), + new Point(m_destination.getX(),m_destination.getY()),m_status); + } + + } +} diff --git a/Source/Examples/src/examples/parcel_shipment/ParcelPicker.java b/Source/Examples/src/examples/parcel_shipment/ParcelPicker.java new file mode 100644 index 0000000..12bd7a5 --- /dev/null +++ b/Source/Examples/src/examples/parcel_shipment/ParcelPicker.java @@ -0,0 +1,77 @@ +package examples.parcel_shipment; + +import ca.uqac.lif.synthia.Picker; + +import ca.uqac.lif.synthia.random.RandomBoolean; +import ca.uqac.lif.synthia.random.RandomInteger; + + +public class ParcelPicker implements Picker +{ + protected RandomInteger m_position; // internal picker + + protected RandomBoolean m_directionParcel; // picker to create picker generation + protected RandomBoolean m_errorParcel; // picker to create picker generation + + public ParcelPicker(RandomInteger position, RandomBoolean direction_parcel, RandomBoolean error_parcel) + { + m_position = position; + + m_directionParcel = direction_parcel; + m_errorParcel = error_parcel; + } + + public ParcelPicker(int radius, RandomBoolean direction_parcel, float error_rate) + { + radius = Math.abs(radius); + m_position = new RandomInteger(Math.negateExact(radius),radius); + + + + m_directionParcel = direction_parcel; + m_errorParcel = new RandomBoolean(1 - error_rate); // the prob of getting true is 1 - error rate + } + + @Override public void reset() + { + m_position.reset(); + m_errorParcel.reset(); + m_directionParcel.reset(); + } + + public void setParcelArea(int radius) + { + radius = Math.abs(radius); + + m_position.setInterval(Math.negateExact(radius),radius); + } + + public void setErrorRate(float error_rate) + { + error_rate = Math.abs(error_rate); + m_errorParcel.setTrueProbability(1-error_rate); + } + + + @Override public Parcel pick() + { + + Point p1 =new Point(m_position.pick(), m_position.pick()); + Point p2 =new Point(m_position.pick(), m_position.pick()); + + while ((p1.getX()==p2.getX()) && (p1.getY()==p2.getY())) + { + p2=new Point(m_position.pick(), m_position.pick()); + } + + + return new Parcel(0, m_directionParcel, m_errorParcel, p1, p2); + } + + @Override public ParcelPicker duplicate(boolean with_state) + { + + return new ParcelPicker(m_position.duplicate(with_state), m_directionParcel.duplicate(with_state), + m_errorParcel.duplicate(with_state)); + } +} diff --git a/Source/Core/src/ca/uqac/lif/synthia/map/Point.java b/Source/Examples/src/examples/parcel_shipment/Point.java similarity index 86% rename from Source/Core/src/ca/uqac/lif/synthia/map/Point.java rename to Source/Examples/src/examples/parcel_shipment/Point.java index 26746dc..308a095 100644 --- a/Source/Core/src/ca/uqac/lif/synthia/map/Point.java +++ b/Source/Examples/src/examples/parcel_shipment/Point.java @@ -1,4 +1,4 @@ -package ca.uqac.lif.synthia.map; +package examples.parcel_shipment; public class Point {