亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? world.java

?? 游戲編程AI源碼
?? JAVA
字號(hào):
package bb;

import java.util.*;
import java.awt.*;
import java.awt.geom.*;

/*
This class maintains the physical world model, handles world rendering and 
also manages the updates of the agents in both teams and manages the teams 
themselves.

@author naimad
*/

public class World {

    int numTeams;
    Vector[] teams;
    Color[] colors;
    
    Vector blackboards = new Vector();
    Vector agents = new Vector();
    Vector resources = new Vector();

    //Events:
    Vector[] notifiers;

    public World(int numTeams) {
        this.numTeams = numTeams;
        teams = new Vector[numTeams];
        colors = new Color[numTeams];
        notifiers = new Vector[numTeams];
        for (int c=0; c < numTeams; c++) {
            teams[c] = new Vector();
            notifiers[c] = new Vector();
        }
        
        if (numTeams>0) colors[0] = Color.red;
        if (numTeams>1) colors[1] = Color.blue;
        if (numTeams>2) colors[2] = Color.green;
        //etc...
    }

    public void add(Agent a) {
        agents.addElement(a);
        int t = a.getTeam();
        if (t < numTeams) {
            teams[t].addElement(a);
        }
        else System.out.println("ERROR: TOO MANY TEAMS!");
    }
    
    public void add(Blackboard bb) {
        blackboards.addElement(bb);
    }
    
    public void add(Resource r) {
    	resources.addElement(r);
    }

    public void remove(Agent a) {
        agents.remove(a);
        int t = a.getTeam();
        if (t < numTeams) {
            teams[t].remove(a);
        }
        else System.out.println("ERROR: TOO MANY TEAMS!");
    }
    
    public Vector getAgents() {
        return agents;
    }
    
    //----------------------------UPDATES-------------------------------

    public void update(double time) {

    	//Update the resource pools
    	for (int c=0; c < resources.size(); c++) {
    		Resource r = (Resource)resources.elementAt(c);
    		if (r.resources <= 0.0) {
    			c--;
    			resources.removeElement(r);
    		}
    	}

    	//Update the agents (note that we are NOT updating one team at a time -
    	//this avoids giving one team an overall execution order advantage.
    	//Instead all agents are dumped into one big list in order of creation
    	//time, which, after the initial few, is more or less random.
        for (int c=0; c < agents.size(); c++) {
            Agent a = (Agent)agents.elementAt(c);
            a.actionSelect(time);
        }

		//Have the blackboards perform their arbitration
        for (int c=0; c < blackboards.size(); c++) {
            Blackboard bb = (Blackboard)blackboards.elementAt(c);
            bb.updateMissionAssignments(time);
        }
        
		//Have the agents execute their current skills.
        for (int c=0; c < agents.size(); c++) {
            Agent a = (Agent)agents.elementAt(c);
            a.actionExecute(time);
        }

        //Finally update their physics, or, if they are dead, 
        //remove them from the list.
        for (int c=0; c < agents.size(); c++) {
            Agent a = (Agent)agents.elementAt(c);
            if (a.isAlive()) a.updatePhysics(time);
            else {
                for (int d=0; d < notifiers[a.getTeam()].size(); d++) {
                    EventNotifier en = (EventNotifier)(notifiers[a.getTeam()].elementAt(d));
                    en.deathNotification(a, a.pos);
                }
                remove(a);
            }
        }
    }
    
    void updateGraphics(double time, Graphics2D g2) {
    	
		g2.setPaint(java.awt.Color.gray);
		
    	for (int c=0; c < resources.size(); c++) {
    		Resource r = (Resource)resources.elementAt(c);
    		r.updateGraphics(time, g2);
    	}
    	
        for (int d=0; d < numTeams; d++) {
        
            //change the color!
            g2.setPaint(colors[d]);
        
            for (int c=0; c < teams[d].size(); c++) {
                Agent a = (Agent)teams[d].elementAt(c);
                a.updateGraphics(time, g2);
            }
        }
    }
    
    //---------------------------------SERVICES---------------------------------

	/*
	These are a series of self-explanatory services that the world provides to help
	the agents make their decisions about what to do.
	*/

    Vec2 vtemp = new Vec2();
        
    public void getEnemiesWithinRegion(Agent sensingAgent, Vec2 center, double range, Vector addToList) {
        double rangeSquared = range*range;
        for (int c=0; c < agents.size(); c++) {
            Agent atemp = (Agent)agents.elementAt(c);
            if (atemp.getTeam()!=sensingAgent.getTeam()) {
                atemp.getPosition(sensingAgent, vtemp);
                double dtemp = center.distanceSquared(vtemp);
                if (dtemp <= rangeSquared) addToList.addElement(atemp);
            }
        }
    }

    public void getEnemyCitiesWithinRegion(Agent sensingAgent, Vec2 center, double range, Vector addToList) {
        double rangeSquared = range*range;
        for (int c=0; c < agents.size(); c++) {
            Agent atemp = (Agent)agents.elementAt(c);
            if (atemp.getTeam()!=sensingAgent.getTeam() && (atemp instanceof City)) {
                atemp.getPosition(sensingAgent, vtemp);
                double dtemp = center.distanceSquared(vtemp);
                if (dtemp <= rangeSquared) addToList.addElement(atemp);
            }
        }
    }
    
    
    public Agent getNearestWithinRegion(Agent sensingAgent, Vec2 center, double range) {
        Agent nearest = null;
        
        double nearVal = Double.MAX_VALUE;
        for (int c=0; c < agents.size(); c++) {
            Agent atemp = (Agent)agents.elementAt(c);
            if (atemp.getTeam()!=sensingAgent.getTeam()) {
                atemp.getPosition(sensingAgent, vtemp);
                double dtemp = center.distanceSquared(vtemp);
                if (dtemp < nearVal) {
                    nearVal = dtemp;
                    nearest = atemp;
                }
            }
        }
        if (nearVal <= range*range) return nearest;
        else return null;
    }

    public City getNearestEnemyCityWithinRange(Agent sensingAgent, Vec2 center, double range) {
        Agent nearest = null;
        
        double nearVal = Double.MAX_VALUE;
        for (int c=0; c < agents.size(); c++) {
            Agent atemp = (Agent)agents.elementAt(c);
            if (atemp.getTeam()!=sensingAgent.getTeam() && (atemp instanceof City)) {
                atemp.getPosition(sensingAgent, vtemp);
                double dtemp = center.distanceSquared(vtemp);
                if (dtemp < nearVal) {
                    nearVal = dtemp;
                    nearest = atemp;
                }
            }
        }
        if (nearVal <= range*range) return (City)nearest;
        else return null;
    }
    
    
    public void getAlliesWithinRegion(Agent sensingAgent, Vec2 center, double range, Vector addToList) {
        double rangeSquared = range*range;
        for (int c=0; c < agents.size(); c++) {
            Agent atemp = (Agent)agents.elementAt(c);
            if (atemp.getTeam()==sensingAgent.getTeam()) {
                atemp.getPosition(sensingAgent, vtemp);
                double dtemp = center.distanceSquared(vtemp);
                if (dtemp <= rangeSquared) addToList.addElement(atemp);
            }
        }
    }
    
    public void getAlliedCitiesWithinRegion(Agent sensingAgent, Vec2 center, double range, Vector addToList) {
        double rangeSquared = range*range;
        for (int c=0; c < agents.size(); c++) {
            Agent atemp = (Agent)agents.elementAt(c);
            if (atemp.getTeam()==sensingAgent.getTeam() && (atemp instanceof City)) {
                atemp.getPosition(sensingAgent, vtemp);
                double dtemp = center.distanceSquared(vtemp);
                if (dtemp <= rangeSquared) addToList.addElement(atemp);
            }
        }
    }
    
    public City getNearestAlliedCityWithinRange(Agent sensingAgent, Vec2 center, double range) {
        Agent nearest = null;
        
        double nearVal = Double.MAX_VALUE;
        for (int c=0; c < agents.size(); c++) {
            Agent atemp = (Agent)agents.elementAt(c);
            if (atemp.getTeam()==sensingAgent.getTeam() && (atemp instanceof City)) {
                atemp.getPosition(sensingAgent, vtemp);
                double dtemp = center.distanceSquared(vtemp);
                if (dtemp < nearVal) {
                    nearVal = dtemp;
                    nearest = atemp;
                }
            }
        }
        if (nearVal <= range*range) return (City)nearest;
        else return null;
    }
    
    
    //-----------------------------RESOURCES-----------------------------------
    
    public Resource getNearestResourceInRange(Vec2 center, double range) {
        Resource nearest = null;
        double nearVal = Double.MAX_VALUE;

        for (int c=0; c < resources.size(); c++) {
            Resource atemp = (Resource)resources.elementAt(c);
            double dtemp = center.distanceSquared(atemp.pos);
            if (dtemp < nearVal) {
                nearVal = dtemp;
                nearest = atemp;
            }
        }
        if (nearVal <= range*range) return nearest;
        else return null;
    }

    //----------------------------EVENTS-----------------------------
    
    public void addEventNotifier(int team, EventNotifier en) {
        notifiers[team].addElement(en);
    }
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女免费视频一区二区| 成人永久aaa| 久久精品亚洲精品国产欧美kt∨| 东方欧美亚洲色图在线| 亚洲高清免费观看| 久久久久久亚洲综合影院红桃| 在线免费观看一区| 国产高清亚洲一区| 亚洲h在线观看| 国产精品国产三级国产| 日韩美女天天操| 欧美色爱综合网| 99久久精品免费| 精品写真视频在线观看| 亚洲午夜精品一区二区三区他趣| 国产亚洲综合在线| 日韩欧美电影一区| 欧美日韩国产在线播放网站| 9色porny自拍视频一区二区| 美国十次综合导航| 天堂va蜜桃一区二区三区 | 成人国产精品免费| 经典一区二区三区| 男男gaygay亚洲| 首页国产欧美久久| 亚洲午夜久久久| 夜夜嗨av一区二区三区四季av| 欧美国产精品久久| 久久久久久久久久电影| 精品欧美一区二区久久| 欧美一区二区美女| 在线成人午夜影院| 在线综合亚洲欧美在线视频| 精品视频全国免费看| 色婷婷香蕉在线一区二区| 成人av动漫在线| 成人精品视频一区二区三区尤物| 国产激情偷乱视频一区二区三区| 国产乱人伦精品一区二区在线观看 | 免费成人av在线播放| 亚洲不卡在线观看| 偷窥少妇高潮呻吟av久久免费| 亚洲激情男女视频| 亚洲一区二区三区免费视频| 一区二区三区蜜桃| 亚洲成av人片在线| 日韩不卡在线观看日韩不卡视频| 日韩国产成人精品| 捆绑调教美女网站视频一区| 久久国产精品99久久久久久老狼| 男女激情视频一区| 国产一区二区三区在线观看免费| 国产中文字幕精品| 国产91丝袜在线播放0| 不卡一二三区首页| 在线一区二区三区做爰视频网站| 欧美中文字幕一二三区视频| 欧美另类videos死尸| 91精品欧美一区二区三区综合在 | 国产传媒久久文化传媒| 成人禁用看黄a在线| 91久久精品一区二区| 欧美剧情片在线观看| 精品日韩av一区二区| 国产亚洲欧美在线| 亚洲欧美一区二区三区极速播放| 一区二区三区欧美亚洲| 日本美女一区二区三区| 国产一区二区三区日韩| 不卡一区二区三区四区| 欧美喷潮久久久xxxxx| 久久一区二区三区四区| 中文字幕在线不卡一区| 亚洲观看高清完整版在线观看 | 成人av电影在线观看| 在线观看国产精品网站| 日韩视频一区二区在线观看| 国产午夜精品久久久久久久| 麻豆精品蜜桃视频网站| 岛国av在线一区| 欧美在线高清视频| 精品国产乱码久久久久久蜜臀| 日本一区二区视频在线| 亚洲444eee在线观看| 麻豆久久久久久久| 91碰在线视频| 精品乱人伦一区二区三区| 亚洲特级片在线| 秋霞电影一区二区| 99久久综合狠狠综合久久| 制服丝袜av成人在线看| 中文字幕一区二区三区视频 | 亚洲精品免费在线播放| 日本aⅴ精品一区二区三区| 国产suv一区二区三区88区| 欧美日韩一区二区不卡| 国产精品区一区二区三| 青青草伊人久久| 91麻豆精品秘密| 久久久99精品免费观看不卡| 亚洲一区二区中文在线| 成人手机电影网| 日韩欧美区一区二| 亚洲成人久久影院| 99视频精品在线| 久久在线观看免费| 日韩经典中文字幕一区| 97国产一区二区| 国产欧美日韩亚州综合| 美女视频网站黄色亚洲| 欧美在线你懂的| 中文字幕成人网| 国产一区二区三区四区在线观看| 在线播放中文一区| 一卡二卡三卡日韩欧美| jlzzjlzz亚洲女人18| 国产清纯在线一区二区www| 男女激情视频一区| 欧美日韩另类国产亚洲欧美一级| 国产精品免费人成网站| 国产黄色91视频| 亚洲伊人色欲综合网| 99精品视频在线免费观看| 国产视频一区二区在线| 国产一区二区三区在线看麻豆| 日韩免费一区二区| 日韩av电影一区| 6080yy午夜一二三区久久| 亚洲国产精品一区二区www在线| 91原创在线视频| 亚洲欧美一区二区在线观看| 成人国产精品免费网站| 亚洲国产精品二十页| 国产69精品久久99不卡| 久久蜜桃av一区二区天堂| 国产中文一区二区三区| 久久久影视传媒| 国产精品一区二区三区网站| 久久亚洲精精品中文字幕早川悠里| 精品一区二区综合| 欧美电影免费观看高清完整版在 | zzijzzij亚洲日本少妇熟睡| 欧美激情一区二区三区全黄| 国产91丝袜在线18| 中文字幕av一区 二区| 成人性生交大片| 中文字幕在线不卡一区| 色乱码一区二区三区88| 亚洲小说欧美激情另类| 欧美高清视频一二三区| 日韩不卡手机在线v区| 日韩三级中文字幕| 国产精品一区二区果冻传媒| 中文字幕精品在线不卡| 91免费看片在线观看| 亚洲国产精品一区二区www在线| 欧美精品九九99久久| 看电视剧不卡顿的网站| 久久久久综合网| 91在线观看美女| 日韩中文字幕91| 久久免费看少妇高潮| 99久久综合精品| 在线观看欧美日本| 天天综合色天天| 久久综合色8888| 99国产精品久| 日韩精品亚洲一区二区三区免费| 精品国产乱码久久久久久图片| 福利一区二区在线观看| 亚洲影视在线播放| 欧美xxxxxxxxx| 99视频在线精品| 日韩黄色片在线观看| 国产网站一区二区| 欧美色老头old∨ideo| 国产一区二三区| 亚洲午夜电影在线观看| 久久亚洲综合色| 欧美日韩一级片网站| 成人精品亚洲人成在线| 亚洲网友自拍偷拍| 久久久国产午夜精品| 欧美亚洲国产一区二区三区va| 蜜桃视频一区二区三区| 亚洲色图丝袜美腿| 精品毛片乱码1区2区3区 | 精品国产亚洲一区二区三区在线观看| 国产成人8x视频一区二区| 亚洲福利一二三区| 欧美国产综合色视频| 欧美一区二区三级| 色综合天天视频在线观看| 韩国女主播一区| 亚洲bdsm女犯bdsm网站| 国产精品三级av| 精品久久一区二区| 欧美精品乱码久久久久久按摩| aa级大片欧美| 国产91在线观看|