用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);
}
(待续......)
如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)如何用Java实现网络中国象棋室(一)
用java编写中国象棋_如何用Java实现网络中国象棋室(一)相关推荐
- java中循环输入_如何用java循环输入并且当输入0时结束循环?
如何用java循环输入并且当输入0时结束循环? import java.util.Scanner; public class Avg { public static void main(String[ ...
- java hdfs 新建目录_如何用java在hdfs中创建一个新目录?
public static void main(String[] args) throws IOException, URISyntaxException { ????????????配置config ...
- java绘制矩形 鼠标_如何用java在面板上用鼠标绘制出一个矩形
展开全部 import java.awt.*; import java.awt.geom.*; import javax.swing.*; import java.awt.event.*; impor ...
- java 代码 内存泄露_如何用Java编写一段代码引发内存泄露
Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有,好囧. A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中) ...
- java 编写 欢迎你_社团联合会——java编程协会欢迎你的加入
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 class Student {//学生的类 private int on; private String name; private int age; p ...
- java程序启动命令_如何用java启动windows命令行程序
先请编译和运行下面程序: import java.util.*; import java.io.*; public class BadExecJavac2 { public static void m ...
- 手机java做贪吃蛇_如何用Java写一个贪吃蛇游戏
这是一位拓胜学员用Java写贪吃蛇游戏的心得:今天课程设计终于结束了自己学java没以前学C+那么用功了觉得我学习在哪里都是个开口向上的抛物线,现在应该在右半边吧,好了进入正题. 写java贪吃蛇也是 ...
- 生日在java中怎么写_如何用java写代码:输入自己的生日,距离今天已过多少天,或者还有...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 从新发过 import java.util.*; import java.io.*; public class birthday{ public stat ...
- java mysql 输入数据库_如何用JAVA录入数据到SQL数据库
Java可以使用e68a8462616964757a686964616f31333361326236JDBC对数据库进行读写.JDBC访问一般分为如下流程: 1.加载JDBC驱动程序: 在连接数据库之 ...
- java 制作简易日历_如何用Java制作一个简易日历
简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...
最新文章
- 【全文搜索引擎】Elasticsearch之分词器
- java servlet 返回图片_SpringMVC返回图片的几种方式
- python filter函数 字符串_Python数组条件过滤filter函数使用示例
- get√—搜索微信公众号【Dotnet跨平台】指定文章的办法
- JAVA--自制斐波那契数列输出
- Java中的时间和日期(下)
- BZOJ 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(博弈论)
- 【简易教程】人体时钟 ホネホネ・クロック [時計・ブログパーツ]
- spring 作用域理解
- 一文学会LCD12864显示中文、英文、反显
- linux 百度网盘 限速,哈哈,我终于找到解除百度网盘账号限速的方法了,可是........
- 看完这篇文章,还不知道怎么学单片机,来打我!
- Magento常用插件整理收集
- 【Idea】换行快捷键
- 合肥工业大学机器人技术期末_合肥工业大学 机器人技术 作业和实验
- 模电一、半导体二极管和三极管
- 什么是好代码-代码整洁之道阅读笔记
- SOTA 激光相机标定velo2cam_calibration(待完成)
- 教师是唯一无法被人工智能取代的职业
- win10 SystemParametersInfo 设置屏保 不好使_Win10系统游戏优化
热门文章
- 《我的眼睛--图灵识别》第四章:基础:图片识别
- SpringBoot入门,快速搭建简单Web应用环境
- Dubbo扩展点注解之@Adaptive
- 基于bootstrap的二维码支付系统webAPP设计
- 最近心血来潮,准备更新博客
- 【PM】产品需求文档PRD的一般格式
- 生成条形码二维码DataMatrix条码.EAN码.39码.交叉25码.UPC码.128码.93码.ISBN码.Codabar等...
- # gazebo 仿真
- 物联网大赛作品-老人手环介绍
- 和金融男谈恋爱 vs 和程序员谈恋爱