新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > JAVA > 正文:如何用Java实现网络中国象棋室

如何用Java实现网络中国象棋室

新客网 XKER.COM 2008-04-21 来源:新客网整理转载 收藏本文

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{

Server
Socket 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);
}

共2页: 上一页 [1] [2] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐