?? server.java
字號(hào):
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Server implements Runnable, CommandListener{
/*定義舞臺(tái)*/
Display display;
/*定義父類,以供傳遞控制*/
GameMIDlet parent;
/*定義服務(wù)器端開(kāi)發(fā)的監(jiān)聽(tīng)端口*/
ServerSocketConnection scn;
/*端口連接控制*/
SocketConnection sc;
/*定義輸入流,以接收客戶端傳來(lái)的數(shù)據(jù)*/
InputStream is;
/*定義輸出流,以向客戶端發(fā)送數(shù)據(jù)*/
OutputStream os;
/*定義游戲控制類,以便實(shí)現(xiàn)游戲的初始化和控制*/
MyGameWithTiledLayerCanvas t;
/*標(biāo)記傳輸是否結(jié)束*/
boolean stop;
/*定義畫(huà)板*/
Graphics h;
/*定義個(gè)Alert以顯示版本等信息*/
Alert al;
Command exitCommand=new Command("Exit", Command.EXIT, 1);
Command exitCommand1=new Command("結(jié)束", Command.EXIT, 1);
public Server(GameMIDlet m)
{
parent=m;
/*得到父類舞臺(tái)*/
display = Display.getDisplay(parent);
/*對(duì)Alert進(jìn)行設(shè)置*/
al = new Alert("Socket Server");
al.setType(AlertType.INFO);
al.setTimeout(Alert.FOREVER);
al.setString("Version:1.0 "
+"Auther:You GanQuan "
+"Date:2004/05/29 "
+"Address:SWUST ");
al.addCommand(exitCommand);
al.setCommandListener(this);
display.setCurrent(al);
}
public void start() {
/*線程*/
Thread t = new Thread(this);
t.start();
}
public void run()
{
try{
/*服務(wù)器常駐5000端口*/
scn = (ServerSocketConnection) Connector.open("socket://:8000");
/*控制與前來(lái)請(qǐng)求的客戶端建立連接*/
sc = (SocketConnection) scn.acceptAndOpen();
/*打開(kāi)輸入流*/
is = sc.openInputStream();
/*打開(kāi)輸出流*/
os = sc.openOutputStream();
/*以傳遞值開(kāi)始游戲*/
t=new MyGameWithTiledLayerCanvas(1,os);
t.addCommand(exitCommand1);
t.setCommandListener(this);
display.setCurrent(t);
t.start();
/*不停地對(duì)數(shù)據(jù)進(jìn)行接收并解析之,直到游戲結(jié)束*/
while(true)
{
/*將字節(jié)流轉(zhuǎn)化為數(shù)據(jù)流*/
DataInputStream dis = new DataInputStream(is) ;
String sb="";
int c=0;
/*對(duì)數(shù)據(jù)的一次讀入*/
while (((c = is.read()) != '\n') && (c != -1)) {
sb=sb+(char)c;
}
if (c == -1) {
break;
}
/*數(shù)據(jù)解析還原*/
String sb1="",sb2="",sb3="",sb4="";
int size=sb.indexOf(":");
int size1=sb.indexOf(";");
int size2=sb.indexOf(",");
for(int i=0;i<size;i++)
sb1=sb1+sb.charAt(i);
for(int i=size+1;i<size1;i++)
sb2=sb2+sb.charAt(i);
for(int i=size1+1;i<size2;i++)
sb3=sb3+sb.charAt(i);
for(int i=size2+1;i<sb.length();i++)
sb4=sb4+sb.charAt(i);
Integer x1 = Integer.valueOf(sb1);
int x2 = x1.intValue();
x1=Integer.valueOf(sb2);
int y2=x1.intValue();
x1 = Integer.valueOf(sb3);
int z2 = x1.intValue();
x1 = Integer.valueOf(sb4);
int w2 = x1.intValue();
/*設(shè)置游戲控制部分的某些值以實(shí)現(xiàn)畫(huà)面的互動(dòng)*/
t.ex=x2;
t.ey=y2;
t.state1=w2;
/*如果客戶端的某個(gè)位置安了泡泡,服務(wù)器端也要安*/
if(z2!=-1)
{Bomb bomb=new Bomb(z2,t);
bomb.start();
}
}
/*當(dāng)游戲結(jié)束,對(duì)相應(yīng)資源的回收*/
t.exit();
stop();
parent.notifyDestroyed();
}
catch (IOException ioe) {
if (!stop) {
ioe.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/*對(duì)一些按紐事件的處理*/
public void commandAction(Command c, Displayable s) {
String cmd =c.getLabel();
if(cmd.equals("Exit")){
parent.notifyDestroyed();
parent.destroyApp(true);
}
else if(cmd.equals("結(jié)束")){
t.exit();
stop();
parent.notifyDestroyed();
}
}
/*資源的回收*/
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (sc != null) {
sc.close();
}
if (scn != null) {
scn.close();
}
} catch (IOException ioe) {}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -