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

📄 mulitmaingamethread.java

📁 联机坦克游戏
💻 JAVA
字号:
/*
 * Created on 2005-2-14
 *
 */
package tankgame;

import java.util.*;
import java.io.*;
import java.net.*;

import components.*;
import communication.*;

/**
 * @author AnSen
 * 
 * Mulitplay game
 */
public class MulitMainGameThread extends MainGameThread implements IMsgListener {
	private Properties prpNet = new Properties();

	int serverRecivePort = 0;

	InetAddress serverAddress;

	Sender sender;

	Receiver receiver;

	Vector vTanks = new Vector();

	/**
	 *  
	 */
	public MulitMainGameThread() {
		//read user properties
		try {
			prpUser.load(new FileInputStream("configure" + File.separator
					+ "User.properties"));
		} catch (IOException e) {
			e.printStackTrace();
			prpUser.setProperty("UserName", "Player");
		}

		int clientRecivePort;
		int clientSendPort;
		try {
			prpNet.load(new FileInputStream("configure" + File.separator
					+ "Net.properties"));
			serverRecivePort = Integer.parseInt(prpNet
					.getProperty("ServerRecivePort"));
			clientRecivePort = Integer.parseInt(prpNet
					.getProperty("ClientRecivePort"));
			clientSendPort = Integer.parseInt(prpNet
					.getProperty("ClientSendPort"));

			serverAddress = InetAddress.getByName(prpNet
					.getProperty("ServerAddress"));
			receiver = new Receiver(clientRecivePort);
			receiver.addListener(this);
			receiver.start();

			sender = new Sender(clientSendPort);

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see tankgame.MainGameThread#initGame(tankgame.CvGame)
	 */
	public void initGame() {
		super.initGame();
		//login
		Message msg = Message.getMsgLogin(prpUser.getProperty("UserName"),
				receiver.getReceivePort());
		sender.send(msg, serverAddress, serverRecivePort);

	}

	public void receiveMessage(Message msg, InetAddress address) {
		MulitTank tnk = null;
		switch (msg.getIType()) {
		case Message.MSG_LOGIN_ECHO:
			gmTank = new MulitTank( msg.getDPtX(), msg.getDPtY(),
					this.vContainer,msg.getIID(),false);
			((MulitTank)gmTank).setStrUsrName(prpUser.getProperty("UserName"));
			gmTank.addGmListener(new TankAdapter() {
				Message msg;

				/*
				 * (non-Javadoc)
				 * 
				 * @see components.ITankListener#barbetteTurnProformed(double)
				 */
				public void barbetteTurnProformed(double direct) {
					msg = Message.getMsgBrTurn(((MulitTank) gmTank).getIndex(),
							direct);
					sender.send(msg, serverAddress, serverRecivePort);
				}

				/*
				 * (non-Javadoc)
				 * 
				 * @see components.ITankListener#fireProformed(double)
				 */
				public void fireProformed(double direct) {
					msg = Message.getMsgFire(((MulitTank) gmTank).getIndex(),
							direct);
					sender.send(msg, serverAddress, serverRecivePort);
				}

				/*
				 * (non-Javadoc)
				 * 
				 * @see components.IGmMovListener#moveProformed(double, double)
				 */
				public void moveProformed(double direct, double speed,
						double tgX, double tgY) {
					msg = Message.getMsgMove(((MulitTank) gmTank).getIndex(),
							direct, speed, tgX, tgY);
					sender.send(msg, serverAddress, serverRecivePort);
				}

				/*
				 * (non-Javadoc)
				 * 
				 * @see components.IGmMovListener#stopMoveProformed()
				 */
				public void stopMoveProformed() {
					msg = Message.getMsgStop(((MulitTank) gmTank).getIndex());
					sender.send(msg, serverAddress, serverRecivePort);
				}
			});
			controller.setTnkTarget(gmTank);
			camera.setGmcPoint(gmTank);
			vContainer.addElement(gmTank);
			
			//vTanks.addElement(gmTank);
			break;
		case Message.MSG_CREATE_TANK:
			tnk = new MulitTank( msg.getDPtX(), msg.getDPtY(),
					this.vContainer,msg.getIID(),true);
			tnk.setStrUsrName(msg.getStrName());
			tnk.setDirect(msg.getDDirect());
			vContainer.addElement(tnk);
			vTanks.addElement(tnk);
			break;
		case Message.MSG_REMOVE_TANK:
			tnk = findTank(msg.getIID());
			if (tnk == null) {
				break;
			}
			vContainer.removeElement(tnk);
			vTanks.removeElement(tnk);
			break;
		case Message.MSG_MOVE:
			tnk = findTank(msg.getIID());
			if (tnk == null) {
				break;
			}
			/*((MulitTank) tnk).updateTank(msg.getDDirect(), msg.getDPtX(), msg
					.getDPtY());*/
			tnk.setTarget(msg.getDDirect(),msg.getDPtX(),msg.getDPtY());
			//System.out.println(msg.getDPtX()+","+msg.getDPtY());
			tnk.setMoving(true);
			break;
		case Message.MSG_BARBETTE_TURN:
			tnk = findTank(msg.getIID());
			if (tnk == null) {
				break;
			}
			tnk.setDFireDirect(msg.getDBrDirect());
			break;
		case Message.MSG_FIRE:
			tnk = findTank(msg.getIID());
			if (tnk == null) {
				break;
			}
			tnk.setDFireDirect(msg.getDBrDirect());
			tnk.fire();
			break;
		case Message.MSG_STOP:
			/*tnk = findTank(msg.getIID());
			if (tnk == null) {
				break;
			}
			tnk.updateTank();
			tnk.setMoving(false);*/
		}
	}

	private MulitTank findTank(int id) {
		MulitTank tnk = null;
		for (int i = 0; i < vTanks.size(); i++) {
			Object obj = vTanks.get(i);
			if (obj instanceof MulitTank) {
				tnk = (MulitTank) obj;
				if (tnk.getIndex() == id) {
					break;
				}
			}
		}
		return tnk;
	}

	public void quitGame() {
		if(gmTank==null){
			return;
		}
		Message msg = Message.getMsgLogout(prpUser.getProperty("UserName"),
					((MulitTank) gmTank).getIndex());
		sender.send(msg, serverAddress, serverRecivePort);
		//System.exit(0);
	}
}

⌨️ 快捷键说明

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