/** * */ package solutions; import de.tu_darmstadt.es.sopra.exercises.Game; import de.tu_darmstadt.es.sopra.model.external.factories.CommandFactory; import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.IScenario; import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.ILocation; import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.ITransporter; import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.IProductionFacility; import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.IScenarioElement; import de.tu_darmstadt.es.sopra.model.external.implementations.type.GoodType; import de.tu_darmstadt.es.sopra.model.external.implementations.type.LocationType; import java.util.Vector; public class Solution09 extends Game { private Solution08 computer=new Solution08(); private ILocation pumpLocation,millLocation; private IScenarioElement t1Location; private IProductionFacility pump=(IProductionFacility) pumpLocation; private ITransporter t1; private Vector way = new Vector(); private boolean tcon=true; private Vector pumps, mills; private CommandFactory cmd; private boolean finished=false; public void planningPhase(IScenario arg0, int arg1) { if(finished||!tcon) finished(); else{ if (arg1==1) beginn(arg0); else catchMeIfYouCan(arg0); } } @Override public void preparationPhase(IScenario arg0) { check(arg0); if (tcon){ computeWay(arg0); } } private void check(IScenario arg0){ try { t1 = arg0.getTransporter("t1"); t1Location = t1.getVisitedScenarioElement(); } catch (Exception e) { t1 = null; t1 = null; } Solution04 sol = new Solution04(); pumps = sol.getLocationsOfType(arg0, LocationType.PUMP); mills = sol.getLocationsOfType(arg0, LocationType.MILL); if ((t1 == null)|| (t1Location == null) ||(pumps == null)|| (mills == null) ||(pumps.size() == 0) || (mills.size() == 0)) tcon=false; } private int duration(IScenarioElement arg0, ILocation pump, ILocation mill) { int i, j; i = computer.getShortestPathDuration(arg0.getId(), pump.getId()); j = computer.getShortestPathDuration(pump.getId(), mill.getId()); if (i > 2) return i + j ; else return 2 + j ; } private void computeWay(IScenario arg0) { int i, j, min, dur; String[] locations = (String[]) arg0.getLocations().keySet().toArray(new String[0]); computer.computeAPSP(arg0, locations); min = Integer.MAX_VALUE; for (i = 0; i < pumps.size(); i++) for (j = 0; j < mills.size(); j++) { dur = duration(t1Location,pumps.get(i),mills.get(j)); if (dur< min){ pumpLocation = pumps.get(i); millLocation = mills.get(j); min = dur; } } String t1locstr = t1Location.getId(); String plocstr = pumpLocation.getId(); if (t1locstr.equals(plocstr)) way.add(t1locstr); else way.addAll(computer.getShortestPath(t1locstr, plocstr)); way.addAll(computer.getShortestPath(plocstr, millLocation.getId())); } private void move(IScenario scenario) { ILocation loc; try{ loc = scenario.getLocation(way.get(0)); t1.assignCommand(cmd.getTravelCommand(t1, loc)); way.remove(0); } catch (Exception e) { } } private void beginn(IScenario arg0){ String strLocation; try { pump.assignCommand(cmd.getProduceCommand(pump)); strLocation = way.remove(0); if (!strLocation.equals(pumpLocation.getId())) move(arg0); } catch (Exception e) { } } private void getWater(){ if (!pump.hasCommand()) { try{t1.assignCommand(cmd.getUploadCommand(t1, 20,GoodType.WATER));}catch (Exception e){System.out.println("busy");} } } private void deliverWater(){ try{t1.assignCommand( cmd.getUnloadCommand(t1, 20,GoodType.WATER));}catch (Exception e){System.out.println("fuck ugly");} finished = true; } private void catchMeIfYouCan(IScenario arg0){ String location=t1.getVisitedScenarioElement().getId(); int load=t1.getTransportedGoodSet().getTotalQuantity(); if(location==pumpLocation.getId()){ if(load!=20){ getWater(); } else { way.remove(0); move(arg0); } } else if(location==millLocation.getId()&&load==20 ){ deliverWater(); } else { if (t1.getCommand()==null) move(arg0); } } @Override public String[] getAuthors() { // TODO Auto-generated method stub return null; } @Override public String getTeam() { // TODO Auto-generated method stub return null; } @Override public String getVersion() { // TODO Auto-generated method stub return null; } }