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

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

?? mobileartillery.java

?? 用java開發(fā)的一個實施策略游戲源碼 值得學(xué)習(xí)一下
?? JAVA
字號:
/*
	Netwar
	Copyright (C) 2002  Daniel Grund, Kyle Kakligian, Jason Komutrattananon, & Brian Hibler.

	This file is part of Netwar.

	Netwar is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	Netwar is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with Netwar; if not, write to the Free Software
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package netwar.game.unit;
import netwar.utils.*;
import netwar.utils.vectorgraphics.*;
import netwar.game.*;
import netwar.game.projectile.BallisticShell;
import java.awt.*;

/** Temporary Unit class. This will be removed in Iteration 2, when the real Units are created.
 * This is a fast, durable, short range combatant.
 * It has good armor, and uses a rapid fire weapon (which is good against low armor targets).
 * Because of its long range, it has an extended scan range so that it can automatically approach enemies.
 * @author Group N2 - Project Netwar
 * @author Daniel Grund
 */
public class MobileArtillery extends Unit{
	static int firingAngles[] = null;
	static float firingForces[] = null;
	ZOrderedList zol;
	CoherentPointSet cps;
	CoherentPointSet barrel;
	int barrelAngle = 0;
	float forceProduct = 0;
	/** Constructor. This Unit has no special parameters. */
	public MobileArtillery(){
		if(firingAngles == null) {
			//need to adjust for accuracy later.
			firingAngles = new int[11];
			firingAngles[0] = 5;
			firingAngles[1] = 9;
			firingAngles[2] = 13;
			firingAngles[3] = 17;
			firingAngles[4] = 21;
			firingAngles[5] = 25;
			firingAngles[6] = 29;
			firingAngles[7] = 33;
			firingAngles[8] = 37;
			firingAngles[9] = 41;
			firingAngles[10] = 45;
			firingForces = new float[11];
			firingForces[0] = 0;
			firingForces[1] = 0.1f;
			firingForces[2] = 0.3f;
			firingForces[3] = 0.45f;
			firingForces[4] = 0.5f;
			firingForces[5] = 0.6f;
			firingForces[6] = 0.6f;
			firingForces[7] = 0.7f;
			firingForces[8] = 0.7f;
			firingForces[9] = 0.75f;
			firingForces[10] = 0.8f;
		}
             netwar.utils.vectorgraphics.Transform t;
             if(netwar.Mapper.theApp == null) t = netwar.gui.HexViewer.getHexViewer().getTransform();
             else t = netwar.mapper.HexViewerM.getHexViewer().getTransform();
             zol = new ZOrderedList(t);
	     cps = new CoherentPointSet(34);
//		The following line is slowing the game down a lot		
//		netwar.Netwar.netwar.soundPlayer.play("sound/UnitBuy1.wav");
	}
	/** Mobile Artillery requires 5 frames to move forward one hex.
	 * @return 5
	 */
	protected int framesToMove(){
		return 5; //return the number of frames needed to move one hex.
	}
	/** Mobile Artillery requires 5 frames to rotate one hex-side.
	 * @return 5
	 */
	protected int framesToRotate(){
		return 5; //return the number of frames needed to rotate one hex-side.
	}
	/** Mobile Artillery requires 10 frames to be created.
	 * @return 10
	 */
	protected int framesToMake(){
		return 20;
	}
	/** Mobile Artillery spends 10 frames doing a death scene.
	 * @return 10
	 */
	protected int framesToDie(){
		return 10;
	}
	protected void createVectors()
	{
		int i = f * 60 + 30;
		vr = new Point3D[1];

		vr[0] = Hex.getMapPoint(x,y);
		
		//Front panel with SIGMA
		cps.add(new SelfConvertingPoint(9,-3,0));
		cps.add(new SelfConvertingPoint(9,3,0));
		cps.add(new SelfConvertingPoint(7,-3,2));
		cps.add(new SelfConvertingPoint(7,3,2));
		cps.add(new SelfConvertingPoint(7.5f,1.5f,1.5f));
		cps.add(new SelfConvertingPoint(7.5f,-1.5f,1.5f));
		cps.add(new SelfConvertingPoint(8,0,1));
		cps.add(new SelfConvertingPoint(8.5f,-1.5f,0.5f));
		cps.add(new SelfConvertingPoint(8.5f,1.5f,0.5f));
		OrderedGraphicSet ogs = new OrderedGraphicSet(
			new GraphicParallelogram(cps.getPoint(0), cps.getPoint(1), cps.getPoint(3), cps.getPoint(2), myPlayer.getColor()), 5);
		ogs.add(new GraphicLine(cps.getPoint(4), cps.getPoint(5), myPlayer.getColor().darker()), false);
		ogs.add(new GraphicLine(cps.getPoint(5), cps.getPoint(6), myPlayer.getColor().darker()), false);
		ogs.add(new GraphicLine(cps.getPoint(6), cps.getPoint(7), myPlayer.getColor().darker()), false);
		ogs.add(new GraphicLine(cps.getPoint(7), cps.getPoint(8), myPlayer.getColor().darker()), false);
		zol.add(ogs);
		
		//Side and rear panels.
		cps.add(new SelfConvertingPoint(7,-3,0));
		cps.add(new SelfConvertingPoint(-9,-3,0));
		cps.add(new SelfConvertingPoint(-9,-3,2));
		cps.add(new SelfConvertingPoint(-9,3,0));
		cps.add(new SelfConvertingPoint(-9,3,2));
		cps.add(new SelfConvertingPoint(7,3,0));
		zol.add(new GraphicTriangle(cps.getPoint(9), cps.getPoint(0), cps.getPoint(2), myPlayer.getColor()));
		zol.add(new GraphicParallelogram(cps.getPoint(9), cps.getPoint(2), cps.getPoint(11), cps.getPoint(10), myPlayer.getColor()));
		zol.add(new GraphicParallelogram(cps.getPoint(10), cps.getPoint(11), cps.getPoint(13), cps.getPoint(12), myPlayer.getColor()));
		zol.add(new GraphicParallelogram(cps.getPoint(12), cps.getPoint(13), cps.getPoint(3), cps.getPoint(14), myPlayer.getColor()));
		zol.add(new GraphicTriangle(cps.getPoint(14), cps.getPoint(1), cps.getPoint(3), myPlayer.getColor()));
		
		//Top of base of unit.
		cps.add(new SelfConvertingPoint(7,-1,2));
		cps.add(new SelfConvertingPoint(7,1,2));
		cps.add(new SelfConvertingPoint(-9,1,2));
		cps.add(new SelfConvertingPoint(-9,-1,2));
		zol.add(new GraphicParallelogram(cps.getPoint(15), cps.getPoint(16), cps.getPoint(17), cps.getPoint(18), myPlayer.getColor().darker()));
		
		//Side thingies.
		cps.add(new SelfConvertingPoint(7,-1,3));
		cps.add(new SelfConvertingPoint(7,1,3));
		cps.add(new SelfConvertingPoint(-9,1,3));
		cps.add(new SelfConvertingPoint(-9,-1,3));
		zol.add(new GraphicTriangle(cps.getPoint(15), cps.getPoint(19), cps.getPoint(2), Color.darkGray));
		zol.add(new GraphicTriangle(cps.getPoint(16), cps.getPoint(20), cps.getPoint(3), Color.darkGray));
		zol.add(new GraphicTriangle(cps.getPoint(17), cps.getPoint(21), cps.getPoint(13), Color.darkGray));
		zol.add(new GraphicTriangle(cps.getPoint(18), cps.getPoint(22), cps.getPoint(11), Color.darkGray));
		zol.add(new GraphicParallelogram(cps.getPoint(15), cps.getPoint(19), cps.getPoint(22), cps.getPoint(18), Color.darkGray));
		zol.add(new GraphicParallelogram(cps.getPoint(2), cps.getPoint(19), cps.getPoint(22), cps.getPoint(11), Color.darkGray));
		zol.add(new GraphicParallelogram(cps.getPoint(16), cps.getPoint(20), cps.getPoint(21), cps.getPoint(17), Color.darkGray));
		zol.add(new GraphicParallelogram(cps.getPoint(3), cps.getPoint(20), cps.getPoint(21), cps.getPoint(13), Color.darkGray));
		
		//Barrel
		barrel = new CoherentPointSet(6);
		cps.add(new SelfConvertingPoint(7,-1,2));
		barrel.add(cps.getPoint(23));
		cps.add(new SelfConvertingPoint(7,1,2));
		barrel.add(cps.getPoint(24));
		cps.add(new SelfConvertingPoint(7,0,3));
		barrel.add(cps.getPoint(25));
		cps.add(new SelfConvertingPoint(-9,-1,2));
		barrel.add(cps.getPoint(26));
		cps.add(new SelfConvertingPoint(-9,1,2));
		barrel.add(cps.getPoint(27));
		cps.add(new SelfConvertingPoint(-9,0,3));
		barrel.add(cps.getPoint(28));
		zol.add(new GraphicParallelogram(barrel.getPoint(0), barrel.getPoint(1), barrel.getPoint(4), barrel.getPoint(3), Color.darkGray));
		zol.add(new GraphicParallelogram(barrel.getPoint(1), barrel.getPoint(2), barrel.getPoint(5), barrel.getPoint(4), Color.darkGray));
		zol.add(new GraphicParallelogram(barrel.getPoint(0), barrel.getPoint(2), barrel.getPoint(5), barrel.getPoint(3), Color.darkGray));
		
		cps.translate(vr[0]);
		cps.rotate(vr[0], Point3D.unitUp, i);
	}
	/** Mobile Artillery is drawn as a Z-Ordered List.
	 */
	public void draw(GameViewer v) {
		if(health > 0)
			zol.draw(v);
	}
	/** Requests that the GraphicThing(s) used by this object be added to GameViewer v.
	 * @param v The GameViewer which will be displaying the object.
	 */
	public void addTo(GameViewer v) {
		if(health > 0)
			v.add(zol);
	}
	public void killGraphics() {
		zol.kill();
	}
	
	/** Mobile Artillery moves by sliding. There is no articulate animation. */
	protected void animateMove(){
		//Update the necessary vectors to move forward during one frame.
		int i = Trig.normalize(f * 60 + 30);
		Point3D pt = new Point3D(Trig.cos(i) * 4, Trig.sin(i) * 4,0);
		vr[0].doSum(pt);
		cps.translate(pt);
	}			
	/** Mobile Artillery rotates left by sliding. There is no articulate animation */
	protected void animateRotateLeft(){
		cps.rotate(vr[0], Point3D.unitUp, 12);
	}
	/** Mobile Artillery rotates right by sliding. There is no articulate animation */
	protected void animateRotateRight(){
		cps.rotate(vr[0], Point3D.unitUp, 348);
	}
	protected void animateMake() {
	}
	/** Mobile Artillery explodes. */
	protected void animateDie() {
		if(frame == framesToDie())
			zol.explode((new Point3D(0,0,-5)).doSum(vr[0]));
		frame--;
		if(frame == 0)
		{
			remove();
			Hex.getHex(resX,resY).unreserve();
			Hex.getHex(x,y).leave(this);
		}
	}

//	protected void think() { //Default is not ok for this one. Need to change it... oh time.. precious time...

	/** Mobile Artillery is 4.0 units tall. 
	 * @return 4
	 */
	public float getHeight() {
		return 4.0f;
	}
	/** Mobile Artillery is 9.0 units wide. 
	 * @return 9
	 */
	public float getWidth() {
		return 9.0f;
	}
	/** Mobile Artillery has a weapon range of 210.0 units, or 10 hexes. 
	 * @return 44100
	 */
	public float weaponRangeSquared(){
		return 44100.0f;
	}
	/** Mobile Artillery pursues to a range of 10 hexes. 
	 * @return 10
	 */
	public int followRange(){
		return 10;
	}
	/** Mobile Artillery can fire every 25th frame. 
	 * @return 24
	 */
	public int weaponDelay(){
		return 24;
	}
	/** Mobile Artillery fires a Ballistic Shell.
	 */
	protected boolean fire() {
		Point3D pt = barrel.getPoint(2).getDifference(barrel.getPoint(5));
		pt.doProduct(forceProduct);
		Point3D pt2 = new Point3D(targetSSMDS.getVector(this));
		pt2.doProduct((float)(Math.sqrt((pt.x * pt.x + pt.y * pt.y)/targetSSMDS.getDistanceSquared())));
		pt2.z = pt.z;
		Projectile.newProjectile(new BallisticShell(), barrel.getPoint(2), pt2, 55, 100, 100, this, target);
		return true;
	}
	/** Mobile Artillery has a maximum of 80 health.
	 * @return 80
	 */
	protected int maxHealth() {
		return 80;
	}
	/** Mobile Artillery has an armor rating of 5
	 * @return 5
	 */
	protected int armor() {
		return 5;
	}
	/** Mobile Artillery costs 200.
	 * @return 200
	 */
	public int cost() {
		return 300;
	}
	protected boolean aim(){
		if(!super.aim()) return false;
		
		int range = (int)Math.round(Math.sqrt(targetSSMDS.getDistanceSquared()) / 20);
		if(range > 10) range = 10;
		int angleChange = firingAngles[range] - barrelAngle;
		if(angleChange > 5) {
			barrel.rotate(barrel.getPoint(3), barrel.getPoint(3).getDifference(barrel.getPoint(4)), 5);
			barrelAngle +=5;
			return false;
		}
		if(angleChange < -5) {
			barrel.rotate(barrel.getPoint(3), barrel.getPoint(3).getDifference(barrel.getPoint(4)), 355);
			barrelAngle -=5;
			return false;
		}
		barrel.rotate(barrel.getPoint(3), barrel.getPoint(3).getDifference(barrel.getPoint(4)), Trig.normalize(angleChange));
		barrelAngle = firingAngles[range];
		forceProduct = firingForces[range];
		return true;
	}
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜一区二区三区在线观看| 国产电影精品久久禁18| 精品亚洲国内自在自线福利| 99久久精品99国产精品| 欧美xxxxxxxxx| 亚洲在线视频网站| 成人在线综合网| 欧美不卡在线视频| 日韩一区欧美二区| 日本丶国产丶欧美色综合| 欧美激情在线一区二区| 久久精品国产99久久6| 精品视频一区二区不卡| 一区二区国产盗摄色噜噜| 成人国产精品视频| 国产日本亚洲高清| 国产在线一区二区综合免费视频| 欧美影院一区二区三区| 一区在线观看免费| 成人a级免费电影| 久久精品视频在线看| 久久99精品国产.久久久久久 | 国产精品剧情在线亚洲| 狠狠色丁香婷综合久久| 欧美一级黄色录像| 亚洲bt欧美bt精品| 亚洲欧美怡红院| 国产福利精品导航| 国产午夜一区二区三区| 国产精品538一区二区在线| 久久综合久色欧美综合狠狠| 麻豆精品一区二区三区| 日韩欧美一区二区三区在线| 欧美日韩高清一区二区三区| 麻豆精品国产传媒mv男同| 欧美日韩高清影院| 日韩极品在线观看| 日韩一区二区三区高清免费看看| 日产国产高清一区二区三区 | 日本亚洲电影天堂| 欧美精品tushy高清| 日日摸夜夜添夜夜添国产精品 | 亚洲图片你懂的| 99国内精品久久| 亚洲精选免费视频| 欧美日韩电影在线播放| 日韩av中文字幕一区二区三区| 日韩一区二区三区视频在线 | 中文字幕一区二区三区av| 国产91在线|亚洲| 国产精品色哟哟网站| 91麻豆国产自产在线观看| 亚洲一区二区三区在线看| 欧美日韩一二区| 美女高潮久久久| 国产丝袜在线精品| 一本久道久久综合中文字幕| 亚洲不卡在线观看| 久久综合九色综合97婷婷女人| 成人激情午夜影院| 亚洲图片有声小说| wwwwww.欧美系列| 91小视频免费观看| 日韩av高清在线观看| 国产视频一区二区三区在线观看| 91影视在线播放| 捆绑调教一区二区三区| 国产精品伦理一区二区| 4438x成人网最大色成网站| 国产综合色在线视频区| 一区二区三区久久| 久久久不卡网国产精品二区| 色琪琪一区二区三区亚洲区| 麻豆精品一区二区综合av| 中文字幕一区二区三区四区| 欧美日韩国产首页在线观看| 国产成人福利片| 偷拍一区二区三区四区| 亚洲欧洲日韩av| 精品久久久久一区二区国产| 色婷婷综合中文久久一本| 欧美日韩精品一区二区三区| 大胆亚洲人体视频| 免费黄网站欧美| 一区二区三区欧美激情| 国产色91在线| 日韩一级二级三级精品视频| 色婷婷综合视频在线观看| 日韩二区在线观看| 亚洲精品亚洲人成人网| 国产欧美一区二区精品仙草咪| 7777精品伊人久久久大香线蕉 | 亚洲国产成人在线| 欧美电视剧在线观看完整版| 91视视频在线观看入口直接观看www | 欧美日韩精品一区二区在线播放| 成人国产精品免费观看动漫| 国精品**一区二区三区在线蜜桃| 日日夜夜免费精品视频| 亚洲精品国产视频| 国产精品电影一区二区三区| 久久精品亚洲精品国产欧美kt∨| 日韩欧美成人午夜| 日韩一区二区电影| 7777精品伊人久久久大香线蕉的 | 欧美精品成人一区二区三区四区| 91免费国产在线观看| 国产高清不卡二三区| 精品一区二区综合| 美女www一区二区| 日韩电影在线观看一区| 亚洲成年人影院| 亚洲国产成人91porn| 亚洲一区二区偷拍精品| 一区二区三区波多野结衣在线观看| 国产精品欧美一区二区三区| 欧美激情艳妇裸体舞| 久久久精品国产免大香伊| 精品国产乱码久久久久久久| 日韩视频在线你懂得| 日韩女优av电影| 久久久综合九色合综国产精品| 精品99一区二区三区| 精品999久久久| 中文一区在线播放| 亚洲欧美自拍偷拍色图| 一区二区三区日韩欧美精品| 午夜久久电影网| 免费成人美女在线观看| 国产一区啦啦啦在线观看| 成人免费视频网站在线观看| 成人av动漫在线| 欧美亚洲动漫精品| 日韩视频在线一区二区| 中文av一区特黄| 成人永久免费视频| 日本精品一区二区三区高清| 欧美日韩亚洲综合在线| 欧美一二三四区在线| 国产日韩欧美高清在线| 亚洲日本护士毛茸茸| 日韩国产欧美在线视频| 国产精品综合av一区二区国产馆| 成人精品鲁一区一区二区| 欧美午夜片在线看| 欧美va亚洲va在线观看蝴蝶网| 日本一区二区三区久久久久久久久不| 中文字幕一区二区三中文字幕| 亚洲chinese男男1069| 国产精品一区二区视频| 在线免费观看不卡av| 日韩精品在线网站| 亚洲人成在线播放网站岛国| 日本亚洲视频在线| 91免费版pro下载短视频| 欧美一级理论性理论a| 亚洲丝袜自拍清纯另类| 久久精品国产亚洲一区二区三区| 成人一区二区三区视频在线观看| 欧美日韩国产精品自在自线| 国产拍欧美日韩视频二区| 亚洲成人黄色影院| 东方欧美亚洲色图在线| 777久久久精品| 亚洲三级在线播放| 国产福利不卡视频| 在线综合视频播放| 一区二区三区四区在线播放| 国产一区二区福利| 91精品国产高清一区二区三区| 国产精品久久久久久久第一福利| 理论片日本一区| 欧美三级三级三级| 亚洲人成网站色在线观看| 国产一区二区中文字幕| 91精品婷婷国产综合久久竹菊| 亚洲男人的天堂在线aⅴ视频| 国产精品中文字幕欧美| 欧美一区二区免费视频| 亚洲国产精品久久不卡毛片 | 久久精品理论片| 欧日韩精品视频| 亚洲人快播电影网| 99国产精品久久久久久久久久| 日韩女优视频免费观看| 免费的成人av| 欧美肥妇毛茸茸| 夜夜精品浪潮av一区二区三区| av亚洲精华国产精华| 中文字幕精品综合| 国产精品亚洲第一区在线暖暖韩国| 日韩一区二区在线观看视频| 偷窥少妇高潮呻吟av久久免费| 欧美在线一区二区| 一区二区三区精品视频在线| 色综合久久中文综合久久97| 综合激情网...| 色婷婷av一区二区三区大白胸| 亚洲日本成人在线观看| 一本一道久久a久久精品|