diff --git a/.classpath b/.classpath new file mode 100644 index 00000000..b366d4aa --- /dev/null +++ b/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/ChipsChallengeFirstDeliverable.PNG b/ChipsChallengeFirstDeliverable.PNG new file mode 100644 index 00000000..88ac2a7c Binary files /dev/null and b/ChipsChallengeFirstDeliverable.PNG differ diff --git a/ChipsChallengeRoughClassDiagram.pdf b/ChipsChallengeRoughClassDiagram.pdf new file mode 100644 index 00000000..8283a094 Binary files /dev/null and b/ChipsChallengeRoughClassDiagram.pdf differ diff --git a/src/ColumbusGame/OceanExplorer.java b/src/ColumbusGame/OceanExplorer.java new file mode 100644 index 00000000..64c6d6d5 --- /dev/null +++ b/src/ColumbusGame/OceanExplorer.java @@ -0,0 +1,5 @@ +package ColumbusGame; + +public class OceanExplorer { + +} diff --git a/src/edu/nd/sarec/railwaycrossing/Simulation.java b/src/edu/nd/sarec/railwaycrossing/Simulation.java index 0bf1deff..d88ed70a 100644 --- a/src/edu/nd/sarec/railwaycrossing/Simulation.java +++ b/src/edu/nd/sarec/railwaycrossing/Simulation.java @@ -9,6 +9,7 @@ import edu.nd.sarec.railwaycrossing.model.infrastructure.gate.CrossingGate; import edu.nd.sarec.railwaycrossing.model.vehicles.Car; import edu.nd.sarec.railwaycrossing.model.vehicles.Train; +import edu.nd.sarec.railwaycrossing.model.vehicles.Train2; import edu.nd.sarec.railwaycrossing.view.MapDisplay; import javafx.animation.AnimationTimer; import javafx.application.Application; @@ -42,12 +43,19 @@ public void start(Stage stage) throws Exception { // Train RailwayTracks track = mapBuilder.getTrack("Royal"); + RailwayTracks track2 = mapBuilder.getTrack2("Gold"); Train train = new Train(track.getEndX()+100,track.getEndY()-25); + Train2 train2 = new Train2(track2.getStartX()-100,track2.getEndY()-25); root.getChildren().add(train.getImageView()); - - for(CrossingGate gate: mapBuilder.getAllGates()) - train.addObserver(gate); - + root.getChildren().add(train2.getImageView()); + //for(CrossingGate gate: mapBuilder.getAllGates()) + //train.addObserver(gate); + //for(CrossingGate gate: mapBuilder.getAllGates()) + //train2.addObserver(gate); + train.addObserver(mapBuilder.setGate("Gate1")); + train.addObserver(mapBuilder.setGate("Gate2")); + train2.addObserver(mapBuilder.setGate("Gate3")); + train2.addObserver(mapBuilder.setGate("Gate4")); // Sets up a repetitive loop i.e., in handle that runs the actual simulation new AnimationTimer(){ @@ -55,13 +63,17 @@ public void start(Stage stage) throws Exception { public void handle(long now) { createCar(); - train.move(); + train.moveWest(); + train2.moveEast(); for(CrossingGate gate: mapBuilder.getAllGates()) gate.operateGate(); if (train.offScreen()) train.reset(); + + if (train2.offScreen()) + train2.reset(); clearCars(); } diff --git a/src/edu/nd/sarec/railwaycrossing/homework5ClassDiagram.pdf b/src/edu/nd/sarec/railwaycrossing/homework5ClassDiagram.pdf new file mode 100644 index 00000000..287778a9 Binary files /dev/null and b/src/edu/nd/sarec/railwaycrossing/homework5ClassDiagram.pdf differ diff --git a/src/edu/nd/sarec/railwaycrossing/homework5Reflection.docx b/src/edu/nd/sarec/railwaycrossing/homework5Reflection.docx new file mode 100644 index 00000000..40cb5307 Binary files /dev/null and b/src/edu/nd/sarec/railwaycrossing/homework5Reflection.docx differ diff --git a/src/edu/nd/sarec/railwaycrossing/model/infrastructure/ArraryList.java b/src/edu/nd/sarec/railwaycrossing/model/infrastructure/ArraryList.java new file mode 100644 index 00000000..05a4f26e --- /dev/null +++ b/src/edu/nd/sarec/railwaycrossing/model/infrastructure/ArraryList.java @@ -0,0 +1,148 @@ +package edu.nd.sarec.railwaycrossing.model.infrastructure; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +public class ArraryList implements List { + + @Override + public boolean add(RailwayTracks e) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void add(int index, RailwayTracks element) { + // TODO Auto-generated method stub + + } + + @Override + public boolean addAll(Collection c) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean addAll(int index, Collection c) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void clear() { + // TODO Auto-generated method stub + + } + + @Override + public boolean contains(Object o) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean containsAll(Collection c) { + // TODO Auto-generated method stub + return false; + } + + @Override + public RailwayTracks get(int index) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int indexOf(Object o) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean isEmpty() { + // TODO Auto-generated method stub + return false; + } + + @Override + public Iterator iterator() { + // TODO Auto-generated method stub + return null; + } + + @Override + public int lastIndexOf(Object o) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public ListIterator listIterator() { + // TODO Auto-generated method stub + return null; + } + + @Override + public ListIterator listIterator(int index) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean remove(Object o) { + // TODO Auto-generated method stub + return false; + } + + @Override + public RailwayTracks remove(int index) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean removeAll(Collection c) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean retainAll(Collection c) { + // TODO Auto-generated method stub + return false; + } + + @Override + public RailwayTracks set(int index, RailwayTracks element) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int size() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public List subList(int fromIndex, int toIndex) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Object[] toArray() { + // TODO Auto-generated method stub + return null; + } + + @Override + public T[] toArray(T[] a) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/edu/nd/sarec/railwaycrossing/model/infrastructure/MapBuilder.java b/src/edu/nd/sarec/railwaycrossing/model/infrastructure/MapBuilder.java index 267ae8e1..932d8d01 100644 --- a/src/edu/nd/sarec/railwaycrossing/model/infrastructure/MapBuilder.java +++ b/src/edu/nd/sarec/railwaycrossing/model/infrastructure/MapBuilder.java @@ -30,21 +30,30 @@ public MapBuilder(){ private void buildRoads(){ roads.put("Western Highway",new Road(new Point(800,0),new Point (800,1000),Direction.SOUTH,true,false)); roads.put("Skyway",new Road(new Point(400,0),new Point (400,1000),Direction.SOUTH,true,false)); - roads.put("EastWest",new Road(new Point(415,800),new Point (785,800),Direction.EAST,true,true)); + roads.put("EastWest",new Road(new Point(415,620),new Point (785,620),Direction.EAST,true,true)); + } + + public CrossingGate setGate(String gate) { + return gates.get(gate); } private void buildCrossingGates(){ - gates.put("Gate1", new CrossingGate(780,480, "Gate1")); - gates.put("Gate2", new CrossingGate(380,480, "Gate2")); + gates.put("Gate1", new CrossingGate(780,280, "Gate1")); + gates.put("Gate2", new CrossingGate(380,280, "Gate2")); + gates.put("Gate3", new CrossingGate(780,510, "Gate3")); + gates.put("Gate4", new CrossingGate(380,510, "Gate4")); } private void buildTracks(){ - tracks.put("Royal", new RailwayTracks(new Point(0,500),new Point(1200,500))); + tracks.put("Royal", new RailwayTracks(new Point(0,300),new Point(1200,300))); + tracks.put("Gold", new RailwayTracks(new Point(0,530),new Point(1200,530))); } private void assignGatesToRoads(){ roads.get("Western Highway").assignGate(gates.get("Gate1")); roads.get("Skyway").assignGate(gates.get("Gate2")); + roads.get("Western Highway").assignGate(gates.get("Gate3")); + roads.get("Skyway").assignGate(gates.get("Gate4")); } private void buildCarFactories(){ @@ -67,4 +76,8 @@ public Collection getRoads(){ public RailwayTracks getTrack(String name){ return tracks.get("Royal"); } + + public RailwayTracks getTrack2(String name){ + return tracks.get("Gold"); + } } diff --git a/src/edu/nd/sarec/railwaycrossing/model/infrastructure/gate/CrossingGate.java b/src/edu/nd/sarec/railwaycrossing/model/infrastructure/gate/CrossingGate.java index 1314ffcf..e3a1d9b0 100644 --- a/src/edu/nd/sarec/railwaycrossing/model/infrastructure/gate/CrossingGate.java +++ b/src/edu/nd/sarec/railwaycrossing/model/infrastructure/gate/CrossingGate.java @@ -4,6 +4,7 @@ import java.util.Observer; import edu.nd.sarec.railwaycrossing.model.vehicles.Train; +import edu.nd.sarec.railwaycrossing.model.vehicles.Train2; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Line; @@ -21,7 +22,9 @@ public class CrossingGate extends Observable implements Observer{ private int movingX; private int movingY; private int triggerPoint; + private int triggerPoint2; private int exitPoint; + private int exitPoint2; private IGateState gateClosed; private IGateState gateOpen; @@ -41,7 +44,9 @@ public CrossingGate(int xPosition, int yPosition, String crossingGate){ movingX = anchorX; movingY = anchorY-60; triggerPoint = anchorX+250; + triggerPoint2 = anchorX-250; exitPoint = anchorX-250; + exitPoint2 = anchorX+250; // Gate elements line = new Line(anchorX, anchorY,movingX,movingY); @@ -111,6 +116,10 @@ public void setGateState(IGateState newState){ notifyObservers(); } + public int getAnchorY() { + return anchorY; + } + public String getTrafficCommand(){ return currentGateState.getTrafficAction(); } @@ -125,5 +134,13 @@ else if(train.getVehicleX() < triggerPoint){ currentGateState.approachStation(); } } + if (o instanceof Train2){ + Train2 train2 = (Train2)o; + if (train2.getVehicleX() > exitPoint2) + currentGateState.leaveStation(); + else if(train2.getVehicleX() > triggerPoint2){ + currentGateState.approachStation(); + } + } } } diff --git a/src/edu/nd/sarec/railwaycrossing/model/vehicles/Car.java b/src/edu/nd/sarec/railwaycrossing/model/vehicles/Car.java index 3f3073cb..887f9c77 100644 --- a/src/edu/nd/sarec/railwaycrossing/model/vehicles/Car.java +++ b/src/edu/nd/sarec/railwaycrossing/model/vehicles/Car.java @@ -19,9 +19,13 @@ public class Car extends Observable implements IVehicle, Observer{ private double currentY = 0; private double originalY = 0; private boolean gateDown = false; + private boolean gateDown2 = false; private double leadCarY = -1; // Current Y position of car directly infront of this one private double speed = 0.5; - + private boolean canMove = true; + private boolean canTurn = false; + private boolean turn = false; + /** * Constructor * @param x initial x coordinate of car @@ -45,6 +49,10 @@ public boolean gateIsClosed(){ return gateDown; } + public boolean gateIsClosed2(){ + return gateDown2; + } + public double getVehicleX(){ return currentX; } @@ -52,23 +60,56 @@ public double getVehicleY(){ return currentY; } - public void move(){ - boolean canMove = true; + public void setTurn(boolean turn) { + this.turn = turn; + } + + public boolean getTurn() { + return turn; + } + + public void moveSouth(){ + canMove = true; + canTurn = false; + + //allows cars to cross onto the connecting road + if (turn && getVehicleY() > 610 && getVehicleY() < 630) { + canMove = false; + canTurn = true; + } + + if(canTurn && getVehicleX() > 360 && getVehicleX() < 390) { + canTurn = false; + canMove = true; + } // First case. Car is at the front of the stopping line. - if (gateDown && getVehicleY() < 430 && getVehicleY()> 390) + if (gateDown && getVehicleY() < 230 && getVehicleY()> 190) + canMove = false; + + //Checking the first case for the second set of gates + if (gateDown2 && getVehicleY() < 460 && getVehicleY()> 420) canMove = false; // Second case. Car is too close too other car. if (leadCarY != -1 && getDistanceToLeadCar() < 50) canMove = false; + if(leadCarY > 300 && leadCarY < 370 && getVehicleY() < 260 && getVehicleY() > 180 && gateDown2) + canMove = false; + if (canMove){ currentY+=speed; ivCar.setY(currentY); - setChanged(); - notifyObservers(); } + + if (canTurn){ + currentX-=speed; + ivCar.setX(currentX); + } + + setChanged(); + notifyObservers(); } public void setSpeed(double speed){ @@ -79,6 +120,10 @@ public void setGateDownFlag(boolean gateDown){ this.gateDown = gateDown; } + public void setGateDownFlag2(boolean gateDown){ + this.gateDown2 = gateDown; + } + public boolean offScreen(){ if (currentY > 1020) return true; @@ -101,18 +146,40 @@ public void removeLeadCar(){ @Override public void update(Observable o, Object arg1) { if (o instanceof Car){ - leadCarY = (((Car)o).getVehicleY()); + if(((Car)o).getTurn() && ((Car)o).getVehicleY() > 610) + leadCarY = -1; + else + leadCarY = (((Car)o).getVehicleY()); + if (leadCarY > 1020) leadCarY = -1; } if (o instanceof CrossingGate){ CrossingGate gate = (CrossingGate)o; - if(gate.getTrafficCommand()=="STOP") - gateDown = true; - else - gateDown = false; - - } + if(gate.getAnchorY() < 400) { + if(gate.getTrafficCommand() == "STOP") + gateDown = true; + else + gateDown = false; + }else { + if(gate.getTrafficCommand() == "STOP") + gateDown2 = true; + else + gateDown2 = false; + } + } + } + + @Override + public void moveWest() { + // TODO Auto-generated method stub + + } + + @Override + public void moveEast() { + // TODO Auto-generated method stub + } } diff --git a/src/edu/nd/sarec/railwaycrossing/model/vehicles/CarFactory.java b/src/edu/nd/sarec/railwaycrossing/model/vehicles/CarFactory.java index 1eae29ed..ac6f0010 100644 --- a/src/edu/nd/sarec/railwaycrossing/model/vehicles/CarFactory.java +++ b/src/edu/nd/sarec/railwaycrossing/model/vehicles/CarFactory.java @@ -35,7 +35,10 @@ public Car buildCar(){ if (previousCar == null || location.y < previousCar.getVehicleY()-100){ Car car = new Car(location.x,location.y); double speedVariable = (Math.random() * 10)/10; - car.setSpeed((2-speedVariable)*1.5); + car.setSpeed((2-speedVariable)*1.2); + + if ((int)(Math.random()*100) < 50 && location.x > 700) + car.setTurn(true); // All cars created by this factory must be aware of crossing gates in the road for(CrossingGate gate: gates){ @@ -63,7 +66,7 @@ public ArrayList removeOffScreenCars() { // Removing cars from the array list. ArrayList toDelete = new ArrayList(); for(Car car: cars){ - car.move(); + car.moveSouth(); if (car.offScreen()) toDelete.add(car); diff --git a/src/edu/nd/sarec/railwaycrossing/model/vehicles/IVehicle.java b/src/edu/nd/sarec/railwaycrossing/model/vehicles/IVehicle.java index ad739705..b87654fe 100644 --- a/src/edu/nd/sarec/railwaycrossing/model/vehicles/IVehicle.java +++ b/src/edu/nd/sarec/railwaycrossing/model/vehicles/IVehicle.java @@ -7,7 +7,9 @@ public interface IVehicle { public Node getImageView(); public double getVehicleX(); public double getVehicleY(); - public void move(); + public void moveWest(); + public void moveEast(); + public void moveSouth(); public boolean offScreen(); public void reset(); } diff --git a/src/edu/nd/sarec/railwaycrossing/model/vehicles/Train.java b/src/edu/nd/sarec/railwaycrossing/model/vehicles/Train.java index 9265466d..c9da019b 100644 --- a/src/edu/nd/sarec/railwaycrossing/model/vehicles/Train.java +++ b/src/edu/nd/sarec/railwaycrossing/model/vehicles/Train.java @@ -37,13 +37,20 @@ public double getVehicleY(){ return currentY; } - public void move(){ + public void moveWest(){ currentX-=2; imgView.setX(currentX); setChanged(); notifyObservers(); } + public void moveEast(){ + currentX+=2; + imgView.setX(currentX); + setChanged(); + notifyObservers(); + } + public boolean offScreen(){ if (currentX < -200) return true; @@ -59,4 +66,10 @@ public void reset(){ public Node getImageView() { return imgView; } + + @Override + public void moveSouth() { + // TODO Auto-generated method stub + + } } \ No newline at end of file diff --git a/src/edu/nd/sarec/railwaycrossing/model/vehicles/Train2.java b/src/edu/nd/sarec/railwaycrossing/model/vehicles/Train2.java new file mode 100644 index 00000000..de67d7bc --- /dev/null +++ b/src/edu/nd/sarec/railwaycrossing/model/vehicles/Train2.java @@ -0,0 +1,75 @@ +package edu.nd.sarec.railwaycrossing.model.vehicles; + +import java.util.Observable; + +import javafx.scene.Node; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +/** + * Represents the train entity object + * @author jane + * + */ +public class Train2 extends Observable implements IVehicle{ + private double currentX = 0; + private double currentY = 0; + private double originalX = 0; + private Image img; + private ImageView imgView; + private int trainLength = 35; + + public Train2(int x, int y){ + this.currentX = x; + this.currentY = y; + originalX = x; + img = new Image("images\\Train2.PNG",120,trainLength,false,false); + imgView = new ImageView(img); + imgView.setX(currentX); + imgView.setY(currentY); + } + + public double getVehicleX(){ + return currentX; + } + + public double getVehicleY(){ + return currentY; + } + + public void moveWest(){ + currentX-=2; + imgView.setX(currentX); + setChanged(); + notifyObservers(); + } + + public void moveEast(){ + currentX+=4; + imgView.setX(currentX); + setChanged(); + notifyObservers(); + } + + public boolean offScreen(){ + if (currentX > 1800) + return true; + else + return false; + } + + public void reset(){ + currentX = originalX; + } + + //@Override + public Node getImageView() { + return imgView; + } + + @Override + public void moveSouth() { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/src/edu/nd/sarec/railwaycrossing/view/MapDisplay.java b/src/edu/nd/sarec/railwaycrossing/view/MapDisplay.java index 0726aa3c..3b2da748 100644 --- a/src/edu/nd/sarec/railwaycrossing/view/MapDisplay.java +++ b/src/edu/nd/sarec/railwaycrossing/view/MapDisplay.java @@ -19,6 +19,7 @@ public class MapDisplay { IDisplay roadDisplay, tracksDisplay; Collection roads; Collection track; + Collection track2; Collection gates; @@ -26,6 +27,9 @@ public MapDisplay(Pane root, Collection roads, Collection t this.root = root; this.roads= roads; this.track = tracks; + this.track2 = tracks; + for(Road road: roads) + System.out.println(road); this.gates = gates; roadDisplay = new RoadDisplay(roads,root); tracksDisplay = new TracksDisplay(tracks,root); diff --git a/src/edu/nd/se2018/ColumbusShip.png b/src/edu/nd/se2018/ColumbusShip.png new file mode 100644 index 00000000..ab23f309 Binary files /dev/null and b/src/edu/nd/se2018/ColumbusShip.png differ diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/BlueDoor.java b/src/edu/nd/se2018/homework/chipsChallenge/src/BlueDoor.java new file mode 100644 index 00000000..d387b898 --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/BlueDoor.java @@ -0,0 +1,50 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class BlueDoor implements Door{ + // locals + ChipMap map; + Point location = new Point(); + ImageView imageView; + int scale = 20; + int ID = 1; + + public BlueDoor(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image blueDoorImage = new Image("images\\blueKeyWall.png", scale, scale, false, true); + imageView = new ImageView(blueDoorImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + map.chipsGrid[location.x][location.y] = 1; + } + @Override + public Point getDoorLocation() { + return location; + } + + @Override + public void lockDoor() { + map.chipsGrid[location.x][location.y] = 1; + + } + @Override + public ImageView getDoorImageView() { + return imageView; + } + @Override + public int getDoorId() { + return ID; + } + @Override + public void unlockDoor() { + map.chipsGrid[location.x][location.y] = 0; + + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/BlueKey.java b/src/edu/nd/se2018/homework/chipsChallenge/src/BlueKey.java new file mode 100644 index 00000000..7203e0d0 --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/BlueKey.java @@ -0,0 +1,41 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class BlueKey implements Key{ + // locals + Point location = new Point(); + ChipMap map; + ImageView imageView; + int scale = 20; + int ID = 1; + + public BlueKey(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image blueKeyImage = new Image("images\\blueKey.png", scale, scale, false, true); + imageView = new ImageView(blueKeyImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + } + + @Override + public Point getKeyLocation() { + return location; + } + + @Override + public ImageView getKeyImageView() { + return imageView; + } + + @Override + public int getDoorId() { + return ID; + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/Bug.java b/src/edu/nd/se2018/homework/chipsChallenge/src/Bug.java new file mode 100644 index 00000000..6d2891c3 --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/Bug.java @@ -0,0 +1,61 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; +import java.util.Observable; +import java.util.Observer; +import java.util.concurrent.ThreadLocalRandom; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class Bug implements Observer{ + // locals + Point bugLocation = new Point(); + Point chipLocation; + final int scalingFactor = 20; + Image bugImage; + ImageView bugImageView; + ChipMap map; + + public Bug(ChipMap chipMap, int scale) { + map = chipMap; + do { + bugLocation.x = 14; + bugLocation.y = 16; + } while (map.chipsGrid[bugLocation.x][bugLocation.y] != 0); + Image bugImage = new Image("images\\bugDown.PNG", scale, scale, false, true); + bugImageView = new ImageView(bugImage); + } + + public void setImageView() { + bugImageView.setX(bugLocation.x*scalingFactor); + bugImageView.setY(bugLocation.y*scalingFactor); + } + + public ImageView getImageView(){ + return bugImageView; + } + + public Point getBugLocation() { + return bugLocation; + } + public void moveBug() { + + if (bugLocation.x - chipLocation.x < 0 && map.chipsGrid[bugLocation.x +1][bugLocation.y] == 0 ) { + bugLocation.x++; + }else if (bugLocation.x - chipLocation.x > 0 && map.chipsGrid[bugLocation.x -1][bugLocation.y] == 0) { + bugLocation.x--; + } + setImageView(); + } + + @Override + public void update(Observable s, Object arg) { + if (s instanceof Chip){ + chipLocation = ((Chip)s).getChipLocation(); + moveBug(); + } + + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/Chip.java b/src/edu/nd/se2018/homework/chipsChallenge/src/Chip.java new file mode 100644 index 00000000..266fc3ef --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/Chip.java @@ -0,0 +1,74 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; +import java.util.LinkedList; +import java.util.List; +import java.util.Observable; + +public class Chip extends Observable{ + // locals + Point location = new Point(); + ChipMap map; + List bag; + int doorId = 1; + + public Chip(ChipMap chipMap) { + map = chipMap; + location.x = 14; + location.y = 14; + bag = new LinkedList(); + } + + public Point getChipLocation() { + return location; + } + + public int getDoorId() { + return doorId; + } + + // set starting location of chip for level 2 + public void resetChip() { + location.x = 14; + location.y = 14; + } + + // set starting location of chip for level 2 + public void resetChip2() { + location.x = 20; + location.y = 1; + } + + public void goEast() { + if(location.x < 24 && map.chipsGrid[location.x +1][location.y] != 1) { + location.x += 1; + setChanged(); + notifyObservers(); + } + } + + public void goWest() { + if(location.x > 0 && map.chipsGrid[location.x -1][location.y] != 1) { + location.x -= 1; + setChanged(); + notifyObservers(); + } + } + + public void goNorth() { + if(location.y > 0 && map.chipsGrid[location.x][location.y-1] != 1) { + location.y -= 1; + setChanged(); + notifyObservers(); + } + } + + public void goSouth() { + if(location.y < 24 && map.chipsGrid[location.x][location.y +1] != 1) { + location.y += 1; + setChanged(); + notifyObservers(); + } + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/ChipMap.java b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipMap.java new file mode 100644 index 00000000..8d63845e --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipMap.java @@ -0,0 +1,369 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import javafx.collections.ObservableList; +import javafx.scene.Node; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.paint.Color; +import javafx.scene.shape.Rectangle; + +public class ChipMap { + // local + int[][] chipsGrid = new int[25][25]; + final int dimensions = 25; + ImageView tileImageView; + ImageView wallImageView; + ImageView waterImageView; + ImageView fireImageView; + int vert1, vert2, vert3, vert4, vert5, vert6, vert7, vert8, vert9, vert10, vert11; + int horiz1, horiz2, horiz3, horiz4, horiz5, horiz6, horiz7, horiz8, horiz9, horiz10, horiz11, horiz12; + BlueDoor blueDoor; + + + public void drawMap(ObservableList root, int scale) { + Image tile = new Image("images\\BlankTile.png", scale, scale, false, true); + for(int x = 0; x < dimensions; x++) { + for(int y = 0; y < dimensions; y++) { + tileImageView = new ImageView(tile); + tileImageView.setX(x*scale); + tileImageView.setY(y*scale); + root.add(tileImageView); + chipsGrid[x][y] = 0; + } + } + } + + public void resetFloor(ObservableList root, int scale, int x, int y) { + Image tile = new Image("images\\BlankTile.png", scale, scale, false, true); + tileImageView = new ImageView(tile); + tileImageView.setX(x*scale); + tileImageView.setY(y*scale); + root.add(tileImageView); + chipsGrid[x][y] = 0; + } + + public void drawObsticles2(ObservableList root, int scale) { + // draw fire + for(int y = 2; y < 25; y++) { + for(int x = 0; x < 1; x++) { + Image fire = new Image("images\\fire.PNG", scale, scale, false, true); + fireImageView = new ImageView(fire); + fireImageView.setX(x*scale); + fireImageView.setY(y*scale); + root.add(fireImageView); + chipsGrid[x][y] = 3; + } + } + + for(int x = 1; x < 24; x++) { + for(int y = 24; y < 25; y++) { + Image fire = new Image("images\\fire.PNG", scale, scale, false, true); + fireImageView = new ImageView(fire); + fireImageView.setX(x*scale); + fireImageView.setY(y*scale); + root.add(fireImageView); + chipsGrid[x][y] = 3; + } + } + } + + public void drawObsticles(ObservableList root, int scale) { + // draw water + for(int y = 9; y < 12; y++) { + for(int x = 0; x < dimensions - 1; x++) { + Image water = new Image("images\\water.PNG", scale, scale, false, true); + waterImageView = new ImageView(water); + waterImageView.setX(x*scale); + waterImageView.setY(y*scale); + root.add(waterImageView); + chipsGrid[x][y] = 1; + } + } + + // draw fire + for(int y = 5; y < 8; y++) { + for(int x = 3; x < 12; x++) { + Image fire = new Image("images\\fire.PNG", scale, scale, false, true); + fireImageView = new ImageView(fire); + fireImageView.setX(x*scale); + fireImageView.setY(y*scale); + root.add(fireImageView); + chipsGrid[x][y] = 2; + } + } + for(int x = 3; x < 6; x++) { + for(int y = 0; y < 5; y++) { + Image fire = new Image("images\\fire.PNG", scale, scale, false, true); + fireImageView = new ImageView(fire); + fireImageView.setX(x*scale); + fireImageView.setY(y*scale); + root.add(fireImageView); + chipsGrid[x][y] = 2; + } + } + } + + public int killChip(int x, int y) { + return chipsGrid[x][y]; + } + + public void walkOnFire(ObservableList root) { + for(int y = 5; y < 8; y++) { + for(int x = 3; x < 12; x++) { + chipsGrid[x][y] = 0; + } + } + for(int x = 3; x < 6; x++) { + for(int y = 0; y < 5; y++) { + chipsGrid[x][y] = 0; + } + } + } + public void walkOnFire2(ObservableList root) { + for(int y = 2; y < 25; y++) { + for(int x = 0; x < 1; x++) { + chipsGrid[x][y] = 0; + } + } + + for(int x = 1; x < 24; x++) { + for(int y = 24; y < 25; y++) { + chipsGrid[x][y] = 0; + } + } + } + + + public void drawWalls2(ObservableList root, int scale) { + + // vertical walls + vert6 = 1; + vert7 = 5; + vert8 = 4; + vert9 = 6; + vert10 = 18; + vert11 = 16; + for(int y = 0; y < dimensions; y++) { + if(y < 24) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert6*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert6][y] = 1; + } + if(y > 1 && y < 8) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert7*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert7][y] = 1; + } + if(y > 11 && y < 22) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert8*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert8][y] = 1; + } + if(y > 13 && y < 22) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert9*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert9][y] = 1; + } + if(y > 3 && y < 14) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert10*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert10][y] = 1; + } + if(y > 3 && y < 12) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert11*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert11][y] = 1; + } + } + + // horizontal walls + horiz5 = 2; + horiz6 = 7; + horiz7 = 11; + horiz8 = 13; + horiz9 = 23; + horiz10 = 21; + horiz11 = 14; + horiz12 = 16; + for(int x = 0; x < dimensions; x++) { + if(x > 4 && x < 21) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz5*scale); + root.add(wallImageView); + chipsGrid[x][horiz5] = 1; + } + if(x > 1 && x < 5) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz6*scale); + root.add(wallImageView); + chipsGrid[x][horiz6] = 1; + } + if(x > 3 && x < 16) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz7*scale); + root.add(wallImageView); + chipsGrid[x][horiz7] = 1; + } + if(x > 5 && x < 18) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz8*scale); + root.add(wallImageView); + chipsGrid[x][horiz8] = 1; + } + if(x > 1 && x < 24) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz9*scale); + root.add(wallImageView); + chipsGrid[x][horiz9] = 1; + } + if(x > 6 && x < 24) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz10*scale); + root.add(wallImageView); + chipsGrid[x][horiz10] = 1; + } + if(x > 22) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz11*scale); + root.add(wallImageView); + chipsGrid[x][horiz11] = 1; + } + if(x > 22) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz12*scale); + root.add(wallImageView); + chipsGrid[x][horiz12] = 1; + } + } + } + + public void drawWalls(ObservableList root, int scale) { + + // vertical walls + vert1 = 2; + vert2 = 14; + vert3 = 16; + vert4 = 6; + vert5 = 23; + for(int y = 0; y < dimensions; y++) { + if((y > 11 && y < 16) || y > 16) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert1*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert1][y] = 1; + } + if(y > 19) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert2*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert2][y] = 1; + } + if(y < 19 && y > 16) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert5*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert5][y] = 1; + } + if(y > 3 && y < 9) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert3*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert3][y] = 1; + } + if(y >= 0 && y < 5) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(vert4*scale); + wallImageView.setY(y*scale); + root.add(wallImageView); + chipsGrid[vert4][y] = 1; + } + + + + } + + + // horizontal walls + horiz1 = 20; + horiz2 = 4; + horiz3 = 17; + horiz4 = 16; + for(int x = 0; x < dimensions; x++) { + if(x > 13 && x != 24) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz1*scale); + root.add(wallImageView); + chipsGrid[x][horiz1] = 1; + } + if(x > 3 && x < 23) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz3*scale); + root.add(wallImageView); + chipsGrid[x][horiz3] = 1; + } + if(x == 4) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz4*scale); + root.add(wallImageView); + chipsGrid[x][horiz4] = 1; + } + if((x > 12 && x < 24) || (x > 6 && x < 12)) { + Image wall = new Image("images\\wall.PNG", scale, scale, false, true); + wallImageView = new ImageView(wall); + wallImageView.setX(x*scale); + wallImageView.setY(horiz2*scale); + root.add(wallImageView); + chipsGrid[x][horiz2] = 1; + } + } + } +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsChallengeDesignPatterns.pdf b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsChallengeDesignPatterns.pdf new file mode 100644 index 00000000..7c81feb9 Binary files /dev/null and b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsChallengeDesignPatterns.pdf differ diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsChallengeDiscussion.pdf b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsChallengeDiscussion.pdf new file mode 100644 index 00000000..b2509a26 Binary files /dev/null and b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsChallengeDiscussion.pdf differ diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsChallengeUMLDiagram.pdf b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsChallengeUMLDiagram.pdf new file mode 100644 index 00000000..75b41c92 Binary files /dev/null and b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsChallengeUMLDiagram.pdf differ diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsGame.java b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsGame.java new file mode 100644 index 00000000..460193f3 --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/ChipsGame.java @@ -0,0 +1,350 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import javafx.application.Application; +import javafx.event.EventHandler; +import javafx.scene.Scene; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Pane; +import javafx.stage.Stage; + +public class ChipsGame extends Application { + // locals + Pane root; + Scene scene; + ChipMap chipMap; + final int scalingFactor = 20; + Image chipImage; + Image chipLeft = new Image("images\\chipLeft.png", scalingFactor, scalingFactor, false, true); + Image chipRight = new Image("images\\chipRight.png", scalingFactor, scalingFactor, false, true); + Image chipUp = new Image("images\\chipUp.png", scalingFactor, scalingFactor, false, true); + Image chipDown = new Image("images\\chipDown.png", scalingFactor, scalingFactor, false, true); + Portal portal = new Portal(chipMap, 4, 0); + ImageView chipImageView; + List keys; + List doors; + Chip chip; + FireShoe fireShoe; + Stage mapStage; + List bugs; + int winCount = 0; + ArrayList keyDelete = new ArrayList(); + + + public static void main(String[] args) { + // TODO Auto-generated method stub + launch(args); + } + + @Override + public void start(Stage chipStage) throws Exception { + // TODO Auto-generated method stub + + chipMap = new ChipMap(); + chip = new Chip(chipMap); + fireShoe = new FireShoe(chipMap, 17, 8); + keys = new LinkedList(); + keys.add(new BlueKey(chipMap, 15, 24)); + keys.add(new GreenKey(chipMap, 1, 23)); + doors = new LinkedList(); + doors.add(new BlueDoor(chipMap, 2, 16)); + doors.add(new GreenDoor(chipMap, 24, 11)); + root = new AnchorPane(); + //obstacles = new LinkedList(); + //obstacles.add(new Fire(chipMap)); + chipMap.drawMap(root.getChildren(), scalingFactor); + chipMap.drawWalls(root.getChildren(), scalingFactor); + chipMap.drawObsticles(root.getChildren(), scalingFactor); + root.getChildren().add(fireShoe.getImageView()); + + bugs = new LinkedList(); + bugs.add(new Bug(chipMap, scalingFactor)); + + // register observers of the ship + for(Bug bug: bugs) + chip.addObserver(bug); + + for(Bug bug: bugs) { + bug.setImageView(); + } + // load chip and keys on map + loadChipImage(); + loadItems(); + + // lock door + for(Door door: doors) + door.lockDoor(); + // set scene + root.getChildren().add(portal.getImageView()); + scene = new Scene(root, 500, 500); + chipStage.setTitle("Chips Challenge Game"); + chipStage.setScene(scene); + chipStage.show(); + mapStage = chipStage; + moveChip(); + } + + private void moveChip() { + scene.setOnKeyPressed(new EventHandler(){ + + @Override + public void handle(KeyEvent ke) { + // TODO Auto-generated method stub + switch(ke.getCode()) { + case RIGHT: + chip.goEast(); + chipImageView.setImage(chipRight); + chipImage = chipRight; + chipImageView.setX(chip.getChipLocation().x*scalingFactor); + chipImageView.setY(chip.getChipLocation().y*scalingFactor); + break; + case LEFT: + chip.goWest(); + chipImageView.setImage(chipLeft); + chipImage = chipLeft; + chipImageView.setX(chip.getChipLocation().x*scalingFactor); + chipImageView.setY(chip.getChipLocation().y*scalingFactor); + break; + case UP: + chip.goNorth(); + chipImageView.setImage(chipUp); + chipImage = chipUp; + chipImageView.setX(chip.getChipLocation().x*scalingFactor); + chipImageView.setY(chip.getChipLocation().y*scalingFactor); + break; + case DOWN: + chip.goSouth(); + chipImageView.setImage(chipDown); + chipImage = chipDown; + chipImageView.setX(chip.getChipLocation().x*scalingFactor); + chipImageView.setY(chip.getChipLocation().y*scalingFactor); + break; + // break if escape key is pressed + case ESCAPE: + mapStage.close(); + break; + default: + break; + } + + // Handle Portal + if(chip.getChipLocation().x - portal.getLocation().x == 0 && chip.getChipLocation().y - portal.getLocation().y == 0) { + // if on first level go to next level + if(winCount == 0) { + nextLevel(); + winCount++; + // if on second level exit game + } else { + mapStage.close(); + } + } + + // Handle fire for level 1 + if(chipMap.killChip(chip.getChipLocation().x, chip.getChipLocation().y) == 2) + resetGame(); + + // Handle fire for level 2 + if(chipMap.killChip(chip.getChipLocation().x, chip.getChipLocation().y) == 3) + nextLevel(); + + // pick up fire shoe + if(chip.getChipLocation().x - fireShoe.getLocation().x == 0 && chip.getChipLocation().y - fireShoe.getLocation().y == 0) { + chipMap.resetFloor(root.getChildren(), scalingFactor, fireShoe.getLocation().x, fireShoe.getLocation().y); + resetChipImage(); + // walk on fire on Level 1 + if(winCount == 0) + chipMap.walkOnFire(root.getChildren()); + // walk on fire on Level 2 + else + chipMap.walkOnFire2(root.getChildren()); + } + + //HandleBug + for(Bug key: bugs) { + if(chip.getChipLocation().x - key.getBugLocation().x == 0 && chip.getChipLocation().y - key.getBugLocation().y == 0) { + resetGame(); + } + } + + // Handle Key + for(Key key: keys) { + if(chip.getChipLocation().x - key.getKeyLocation().x == 0 && chip.getChipLocation().y - key.getKeyLocation().y == 0) { + keyDelete.add(key); + } + } + + for(Key key: keyDelete) { + chipMap.resetFloor(root.getChildren(), scalingFactor, key.getKeyLocation().x, key.getKeyLocation().y); + keys.remove(key); + resetChipImage(); + } + + // Handle Door + for(Key key: keyDelete) { + for(Door door: doors) { + if(key.getDoorId() == door.getDoorId()) { + door.unlockDoor(); + } + } + } + for(Door door: doors) { + if(chip.getChipLocation().x - door.getDoorLocation().x == 0 && chip.getChipLocation().y - door.getDoorLocation().y == 0) { + chipMap.resetFloor(root.getChildren(), scalingFactor, door.getDoorLocation().x, door.getDoorLocation().y); + resetChipImage(); + } + } + } + + }); + } + + // loads the image of chip + private void loadChipImage() { + Image chipLeft = new Image("images\\chipLeft.png", scalingFactor, scalingFactor, false, true); + chipImageView = new ImageView(chipLeft); + chipImageView.setX(chip.getChipLocation().x*scalingFactor); + chipImageView.setY(chip.getChipLocation().y*scalingFactor); + root.getChildren().add(chipImageView); + } + + // generates images for all items + private void loadItems() { + for(Key key: keys) + root.getChildren().add(key.getKeyImageView()); + + for(Door door: doors) + root.getChildren().add(door.getDoorImageView()); + + for (Bug bug: bugs) + root.getChildren().add(bug.getImageView()); + } + + private void resetChipImage() { + root.getChildren().remove(chipImageView); + chipImageView = new ImageView(chipImage); + chipImageView.setX(chip.getChipLocation().x*scalingFactor); + chipImageView.setY(chip.getChipLocation().y*scalingFactor); + root.getChildren().add(chipImageView); + } + + + private void resetGame() { + // delete collected keys + ArrayList keyDelete2 = new ArrayList(); + for(Key key: keyDelete) { + keyDelete2.add(key); + } + for(Key key: keyDelete2) { + keyDelete.remove(key); + } + + // delete bugs + ArrayList bugsDelete = new ArrayList(); + for(Bug key: bugs) { + bugsDelete.add(key); + } + for(Bug key: bugsDelete) { + chipMap.resetFloor(root.getChildren(), scalingFactor, key.getBugLocation().x, key.getBugLocation().y); + bugs.remove(key); + } + + root.getChildren().clear(); + + // add bugs + bugs.add(new Bug(chipMap, scalingFactor)); + for(Bug bug: bugs) + chip.addObserver(bug); + for(Bug bug: bugs) + bug.setImageView(); + + + // reset main map + chipMap.drawMap(root.getChildren(), scalingFactor); + chipMap.drawWalls(root.getChildren(), scalingFactor); + chipMap.drawObsticles(root.getChildren(), scalingFactor); + root.getChildren().add(portal.getImageView()); + root.getChildren().add(fireShoe.getImageView()); + + // add chip + chip.resetChip(); + loadChipImage(); + + // add keys + keys = new LinkedList(); + keys.add(new BlueKey(chipMap, 15, 24)); + keys.add(new GreenKey(chipMap, 1, 23)); + + loadItems(); + + // re-lock doors + for(Door door: doors) + door.lockDoor(); + } + + private void nextLevel() { + // delete bugs + ArrayList bugsDelete = new ArrayList(); + for(Bug key: bugs) { + bugsDelete.add(key); + } + for(Bug bug: bugsDelete) { + chipMap.resetFloor(root.getChildren(), scalingFactor, bug.getBugLocation().x, bug.getBugLocation().y); + bugs.remove(bug); + } + + // delete collected keys + ArrayList keyDelete2 = new ArrayList(); + for(Key key: keyDelete) { + keyDelete2.add(key); + } + for(Key key: keyDelete2) { + keyDelete.remove(key); + } + + // delete doors + ArrayList doorDelete = new ArrayList(); + for(Door door: doors) { + doorDelete.add(door); + } + for(Door door: doorDelete) { + doors.remove(door); + } + + root.getChildren().clear(); + chipMap.drawMap(root.getChildren(), scalingFactor); + chip.resetChip2(); + loadChipImage(); + chipMap.drawWalls2(root.getChildren(), scalingFactor); + chipMap.drawObsticles2(root.getChildren(), scalingFactor); + + // add portal + portal.setLocation2(); + Portal portal = new Portal(chipMap, 0, 0); + root.getChildren().add(portal.getImageView()); + + // add fire shoe + fireShoe = new FireShoe(chipMap, 2, 17); + root.getChildren().add(fireShoe.getImageView()); + + // create keys + keys = new LinkedList(); + keys.add(new BlueKey(chipMap, 8, 12)); + keys.add(new GreenKey(chipMap, 4, 6)); + keys.add(new RedKey(chipMap, 24, 15)); + keys.add(new YellowKey(chipMap, 0, 14)); + + // create doors + doors.add(new BlueDoor(chipMap, 24, 22)); + doors.add(new GreenDoor(chipMap, 5, 21)); + doors.add(new YellowDoor(chipMap, 23, 15)); + doors.add(new RedDoor(chipMap, 0, 1)); + loadItems(); + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/Door.java b/src/edu/nd/se2018/homework/chipsChallenge/src/Door.java new file mode 100644 index 00000000..71bc79bc --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/Door.java @@ -0,0 +1,14 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.ImageView; + +public interface Door { + // methods for doors + Point getDoorLocation(); + void lockDoor(); + int getDoorId(); + void unlockDoor(); + ImageView getDoorImageView(); +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/FireShoe.java b/src/edu/nd/se2018/homework/chipsChallenge/src/FireShoe.java new file mode 100644 index 00000000..e74d2ffd --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/FireShoe.java @@ -0,0 +1,39 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class FireShoe { + // locals + Point location = new Point(); + ChipMap map; + ImageView imageView; + int scale = 20; + int ID = 1; + + public FireShoe(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image blueKeyImage = new Image("images\\fireShoe.PNG", scale, scale, false, true); + imageView = new ImageView(blueKeyImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + } + + public Point getLocation() { + return location; + } + + public ImageView getImageView() { + return imageView; + } + + public int getId() { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/GreenDoor.java b/src/edu/nd/se2018/homework/chipsChallenge/src/GreenDoor.java new file mode 100644 index 00000000..be9d7634 --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/GreenDoor.java @@ -0,0 +1,50 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class GreenDoor implements Door{ + // locals + ChipMap map; + Point location = new Point(); + ImageView imageView; + int scale = 20; + int ID = 2; + + public GreenDoor(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image blueDoorImage = new Image("images\\greenKeyWall.png", scale, scale, false, true); + imageView = new ImageView(blueDoorImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + map.chipsGrid[location.x][location.y] = 1; + } + @Override + public Point getDoorLocation() { + return location; + } + + @Override + public void lockDoor() { + map.chipsGrid[location.x][location.y] = 1; + + } + @Override + public ImageView getDoorImageView() { + return imageView; + } + @Override + public int getDoorId() { + return ID; + } + @Override + public void unlockDoor() { + map.chipsGrid[location.x][location.y] = 0; + + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/GreenKey.java b/src/edu/nd/se2018/homework/chipsChallenge/src/GreenKey.java new file mode 100644 index 00000000..6db1fd06 --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/GreenKey.java @@ -0,0 +1,41 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class GreenKey implements Key{ + // locals + Point location = new Point(); + ChipMap map; + ImageView imageView; + int scale = 20; + int ID = 2; + + public GreenKey(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image greenKeyImage = new Image("images\\greenKey.png", scale, scale, false, true); + imageView = new ImageView(greenKeyImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + } + + @Override + public Point getKeyLocation() { + return location; + } + + @Override + public ImageView getKeyImageView() { + return imageView; + } + + @Override + public int getDoorId() { + return ID; + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/Key.java b/src/edu/nd/se2018/homework/chipsChallenge/src/Key.java new file mode 100644 index 00000000..e3599a6b --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/Key.java @@ -0,0 +1,13 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.ImageView; + +public interface Key { + // methods for keys + Point getKeyLocation(); + ImageView getKeyImageView(); + int getDoorId(); + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/Portal.java b/src/edu/nd/se2018/homework/chipsChallenge/src/Portal.java new file mode 100644 index 00000000..b722e3ba --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/Portal.java @@ -0,0 +1,38 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class Portal { + // locals + Point location = new Point(); + ChipMap map; + ImageView imageView; + int scale = 20; + + public Portal(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image portalImage = new Image("images\\portal.png", scale, scale, false, true); + imageView = new ImageView(portalImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + } + + public Point getLocation() { + return location; + } + + public void setLocation2() { + location.x = 0; + location.y = 0; + } + + public ImageView getImageView() { + return imageView; + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/RedDoor.java b/src/edu/nd/se2018/homework/chipsChallenge/src/RedDoor.java new file mode 100644 index 00000000..fbfd89ef --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/RedDoor.java @@ -0,0 +1,57 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class RedDoor implements Door{ + + ChipMap map; + Point location = new Point(); + ImageView imageView; + int scale = 20; + int ID = 3; + + public RedDoor(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image redDoorImage = new Image("images\\redKeyWall.png", scale, scale, false, true); + imageView = new ImageView(redDoorImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + map.chipsGrid[location.x][location.y] = 1; + } + // test + @Override + public Point getDoorLocation() { + // TODO Auto-generated method stub + return location; + } + + @Override + public void lockDoor() { + map.chipsGrid[location.x][location.y] = 1; + + } + + @Override + public int getDoorId() { + // TODO Auto-generated method stub + return ID; + } + + @Override + public void unlockDoor() { + map.chipsGrid[location.x][location.y] = 0; + + } + + @Override + public ImageView getDoorImageView() { + // TODO Auto-generated method stub + return imageView; + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/RedKey.java b/src/edu/nd/se2018/homework/chipsChallenge/src/RedKey.java new file mode 100644 index 00000000..cde76c9c --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/RedKey.java @@ -0,0 +1,44 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class RedKey implements Key{ + // locals + Point location = new Point(); + ChipMap map; + ImageView imageView; + int scale = 20; + int ID = 3; + + public RedKey(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image blueKeyImage = new Image("images\\redKey.png", scale, scale, false, true); + imageView = new ImageView(blueKeyImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + } + + @Override + public Point getKeyLocation() { + // TODO Auto-generated method stub + return location; + } + + @Override + public ImageView getKeyImageView() { + // TODO Auto-generated method stub + return imageView; + } + + @Override + public int getDoorId() { + // TODO Auto-generated method stub + return ID; + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/YellowDoor.java b/src/edu/nd/se2018/homework/chipsChallenge/src/YellowDoor.java new file mode 100644 index 00000000..befa7717 --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/YellowDoor.java @@ -0,0 +1,58 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class YellowDoor implements Door{ + // locals + ChipMap map; + Point location = new Point(); + ImageView imageView; + int scale = 20; + int ID = 4; + + public YellowDoor(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image yellowDoorImage = new Image("images\\yellowKeyWall.png", scale, scale, false, true); + imageView = new ImageView(yellowDoorImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + map.chipsGrid[location.x][location.y] = 1; + } + + @Override + public Point getDoorLocation() { + // TODO Auto-generated method stub + return location; + } + + @Override + public void lockDoor() { + map.chipsGrid[location.x][location.y] = 1; + + } + + + @Override + public int getDoorId() { + // TODO Auto-generated method stub + return ID; + } + + @Override + public void unlockDoor() { + map.chipsGrid[location.x][location.y] = 0; + + } + + @Override + public ImageView getDoorImageView() { + // TODO Auto-generated method stub + return imageView; + } + +} diff --git a/src/edu/nd/se2018/homework/chipsChallenge/src/YellowKey.java b/src/edu/nd/se2018/homework/chipsChallenge/src/YellowKey.java new file mode 100644 index 00000000..1ecadb3a --- /dev/null +++ b/src/edu/nd/se2018/homework/chipsChallenge/src/YellowKey.java @@ -0,0 +1,44 @@ +package edu.nd.se2018.homework.chipsChallenge.src; + +import java.awt.Point; + +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +public class YellowKey implements Key{ + // locals + Point location = new Point(); + ChipMap map; + ImageView imageView; + int scale = 20; + int ID = 4; + + public YellowKey(ChipMap chipMap, int x, int y) { + map = chipMap; + location.x = x; + location.y = y; + Image blueKeyImage = new Image("images\\yellowKey.png", scale, scale, false, true); + imageView = new ImageView(blueKeyImage); + imageView.setX(location.x*scale); + imageView.setY(location.y*scale); + } + + @Override + public Point getKeyLocation() { + // TODO Auto-generated method stub + return location; + } + + @Override + public ImageView getKeyImageView() { + // TODO Auto-generated method stub + return imageView; + } + + @Override + public int getDoorId() { + // TODO Auto-generated method stub + return ID; + } + +} diff --git a/src/edu/nd/se2018/homework/homework3ClassDiagram.pdf b/src/edu/nd/se2018/homework/homework3ClassDiagram.pdf new file mode 100644 index 00000000..60ead115 Binary files /dev/null and b/src/edu/nd/se2018/homework/homework3ClassDiagram.pdf differ diff --git a/src/edu/nd/se2018/homework/homework3Reflection.docx b/src/edu/nd/se2018/homework/homework3Reflection.docx new file mode 100644 index 00000000..d47bf87f Binary files /dev/null and b/src/edu/nd/se2018/homework/homework3Reflection.docx differ diff --git a/src/edu/nd/se2018/homework/homework4ClassDiagram.pdf b/src/edu/nd/se2018/homework/homework4ClassDiagram.pdf new file mode 100644 index 00000000..74e078e3 Binary files /dev/null and b/src/edu/nd/se2018/homework/homework4ClassDiagram.pdf differ diff --git a/src/edu/nd/se2018/homework/homework4Reflection.docx b/src/edu/nd/se2018/homework/homework4Reflection.docx new file mode 100644 index 00000000..cc0d0988 Binary files /dev/null and b/src/edu/nd/se2018/homework/homework4Reflection.docx differ diff --git a/src/edu/nd/se2018/homework/hwk1/Question1.java b/src/edu/nd/se2018/homework/hwk1/Question1.java index d990b3b1..e21484a4 100644 --- a/src/edu/nd/se2018/homework/hwk1/Question1.java +++ b/src/edu/nd/se2018/homework/hwk1/Question1.java @@ -1,10 +1,22 @@ package edu.nd.se2018.homework.hwk1; +import java.util.HashSet; + public class Question1 { public Question1(){} - public int getSumWithoutDuplicates(int[] numbers){ - return 0; + public int getSumWithoutDuplicates(int[] arr){ + int sum = 0 ; + HashSet h = new HashSet(); + for(int i = 0; i < arr.length; i++) { + if(h.contains(arr[i])) { + break; + }else { + h.add(arr[i]); + sum+=arr[i]; + } + } + return sum; } } diff --git a/src/edu/nd/se2018/homework/hwk1/Question2.java b/src/edu/nd/se2018/homework/hwk1/Question2.java index b04a7f86..684436d4 100644 --- a/src/edu/nd/se2018/homework/hwk1/Question2.java +++ b/src/edu/nd/se2018/homework/hwk1/Question2.java @@ -1,10 +1,40 @@ +/* + * Shane Johnson Homework 1 Question2 + * Outputing the most occurring word in a sentence + */ package edu.nd.se2018.homework.hwk1; - +import java.util.*; +import java.util.Map.Entry; public class Question2 { public Question2(){} - public String getMostFrequentWord(String input, String stopwords){ - return ""; + public String getMostFrequentWord(String input, String stopWords){ + HashMap map = new HashMap<>(); + String[] tokens1 = stopWords.split(" "); // splits the words + HashSet stopSet = new HashSet<>(Arrays.asList(tokens1)); + String[] tokens2 = input.split(" "); + + for (String token: tokens2){ + if(!stopSet.contains(token)) { + if(map.containsKey(token)) { + int count = map.get(token); + map.put(token, count+1); + } else { + map.put(token, 1); + } + } + } + + Object[] numbers = map.values().toArray(); + Arrays.sort(numbers); + if (numbers[numbers.length-1] == numbers[numbers.length-2]) { + return null; + } + + Map.Entry temp = (Entry) map.entrySet().stream().sorted(Map.Entry.comparingByValue().reversed()).findFirst().get(); + System.out.println(temp.getKey()); + + return temp.getKey(); } } diff --git a/src/edu/nd/se2018/homework/hwk1/Question3.java b/src/edu/nd/se2018/homework/hwk1/Question3.java index 740d282c..b6785b4c 100644 --- a/src/edu/nd/se2018/homework/hwk1/Question3.java +++ b/src/edu/nd/se2018/homework/hwk1/Question3.java @@ -1,9 +1,41 @@ package edu.nd.se2018.homework.hwk1; + public class Question3 { public Question3(){} public int getMirrorCount(int[] numbers){ - return 0; + int[] mirroredArr = mirror(numbers); + return maxCount(numbers, mirroredArr); } + + private int[] mirror(int[] arr) { //flips the original array to find any mirror + int[] newArray = new int[arr.length]; + + for (int i = arr.length-1, j = 0; i >= 0; i--, j++) { + newArray[j] = arr[i]; + } + + return newArray; + } + + private int maxCount(int[] original, int[] mirrored) { //finds the most mirrored numbers + int maxCount = 0; + int count = 0; + + for (int i = 0; i < original.length; i++) { + if (original[i] == mirrored[i]) { + count++; + }else { + count = 0; + } + + if (count > maxCount) { + maxCount = count; + } + } + System.out.println(maxCount); + return maxCount; + + } } diff --git a/src/edu/nd/se2018/homework/hwk2/src/colombusGame/ColumbusShip.png b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/ColumbusShip.png new file mode 100644 index 00000000..ab23f309 Binary files /dev/null and b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/ColumbusShip.png differ diff --git a/src/edu/nd/se2018/homework/hwk2/src/colombusGame/OceanMap.java b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/OceanMap.java new file mode 100644 index 00000000..6ae5efea --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/OceanMap.java @@ -0,0 +1,5 @@ +package edu.nd.se2018.homework.hwk2.src.colombusGame; + +public class OceanMap { + +} diff --git a/src/edu/nd/se2018/homework/hwk2/src/colombusGame/PirateShip.java b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/PirateShip.java new file mode 100644 index 00000000..50b622de --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/PirateShip.java @@ -0,0 +1,5 @@ +package edu.nd.se2018.homework.hwk2.src.colombusGame; + +public class PirateShip { + +} diff --git a/src/edu/nd/se2018/homework/hwk2/src/colombusGame/Ship.java b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/Ship.java new file mode 100644 index 00000000..2a540b2b --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/Ship.java @@ -0,0 +1,5 @@ +package edu.nd.se2018.homework.hwk2.src.colombusGame; + +public class Ship { + +} diff --git a/src/edu/nd/se2018/homework/hwk2/src/colombusGame/island.jpg b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/island.jpg new file mode 100644 index 00000000..8ae6d1a1 Binary files /dev/null and b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/island.jpg differ diff --git a/src/edu/nd/se2018/homework/hwk2/src/colombusGame/pirateship.gif b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/pirateship.gif new file mode 100644 index 00000000..c3bbfa28 Binary files /dev/null and b/src/edu/nd/se2018/homework/hwk2/src/colombusGame/pirateship.gif differ diff --git a/src/edu/nd/se2018/homework/hwk2/src/homework2/EarlySprintStrategy.java b/src/edu/nd/se2018/homework/hwk2/src/homework2/EarlySprintStrategy.java new file mode 100644 index 00000000..7d7593a4 --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/homework2/EarlySprintStrategy.java @@ -0,0 +1,33 @@ +package edu.nd.se2018.homework.hwk2.src.homework2; + +public class EarlySprintStrategy extends Horse{ + + public double slowSpeed; + public double intspeed; + + public EarlySprintStrategy(String n, double s) { + intspeed = s; + slowSpeed = s*.75; + } + + @Override + public void run() { + if (position < 10) { + if (position >= 2) { + intspeed = slowSpeed; + } + position = position + intspeed*timeIncr; + }else { + finished = true; + } + } + + public void display() { + if (!finished) { + System.out.println(name + " ran " + position + " miles."); + }else { + System.out.println(name + " finished."); + } + + } +} diff --git a/src/edu/nd/se2018/homework/hwk2/src/homework2/Horse.java b/src/edu/nd/se2018/homework/hwk2/src/homework2/Horse.java new file mode 100644 index 00000000..d634a8fb --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/homework2/Horse.java @@ -0,0 +1,20 @@ +package edu.nd.se2018.homework.hwk2.src.homework2; + +public class Horse { + + public void display() { + } + + public Horse(){ + } + + public void run(){ + } + + public String name; + public double timeIncr = .04; + public double position = 0; + public boolean finished = false; + public double intspeed; + public double slowSpeed = 0; +} diff --git a/src/edu/nd/se2018/homework/hwk2/src/homework2/SlowStartStrategy.java b/src/edu/nd/se2018/homework/hwk2/src/homework2/SlowStartStrategy.java new file mode 100644 index 00000000..334e517a --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/homework2/SlowStartStrategy.java @@ -0,0 +1,42 @@ +package edu.nd.se2018.homework.hwk2.src.homework2; + +public class SlowStartStrategy extends Horse{ + public double intspeed; + public double nonslowSpeed; + public double slowSpeed; + public double slowerSpeed; + + public SlowStartStrategy(String n, double s) { + name = n; + nonslowSpeed = s; + slowerSpeed = s*.75; + slowSpeed = s*.90; + } + + @Override + public void run() { + if (position < 10) { + if (position <= 6) { + intspeed = slowerSpeed; + }else if (position > 6 && position < 9) { + intspeed = slowSpeed; + }else { + intspeed = nonslowSpeed; + } + + position = position + intspeed*timeIncr; + }else { + finished = true; + } + } + + public void display() { + if (!finished) { + System.out.println(name + " ran " + position + " miles."); + }else { + System.out.println(name + " finished."); + } + + } + +} diff --git a/src/edu/nd/se2018/homework/hwk2/src/homework2/SteadyRunStrategy.java b/src/edu/nd/se2018/homework/hwk2/src/homework2/SteadyRunStrategy.java new file mode 100644 index 00000000..12ac6224 --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/homework2/SteadyRunStrategy.java @@ -0,0 +1,28 @@ +package edu.nd.se2018.homework.hwk2.src.homework2; + +public class SteadyRunStrategy extends Horse { + public double intspeed; + + public SteadyRunStrategy(String n, double s) { + name = n; + intspeed = s*.8; + } + + + @Override + public void run() { + if (position < 10) { + position = position + intspeed*timeIncr; + }else { + finished = true; + } + } + + public void display() { + if (!finished) { + System.out.println(name + " tran " + position + " miles."); + }else { + System.out.println(name + " finished."); + } + } +} diff --git a/src/edu/nd/se2018/homework/hwk2/src/racetest/Race.java b/src/edu/nd/se2018/homework/hwk2/src/racetest/Race.java new file mode 100644 index 00000000..14223c3c --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/racetest/Race.java @@ -0,0 +1,50 @@ +package edu.nd.se2018.homework.hwk2.src.racetest; + +import edu.nd.se2018.homework.hwk2.src.homework2.EarlySprintStrategy; +import edu.nd.se2018.homework.hwk2.src.homework2.Horse; +import edu.nd.se2018.homework.hwk2.src.homework2.SlowStartStrategy; +import edu.nd.se2018.homework.hwk2.src.homework2.SteadyRunStrategy; + +public class Race { + public Horse[] arr = new Horse[5]; + public int horseNum = 0; + + public void enrollHorse(String n, double s, String t) { + if(t == "steady") { + arr[horseNum] = new SteadyRunStrategy(n, s); + }else if (t == "slow") { + arr[horseNum] = new SlowStartStrategy(n, s); + }else { + arr[horseNum] = new EarlySprintStrategy(n, s); + } + + horseNum++; + } + + public Race(){ + } + + public void startRace() throws InterruptedException{ + while (!arr[0].finished && !arr[1].finished && !arr[2].finished && !arr[3].finished && !arr[4].finished) { + for (int i = 0; i < 5; i++) { + arr[i].run(); + } + for (int i = 0; i < 5; i++) { + arr[i].display(); + } + if (arr[0].finished) { + System.out.println(arr[0].name + " HAS WON!"); + }else if(arr[1].finished) { + System.out.println(arr[1].name + " HAS WON!"); + }else if(arr[2].finished) { + System.out.println(arr[2].name + " HAS WON!"); + }else if(arr[3].finished) { + System.out.println(arr[3].name + " HAS WON!"); + }else if(arr[4].finished) { + System.out.println(arr[4].name + " HAS WON!"); + } + Thread.sleep(500); + } + } + +} diff --git a/src/edu/nd/se2018/homework/hwk2/src/racetest/RaceTest1.java b/src/edu/nd/se2018/homework/hwk2/src/racetest/RaceTest1.java new file mode 100644 index 00000000..10f910a5 --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/racetest/RaceTest1.java @@ -0,0 +1,19 @@ +package edu.nd.se2018.homework.hwk2.src.racetest; +import org.junit.Test; + +import edu.nd.se2018.homework.hwk2.src.homework2.EarlySprintStrategy; +import edu.nd.se2018.homework.hwk2.src.homework2.Horse; +import edu.nd.se2018.homework.hwk2.src.homework2.SlowStartStrategy; +import edu.nd.se2018.homework.hwk2.src.homework2.SteadyRunStrategy; + +public class RaceTest1 { + @Test + public void test() throws InterruptedException { + Horse test1 = new SteadyRunStrategy(null, 0); + test1.run(); + Horse test2 = new SlowStartStrategy(null, 0); + test2.run(); + Horse test3 = new EarlySprintStrategy(null, 0); + test3.run(); + } +} diff --git a/src/edu/nd/se2018/homework/hwk2/src/racetest/RaceTest2.java b/src/edu/nd/se2018/homework/hwk2/src/racetest/RaceTest2.java new file mode 100644 index 00000000..e6a5cd51 --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/racetest/RaceTest2.java @@ -0,0 +1,20 @@ +package edu.nd.se2018.homework.hwk2.src.racetest; +import org.junit.Test; + +import edu.nd.se2018.homework.hwk2.src.homework2.EarlySprintStrategy; +import edu.nd.se2018.homework.hwk2.src.homework2.Horse; +import edu.nd.se2018.homework.hwk2.src.homework2.SlowStartStrategy; +import edu.nd.se2018.homework.hwk2.src.homework2.SteadyRunStrategy; + + +public class RaceTest2 { + @Test + public void test() throws InterruptedException { + Horse test1 = new SteadyRunStrategy(null, 0); + test1.display(); + Horse test2 = new SlowStartStrategy(null, 0); + test2.display(); + Horse test3 = new EarlySprintStrategy(null, 0); + test3.display(); + } +} \ No newline at end of file diff --git a/src/edu/nd/se2018/homework/hwk2/src/racetest/RaceTest3.java b/src/edu/nd/se2018/homework/hwk2/src/racetest/RaceTest3.java new file mode 100644 index 00000000..d60c29ce --- /dev/null +++ b/src/edu/nd/se2018/homework/hwk2/src/racetest/RaceTest3.java @@ -0,0 +1,15 @@ +package edu.nd.se2018.homework.hwk2.src.racetest; +import org.junit.Test; + +public class RaceTest3 { + @Test + public void test() throws InterruptedException { + Race race = new Race(); + race.enrollHorse("Lily", 41, "steady"); + race.enrollHorse("Argo", 42, "slow"); + race.enrollHorse("Jackie", 45, "early"); + race.enrollHorse("Stone", 46, "slow"); + race.enrollHorse("Caleb", 41, "steady"); + } +} + diff --git a/src/edu/nd/se2018/pirateship.gif b/src/edu/nd/se2018/pirateship.gif new file mode 100644 index 00000000..c3bbfa28 Binary files /dev/null and b/src/edu/nd/se2018/pirateship.gif differ diff --git a/src/images/BlankTile.png b/src/images/BlankTile.png new file mode 100644 index 00000000..c594f20d Binary files /dev/null and b/src/images/BlankTile.png differ diff --git a/src/images/Train2.PNG b/src/images/Train2.PNG new file mode 100644 index 00000000..6bda3e18 Binary files /dev/null and b/src/images/Train2.PNG differ diff --git a/src/images/blueKey.png b/src/images/blueKey.png new file mode 100644 index 00000000..2c6b249b Binary files /dev/null and b/src/images/blueKey.png differ diff --git a/src/images/blueKeyWall.png b/src/images/blueKeyWall.png new file mode 100644 index 00000000..70480b9c Binary files /dev/null and b/src/images/blueKeyWall.png differ diff --git a/src/images/bugDown.PNG b/src/images/bugDown.PNG new file mode 100644 index 00000000..a9ddcfd3 Binary files /dev/null and b/src/images/bugDown.PNG differ diff --git a/src/images/chipCrispy.PNG b/src/images/chipCrispy.PNG new file mode 100644 index 00000000..8f31b174 Binary files /dev/null and b/src/images/chipCrispy.PNG differ diff --git a/src/images/chipDown.png b/src/images/chipDown.png new file mode 100644 index 00000000..1d06deb1 Binary files /dev/null and b/src/images/chipDown.png differ diff --git a/src/images/chipLeft.png b/src/images/chipLeft.png new file mode 100644 index 00000000..243a4400 Binary files /dev/null and b/src/images/chipLeft.png differ diff --git a/src/images/chipRight.png b/src/images/chipRight.png new file mode 100644 index 00000000..ec669d27 Binary files /dev/null and b/src/images/chipRight.png differ diff --git a/src/images/chipUp.png b/src/images/chipUp.png new file mode 100644 index 00000000..fdfb383c Binary files /dev/null and b/src/images/chipUp.png differ diff --git a/src/images/fire.PNG b/src/images/fire.PNG new file mode 100644 index 00000000..650b0f29 Binary files /dev/null and b/src/images/fire.PNG differ diff --git a/src/images/fireShoe.PNG b/src/images/fireShoe.PNG new file mode 100644 index 00000000..0a140b88 Binary files /dev/null and b/src/images/fireShoe.PNG differ diff --git a/src/images/greenKey.png b/src/images/greenKey.png new file mode 100644 index 00000000..c6b4dfe4 Binary files /dev/null and b/src/images/greenKey.png differ diff --git a/src/images/greenKeyWall.png b/src/images/greenKeyWall.png new file mode 100644 index 00000000..6c9660b8 Binary files /dev/null and b/src/images/greenKeyWall.png differ diff --git a/src/images/portal.png b/src/images/portal.png new file mode 100644 index 00000000..600ff4c6 Binary files /dev/null and b/src/images/portal.png differ diff --git a/src/images/redKey.png b/src/images/redKey.png new file mode 100644 index 00000000..3bb88b4b Binary files /dev/null and b/src/images/redKey.png differ diff --git a/src/images/redKeyWall.png b/src/images/redKeyWall.png new file mode 100644 index 00000000..8ac73e32 Binary files /dev/null and b/src/images/redKeyWall.png differ diff --git a/src/images/wall.PNG b/src/images/wall.PNG new file mode 100644 index 00000000..fe336378 Binary files /dev/null and b/src/images/wall.PNG differ diff --git a/src/images/water.PNG b/src/images/water.PNG new file mode 100644 index 00000000..095c7261 Binary files /dev/null and b/src/images/water.PNG differ diff --git a/src/images/yellowKey.png b/src/images/yellowKey.png new file mode 100644 index 00000000..b537de26 Binary files /dev/null and b/src/images/yellowKey.png differ diff --git a/src/images/yellowKeyWall.png b/src/images/yellowKeyWall.png new file mode 100644 index 00000000..d6a5ea1a Binary files /dev/null and b/src/images/yellowKeyWall.png differ