📄 mulitmaingamethread.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 + -