⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eambulancecenter.java

📁 2004年robotcup世界冠军源代码
💻 JAVA
字号:
package MRL.Ambulance;import yab.agent.object.*;import yab.agent.*;import java.util.*;import MRL.Utilities.*;public class EAmbulanceCenter extends AmbulanceCenter implements ConstantConditions {    public EAmbulanceCenter(int id,DisasterSpace world){        super(id,world);    }    public final Map <AmbulanceTeam , Map <Building , Integer>> ambulanceTeamAccessibleBldgs = new HashMap();    public final Map <Building , Map <Building , Integer> > buildingHasAccessAmbulanceTeams = new HashMap();    private final List ambulanceTeams = world.ambulanceTeams;    public void initATs(){        AmbulanceTeam at;        for(Iterator it = ambulanceTeams.iterator();it.hasNext();){            at = (AmbulanceTeam) it.next();            initAT(at);        }    }    private void initAT(AmbulanceTeam at){        Map accessibleBldgs = new HashMap();        ambulanceTeamAccessibleBldgs.put(at,accessibleBldgs);        Map checkResult = new HashMap();        atCheckResultMap.put(at,checkResult);        atCheckTimeMap.put(at,0);    }    private void initBuilding(Building bldg){        final Map hasAccessATs = new HashMap();        buildingHasAccessAmbulanceTeams.put(bldg,hasAccessATs);    }    public void updateAccessiblity(){        Collection hums = world.needRescueCivs;        List poses = POSITION_PRP.collect(hums);        Object obj;        Building bldg;        AmbulanceTeam at;        for(Iterator it = poses.iterator();it.hasNext();){            obj = it.next();            if(obj == null || !(obj instanceof Building)){                continue;            }            bldg = (Building) obj;            for(Iterator it2 = ambulanceTeams.iterator();it2.hasNext();){                at = (AmbulanceTeam) it2.next();                isBldgAccessibleForAt(at,bldg);            }        }    }    private final Map <AmbulanceTeam , Integer> atCheckTimeMap = new HashMap() ;    private final Map <AmbulanceTeam , Map <Building , Boolean> > atCheckResultMap = new HashMap();    public boolean isBldgAccessibleForAt(AmbulanceTeam at , Building bldg){        Map accessibleBldgs = ambulanceTeamAccessibleBldgs.get(at);        if(accessibleBldgs.containsKey(bldg)) return true;        Map checkResult= atCheckResultMap.get(at);        Integer lastTimeChecked =  atCheckTimeMap.get(at);        if( lastTimeChecked == time()){            if(checkResult.containsKey(bldg))                return ((Boolean)checkResult.get(bldg)).booleanValue();        }        else            checkResult.clear();        Node start = HumanoidAgent.outsidePosition(at);        if(start != null){            atCheckTimeMap.remove(at);            atCheckTimeMap.put(at,time());            checkResult.remove(bldg);            Route rt = Router.get(start , Collections.singleton(bldg),HumanoidAgent.RELIABILITY_COST_FUNCTION);//            if(rt.cost >= IN_BLOCKS){//                checkResult.put(bldg,false);//                return false;//            }//            else            if(rt.cost < NOT_SEEN_RD){                accessibleBldgs.put(bldg,time());                if(! buildingHasAccessAmbulanceTeams.containsKey(bldg))                    initBuilding(bldg);                Map hasAccessAts = buildingHasAccessAmbulanceTeams.get(bldg);                hasAccessAts.put(at,time());                checkResult.put(bldg,true);                return true;            }            else {                checkResult.put(bldg,false);                return false;            }        }        else{            System.err.println(this + " , Invalid Start Position For : " + at + " In Time :  " + time());            checkResult.put(bldg,false);            return false;        }    }    public Collection getHasAccessAmbulanceTeams(Building bldg){        return buildingHasAccessAmbulanceTeams.get(bldg).keySet();    }    public Collection getAccessibleBuildingsForAT(AmbulanceTeam at){        return ambulanceTeamAccessibleBldgs.get(at).keySet();    }    public AmbulanceTeam getNearestFreeAmbulanceTeamToTarget(Collection freeAmbulances , Building bldg , boolean shouldBeAccessible){        AmbulanceTeam at,res = null;        int dist , best = Integer.MAX_VALUE;        for(Iterator it = freeAmbulances.iterator();it.hasNext();){            at = (AmbulanceTeam) it.next();            if(shouldBeAccessible){                if(!isBldgAccessibleForAt(at,bldg))                    continue;            }            dist = Util.distance(at,bldg);            if(dist < best){                res = at;                best = dist;            }        }        return res;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -