程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 如何用Java實現網絡中國象棋室(一)

如何用Java實現網絡中國象棋室(一)

編輯:關於JAVA

Java語言的簡潔和完美,以及java網絡功能的優越性是每個java體驗者所體會的感受。筆者在閒暇之余,開發出網絡中國象棋(以下簡稱象棋)程序,在此願與廣大Java編程愛好者共享,做以介紹供大家參考。如有問題可與我聯系:

網絡象棋程序主要功能有象棋室(多象棋桌)功能、觀棋功能、悔棋功能、下棋聊天功能、調取殘局文件對弈功能、方便的人性化圖形界面操作等功能。由象棋服務和客戶端Applet組成,Applet實現象棋室的顯示,象棋桌的顯示和走步判斷以及用戶的一些操作如悔棋、認輸等功能的實現。為考慮資源使用情況和界面美觀,象棋桌采用使用高效和優化的雙緩沖圖形界面處理技術,使用戶操作更舒適,更方便。以下依次詳細介紹象棋服務和客戶端的實現過程。

首先介紹象棋服務,它是運行在服務器端的用於處理和轉發用戶登錄到象棋室,進入離開游戲桌,走棋,悔棋,認輸,退出等等應用。

1、登錄處理:

//////////////////定義登錄連接處理類

package sunstudio.chess.event;

import Java.util.*;

import Java.Net.*;

import Java.io.*;

import sunstudio.util.*;

import sunstudio.*;

public class ChessLogin implements Runnable{

ServerSocket ss=null;

boolean isrunning=true;

Vector listeners=new Vector();

int guestid=0;

public ChessLogin(ChessServer s){

ss=s.ss;

addLoginListener(s);

new Thread(this).start();

}

public void run(){

while(isrunning){

try{

Socket socket=ss.accept();

String un=chkLogin(socket.getInputStream());

if(un!=null)notifyListener(guestid++,un,socket);

}catch(IOException e){}

}

}

public void addLoginListener(LoginListener l){

listeners.addElement(l);

}

void notifyListener(int userid,String username,Socket sock){

LoginEvent evt=new LoginEvent(userid,username,sock);

for(Enumeration enu=listeners.elements();enu.hasMoreElements();){

((LoginListener)enu.nextElement()).onLoginEvent(evt);

}

}

public String chkLogin(InputStream is)throws IOException{

byte[] head=new byte[12];

HttpInputStream.readBytes(is,12,head);

int cmdtype=head[0];

int totalsize=Convert.byteToShort(head[1],head[2]);

if(totalsize==0)return null;

byte[] data=new byte[totalsize];

HttpInputStream.readBytes(is,totalsize,data);

//System.out.print("type="+cmdtype+",totalsize="+totalsize+",username="+parseLoginData(data));

return parseLoginData(data);

}

public String parseLoginData(byte[] d){

return new String(d);

}

public static int byteToInt(byte j,byte k,byte m,byte n){

int a =j&0xff;

int b =k&0xff;

int c =m&0xff;

int d =n&0xff;

return (d<<24|c<<16|b<<8|a);

}

}

//////////////////定義登錄連接事件類

package sunstudio.chess.event;

import Java.Net.*;

public class LoginEvent{

public int userID;

public String username;

public Socket socket;

public LoginEvent(int userID,String username,Socket sock){

this.userID=userID;

this.username=username;

this.socket=sock;

}

}

//////////////////登錄監聽接口

package sunstudio.chess.event;

public interface LoginListener{

public void onLoginEvent(LoginEvent evt);

}

(待續......)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved