如何用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);
}
(待续......)
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);}(待续......)
本文转自
http://www.cn-java.com/www1/?action-viewnews-itemid-1840
如何用Java实现网络中国象棋室(一)相关推荐
- 中国象棋棋盘java_如何用java swing 实现中国象棋的棋盘。棋盘就好。。。
展开全部 package com.fzhw.app; import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.G ...
- java中国象棋网络对弈,java课程设计---中国象棋对弈系统
java课程设计---中国象棋对弈系统 1 目目 录录 摘要 1 关键字 1 正文 2 1.程序设计说明. 2 1.1 程序的设计及实现 2 1.1.1搜索引擎的实现(engine包) . 2 1.1 ...
- 基于Java+Swing实现中国象棋游戏
基于Java+Swing实现中国象棋游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 前言 中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味 ...
- Java课程设计—中国象棋(源代码及视频)
你好,我是罡罡同学! 代码谱第一页忘掉心上人,最后一页...... 打赏一点钱,帮我买包辣条,继续创作,谢谢大家! 大家关注微信公众号 罡罡同学 回复中国象棋 就可以免费获得压缩包啦!! 压缩包里面内 ...
- 基于Java EE的中国象棋网上对战的设计与实现
技术:Java.JSP等 摘要:中国象棋是一种起源于中国古代的双人对战棋类游戏,广泛的流行在全国各地,是中华文化的典型代表之一,体现着中华文化的智慧和蕴含.为了传承这一重要的传统,理解其中的精髓,以及 ...
- java 网络爬虫_如何用Java实现网络爬虫
原标题:如何用Java实现网络爬虫 微信公众号"书圈"后台回复[Javapachong1],下载本例的PPT和源码 作品描述 本章作品是一个能够抓取指定网站ACM比赛信息的爬虫.A ...
- 两人对战网络中国象棋3.1具体实现
具体开发步骤: 1)新建一个Windows应用程序,项目命名为"象棋".如图5-7设计网络网络中国象棋界面.在Visual Studio .Net集成开发环境中的[解决方案资源管理 ...
- 基于python的游戏设计与实现-基于Python的网络中国象棋游戏设计与实现
基于Python的网络中国象棋游戏设计与实现 摘要中国象棋是一种家喻户晓的棋类游戏,随着互联网时代的到来,人们的娱乐方式也逐渐向PC端和移动端上发展.本文将传统的中国象棋游戏和当下的互联网技术结合作为 ...
- Java+Swing实现中国象棋游戏
目录 一.系统介绍 1.开发环境 2.技术选型 3.系统功能 二.系统展示 1.首页 2.黑棋走 3.红旗走 三.部分代码 ChineseCheseRule.java 四.其他 1.更多系统 Java ...
最新文章
- 排名前 16 的 Java 工具类,哪个你没用过?
- 不同数据库中两列字段相减(某列有空值)
- vue 取数组第一个值_vue遍历对象中的数组取值示例
- java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列
- IT职业就业-学长有话说(二)
- Nature | 我的研究对后人毫无用途:21%的学术论文自发布后从未被引用
- 测试 | 测试:你会这些命令吗?
- centos 更新源_centos6 更换yum源
- Android报错:java.lang.ClassCastException: com.github.mikephil.charting.charts.PieChart cannot be cast
- Java之链表的反转
- linux 显卡扩展坞,我的新玩意儿——Mac mini2018+Razer core(附显卡扩展坞类比图)...
- Redis布隆过滤器和布谷鸟过滤器
- 软件工程——团队答辩
- RK3066和AML8726-MX方案对比 频率与功耗 / 性能 / 方案成本
- 高性能计算(HPC)
- Mybatis 批量插入数据 关于Oracle 批量插入
- 为什么OceanBase不适合银行的三点思考
- Java高级程序设计笔记 • 【第6章 设计模式】
- 如何适应现代雇佣关系
- win8右下角网络图标不见了_大神分析win8系统网络连接图标不见了的解决办法
热门文章
- 下载Word文档的四种方法
- php 红包雨,小程序红包雨的实现示例
- 我的coding之路--实习第一个月的感悟 和 QT 入门方法
- 乔布斯:不要为明天忧虑!
- STM32Cube的FATFS+SD卡
- 账号“此电话号码无法用于进行验证“
- 大厂程序员更能放下身段,愿降薪跳槽的求职者超5成,30-35岁最多 | 美通社头条...
- 2021-2027年全球与中国客户通信管理软件行业市场前瞻与投资战略规划分析报告
- 利用Python生成漂亮的词云,云的形状由你定
- 中小型商城系统中的分类/产品属性/扩展属性的数据库设计