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

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

?? unit.java

?? 用java開發(fā)的一個實(shí)施策略游戲源碼 值得學(xué)習(xí)一下
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
		}
	}
	
	//The remaining methods are intended to be over-rided by sub-classes of Unit.
	//The default version of think() may suffice for many (all?) units.
	/** Returns the number of frames needed to move forward one hex.
	 * @return How many frames it takes to move one hex.
	 */
	protected abstract int framesToMove();
	/** Returns the number of frames needed to rotate one hex-side.
	 * @return How many frames it takes to rotate sixty degrees.
	 */
	protected abstract int framesToRotate();

	/** Do the processing for a frame of animation while moving forward. */
	protected abstract void animateMove();
	/** Do the processing for a frame of animation while rotating left. */
	protected abstract void animateRotateLeft();
	/** Do the processing for a frame of animation while rotating right. */
	protected abstract void animateRotateRight();

	/** Think about what to do. Called by Update() when the Unit is sitting around, or just finished doing something (such as moving one hex or rotating one hex-side).
	 * Default version scans for enemies if in Guard Mode (changing to Pursuit Mode if one is detected),
	 * then figures out a direction to move if it has a destination.
	 */
	protected void think() {
		//Decide where to go next. Reserve an adjacent hex if plausible.
		
		//First, if a target is chosen, untarget it if it is dead
		if(target != null && target.isDead()) {
			target = null;
			targetSSMDS = null;
			if(mode == 2)
				mode = 0;
		}
		
		int fChg = 0;
		Hex next = null;
		if(mode == 0) {
			target = scan();
			if(target == null) {
				resX = x; resY = y;
				action = 0;
				return; //don't go anywhere
			}else{
				mode = 2;
				targetSSMDS = firstSSMDS.getTarget(this, target);
			}
		}
		if(mode == 1) // Go toward destination
			resF = bestDirection(goalX,goalY); //Change arguments to control destination
		if(mode == 2) // Pursue target
		{
			int fol = followRange();
			goalX = target.x;
			goalY = target.y;
			confirmSubPlan(goalX,goalY);
			resF = bestDirection(goalX,goalY);
			if((fol >= goalX - x) &&
			   (fol >= x - goalX) &&
			   (fol >= goalY - y) &&
			   (fol >= y - goalY) &&
			   (fol >= goalX - x - goalY + y) &&
			   (fol >= x - goalX - y + goalY)) {
				if(resF == f) {
					action = 0;
				}else{
					if((resF - f > 0 && resF - f < 3) || resF - f < -3){
						//rotate left
						action = 1; frame = framesToRotate();
					}else{
						//rotate right
						action = 2; frame = framesToRotate();
					}
				}
				resX = x; resY = y;
				return;
			}
		}
		switch(traceMode)
		{
			case 0:
				while(true){
					switch(resF){
						case 0: resX = x + 1;	resY = y + 1;	break;
						case 1: resX = x;	resY = y + 1;	break;
						case 2:	resX = x - 1;	resY = y;	break;
						case 3: resX = x - 1;	resY = y - 1;	break;
						case 4:	resX = x;	resY = y - 1;	break;
						case 5:	resX = x + 1;	resY = y;	break;
					}
					next = Hex.getHex(resX, resY);
					if(next != null && next.reserve())
						break;
					if(resX == goalX && resY == goalY)
					{
					    mode = 0;
					    return;
					}
					//Change resF. This causes resF to try
					//one hex-side to the left, then one to the right,
					//then two to the left, etc.
					fChg *= -1;
					fChg += (fChg == 0)?(subPlanBias):((fChg < 0)?(-1):(1));
					resF += fChg;
					if(resF < 0) resF += 6;
					else if(resF > 5) resF -= 6;

					if(fChg == 6 || fChg == -6) {//nowhere to go. Already checked all six sides.
						action = 0;
						resX = x; resY = y;
						return;
					}
				}
				fChg = resF - f;
				if(fChg == 2 || fChg == 3 || fChg == -4)
					traceMode = 1;
				else if(fChg == -2 || fChg == -3 || fChg == 4)
					traceMode = -1;
				reserved = true;
				Hex.getHex(x, y).unreserve();
			break;
			case 1:
				resF = f - 1;
				if(resF < 0) resF = 5;
				while(true){
					switch(resF){
						case 0: resX = x + 1;	resY = y + 1;	break;
						case 1: resX = x;	resY = y + 1;	break;
						case 2:	resX = x - 1;	resY = y;	break;
						case 3: resX = x - 1;	resY = y - 1;	break;
						case 4:	resX = x;	resY = y - 1;	break;
						case 5:	resX = x + 1;	resY = y;	break;
					}
					next = Hex.getHex(resX, resY);
					if(next != null && next.reserve())
						break;
					if(resX == goalX && resY == goalY)
					{
					    mode = 0;
					    return;
					}
					//Change resF. Try starting from 60 degrees right leftward.
					resF += 1;
					if(resF > 5) resF -= 6;

					if(resF == f - 1 || resF == f + 5) {//nowhere to go. Already checked all six sides.
						action = 0;
						resX = x; resY = y;
						return;
					}
				}
				confirmSubPlan(goalX,goalY);
				if(resF == bestDirection(goalX,goalY));
					traceMode = 0;
				reserved = true;
				Hex.getHex(x, y).unreserve();
			break;
			case -1:
				resF = f + 1;
				if(resF > 5) resF = 0;
				while(true){
					switch(resF){
						case 0: resX = x + 1;	resY = y + 1;	break;
						case 1: resX = x;	resY = y + 1;	break;
						case 2:	resX = x - 1;	resY = y;	break;
						case 3: resX = x - 1;	resY = y - 1;	break;
						case 4:	resX = x;	resY = y - 1;	break;
						case 5:	resX = x + 1;	resY = y;	break;
					}
					next = Hex.getHex(resX, resY);
					if(next != null && next.reserve())
						break;
					if(resX == goalX && resY == goalY)
					{
					    mode = 0;
					    return;
					}
					//Change resF. Try starting from 60 degrees left rightward.
					resF -= 1;
					if(resF < 0) resF += 6;

					if(resF == f + 1 || resF == f - 5) {//nowhere to go. Already checked all six sides.
						action = 0;
						resX = x; resY = y;
						return;
					}
				}
				confirmSubPlan(goalX,goalY);
				if(resF == bestDirection(goalX,goalY));
					traceMode = 0;
				reserved = true;
				Hex.getHex(x, y).unreserve();
			break;
		}
	}
	
	/** Returns the number of Hexes to get within if in Pursuit Mode.
	 * As long as the Unit is this close to its target, it will remain stationary and fire.
	 * This allows long range Units to abuse their range advantage by staying back while firing.
	 * @return The range to approach to, in hexes.
	 */
	public abstract int followRange();

	/** Returns The maximum value of health for this Unit, which is the initial value for health.
	 * @return The amount of damage that must be taken to destroy the Unit.
	 */
	protected abstract int maxHealth();
	/** Returns the number of damage points to be ignored from each hit.
	 * Under standard health/armor rules, a unit cannot take less than 1 damage per hit.
	 * @return The armor value of the unit.
	 */
	protected abstract int armor();
		
	/** Applies damage to this Unit, possibly destroying it.
	 * This version uses the standard health/armor rules:
	 * <BR> A unit starts with a fixed amount of health and cannot exceed that amount.
	 * <BR> A unit has a (fixed ?) amount of armor.
	 * <BR> When a unit is hit by an attack, it loses health equal to the damage minus the armor, but a minimum of one.
	 * <BR> The unit is destroyed if it drops below 1 health.
	 */
	public void recieveDamage(int dam) {
		if(dam > 0) //Presume possibility of healing 'weapons'
		{
			dam -= armor();
			if(dam <= 0) dam = 1;
		}
		health -= dam;
		if(health > maxHealth()) health = maxHealth();
		if(health <= 0) {
			action = 5;
			frame = framesToDie();
                        ((netwar.gui.NetwarPanel)netwar.Netwar.netwar.getDataViewer()).unitKilled(myPlayer.getNumber());
		}
                if (((netwar.gui.NetwarPanel)netwar.Netwar.netwar.getDataViewer()).selectedUnitIDMatch(getID()))
                        ((netwar.gui.NetwarPanel)netwar.Netwar.netwar.getDataViewer()).updateUnitHealth(health);
	}
	
	/** Make applicable adjustments, then return true if the target is within the firing arc.
	 * The default version assumes that the Unit has a 120-degree firing arc, centered at the
	 * last hex-side it was facing, and the Unit does not have an independant turret.
	 * If the unit has an independant turret, it should override aim, and use aim to
	 * rotate the turret.
	 * @return True if the target is in the firing arc.
	 */
	protected boolean aim(){
		if(target == null) return false;
		if(target.myPlayer == myPlayer)
			return false; //Don't shoot at own units, just follow them.
		if(target.isDead()) {
			target = null;
			targetSSMDS = null;
			if(mode == 2)
				mode = 0;
			return false;
		}
		int gx = target.x;
		int gy = target.y;
		int dxy;
		gx -= x;
		gy -= y;
		dxy = gx - gy;
		switch(f) {
			case 0:
				if(gx <= 0 || gy <= 0) return false;
			break;
			case 1:
				if(gy <= 0 || dxy >= 0) return false;
			break;
			case 2:
				if(dxy >= 0 || gx >= 0) return false;
			break;
			case 3:
				if(gx >= 0 || gy >= 0) return false;
			break;
			case 4:
				if(gy >= 0 || dxy <= 0) return false;
			break;
			case 5:
				if(dxy <= 0 || gx <= 0) return false;
			break;
		}
		return true;
	}
	
	/** Return True iff the Unit is already destroyed.
	 * Destuction occurs when health drops below 1.
	 * @return True if healt <= 0.
	 */
	public boolean isDead() {
		return (health <= 0);
	}
	
	/** Return True if the Unit can be damaged.
	 * The Unit can be damaged if it is not yet destroyed.
	 * @return True if health > 0.
	 */
	public boolean damageable() {
		return (health > 0);
	}
	
	public boolean repairable() {
		return (health > 0 && health < maxHealth());
	}

	public boolean paralyzable() {
		return (health > 0 && stun == 0);
	}
	public void recieveParalysis(int level) 
	{
		if(stun == 0)
			stun = level;
	}


	
        static final String[] PROPERTIES = {"Name", "Health", "Max Health", "Armor", "Following Range", "Moving Speed", "Rotating Speed"};
        protected String[] PROPERTIES() {
            return PROPERTIES;
        }
        protected String getProperty(int p) {
            switch(p) {
                case 0:
                    String name = getClass().getName();
                    return name.substring(name.lastIndexOf(".")+1);
                case 1:
                    return Integer.toString(health);
                case 2:
                    return Integer.toString(maxHealth());
                case 3:
                    return Integer.toString(armor());
                case 4:
                    return Integer.toString(followRange());
                case 5:
                    return Integer.toString(framesToMove());
                case 6:
                    return Integer.toString(framesToRotate());
                default:
                    Assert.notFalse(false, "getProperty(int) error.");
            }
            return null;
        }
        public float getStatusFraction() {
                return (float) health / maxHealth();
        }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色综合久久| 风间由美一区二区av101| 欧美日韩亚洲不卡| 丝袜美腿一区二区三区| 这里只有精品电影| 韩国欧美一区二区| 欧美激情一区二区三区全黄| 成人伦理片在线| 亚洲欧美另类图片小说| 日本精品一区二区三区高清| 亚洲图片欧美一区| 日韩女优视频免费观看| 国产精品2024| 亚洲免费视频中文字幕| 3atv在线一区二区三区| 国模无码大尺度一区二区三区| 国产免费观看久久| 日本黄色一区二区| 久久99久久久久| 国产精品久久久久久久久果冻传媒 | 久久久久成人黄色影片| 成人听书哪个软件好| 亚洲一区二区三区不卡国产欧美| 51精品国自产在线| 丁香亚洲综合激情啪啪综合| 亚洲午夜久久久久久久久电影院 | 欧美成人免费网站| 成人av网址在线| 天堂成人国产精品一区| 国产网站一区二区| 欧美高清视频一二三区 | 久久精品国产久精国产| 国产精品久久久久婷婷| 在线不卡一区二区| 99re亚洲国产精品| 精品亚洲aⅴ乱码一区二区三区| 亚洲桃色在线一区| 精品91自产拍在线观看一区| 91成人免费电影| 国产精品一卡二卡| 石原莉奈在线亚洲三区| 1区2区3区国产精品| 精品福利在线导航| 欧美日本精品一区二区三区| 高清国产午夜精品久久久久久| 亚洲不卡在线观看| 亚洲欧美日韩在线不卡| 久久久精品国产免大香伊| 欧美日韩一级二级| 色天天综合色天天久久| 成人手机电影网| 国内精品视频666| 日韩不卡在线观看日韩不卡视频| 自拍av一区二区三区| 久久精品一区二区三区四区| 欧美一区二区三区的| 国产亚洲一区二区在线观看| 欧美日韩色一区| 91丨九色porny丨蝌蚪| 国产成人免费视频网站| 激情五月婷婷综合| 日本不卡一区二区三区| 午夜伦理一区二区| 一级日本不卡的影视| 中文字幕日韩av资源站| 中文字幕免费在线观看视频一区| 欧美成人三级电影在线| 欧美大度的电影原声| 91精品午夜视频| 欧美肥妇毛茸茸| 7777女厕盗摄久久久| 欧美喷水一区二区| 欧美三级中文字幕在线观看| 在线观看日韩av先锋影音电影院| 99久久久久久99| 97se亚洲国产综合自在线| 播五月开心婷婷综合| voyeur盗摄精品| 99麻豆久久久国产精品免费 | 欧美久久久久久久久中文字幕| 在线看日韩精品电影| 在线精品视频一区二区三四| 91久久精品一区二区二区| 色94色欧美sute亚洲线路二| 欧美午夜片在线看| 制服丝袜av成人在线看| 欧美一区二区三区电影| 久久日韩精品一区二区五区| 久久久久久综合| 亚洲欧洲av在线| 亚洲自拍都市欧美小说| 日日摸夜夜添夜夜添精品视频| 爽爽淫人综合网网站| 蜜臀av性久久久久蜜臀av麻豆| 久久成人久久爱| 国产91高潮流白浆在线麻豆| 91一区二区三区在线播放| 欧美亚洲国产一卡| 日韩欧美在线影院| 国产午夜亚洲精品不卡| 最新成人av在线| 日韩精品久久久久久| 国产剧情av麻豆香蕉精品| 99久久久免费精品国产一区二区| 欧美日韩视频不卡| 欧美精品一区二区三区一线天视频 | 亚洲综合成人网| 琪琪一区二区三区| 成人午夜av影视| 欧美三级视频在线观看| 精品乱码亚洲一区二区不卡| 中文一区在线播放| 亚洲.国产.中文慕字在线| 黑人精品欧美一区二区蜜桃| 99re在线精品| 欧美videos中文字幕| 国产精品国产三级国产普通话蜜臀 | 国产成人亚洲精品青草天美| 一本到高清视频免费精品| 91精品国产品国语在线不卡| 中文字幕不卡的av| 奇米888四色在线精品| 欧美成人vr18sexvr| 亚洲欧美日韩国产综合在线| 奇米影视一区二区三区小说| 91性感美女视频| 精品国产免费视频| 亚洲午夜久久久久久久久久久| 国产一区在线不卡| 88在线观看91蜜桃国自产| 最新成人av在线| 国产成人av网站| 欧美一级片在线观看| 亚洲精品一二三区| 粉嫩av一区二区三区粉嫩| 日韩欧美国产综合一区| 一区二区三区在线免费| 成人精品视频一区二区三区| 欧美一区二区福利视频| 亚洲一区二区三区三| 本田岬高潮一区二区三区| 精品日韩av一区二区| 香蕉成人啪国产精品视频综合网| 成人高清视频在线观看| 亚洲精品一区二区精华| 午夜不卡在线视频| 欧美亚一区二区| 亚洲女子a中天字幕| av一区二区三区在线| 国产婷婷色一区二区三区| 麻豆freexxxx性91精品| 欧美挠脚心视频网站| 亚洲综合色视频| 色综合天天综合给合国产| 国产精品日产欧美久久久久| 国产一区二区不卡| 久久综合九色欧美综合狠狠| 老司机精品视频一区二区三区| 在线电影院国产精品| 亚洲国产成人porn| 欧美日韩精品一区二区在线播放| 亚洲美女屁股眼交3| 色综合天天综合网国产成人综合天| 国产精品久久久爽爽爽麻豆色哟哟| 国产成人h网站| 国产欧美一区二区精品忘忧草| 国内精品写真在线观看| 26uuu成人网一区二区三区| 久久综合综合久久综合| 精品久久国产字幕高潮| 国产麻豆91精品| 国产喂奶挤奶一区二区三区| 国产成人精品免费看| 国产精品久久久久久久久免费丝袜 | 91精品国产综合久久久久久久| 亚洲一卡二卡三卡四卡无卡久久| 色菇凉天天综合网| 亚洲第一电影网| 日韩一区二区三区av| 免费人成黄页网站在线一区二区| 日韩欧美成人一区二区| 国产精一品亚洲二区在线视频| 国产亚洲午夜高清国产拍精品| 成人国产视频在线观看| 亚洲已满18点击进入久久| 欧美三级乱人伦电影| 久久精品国产免费| 亚洲国产精品ⅴa在线观看| 91亚洲男人天堂| 香蕉久久夜色精品国产使用方法| 欧美一区二区三区小说| 国产伦精品一区二区三区免费| 国产精品三级电影| 91成人看片片| 麻豆国产精品777777在线| 久久久精品免费免费| 欧美综合色免费| 国产原创一区二区| 亚洲欧美日韩精品久久久久| 69久久夜色精品国产69蝌蚪网|