All pastes #815595 Raw Edit

Unbenannt

public text v1 · immutable
·published 2007-12-14 05:16 UTC
rendered paste body
/** 
 * 
 */
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<String> way = new Vector<String>();
	private boolean tcon=true;
	private Vector<ILocation> 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;
	}

}