一起学习

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实现网络中国象棋室(一)相关推荐

  1. java中循环输入_如何用java循环输入并且当输入0时结束循环?

    如何用java循环输入并且当输入0时结束循环? import java.util.Scanner; public class Avg { public static void main(String[ ...

  2. java hdfs 新建目录_如何用java在hdfs中创建一个新目录?

    public static void main(String[] args) throws IOException, URISyntaxException { ????????????配置config ...

  3. java绘制矩形 鼠标_如何用java在面板上用鼠标绘制出一个矩形

    展开全部 import java.awt.*; import java.awt.geom.*; import javax.swing.*; import java.awt.event.*; impor ...

  4. java 代码 内存泄露_如何用Java编写一段代码引发内存泄露

    Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有,好囧. A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中) ...

  5. java 编写 欢迎你_社团联合会——java编程协会欢迎你的加入

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 class Student {//学生的类 private int on; private String name; private int age; p ...

  6. java程序启动命令_如何用java启动windows命令行程序

    先请编译和运行下面程序: import java.util.*; import java.io.*; public class BadExecJavac2 { public static void m ...

  7. 手机java做贪吃蛇_如何用Java写一个贪吃蛇游戏

    这是一位拓胜学员用Java写贪吃蛇游戏的心得:今天课程设计终于结束了自己学java没以前学C+那么用功了觉得我学习在哪里都是个开口向上的抛物线,现在应该在右半边吧,好了进入正题. 写java贪吃蛇也是 ...

  8. 生日在java中怎么写_如何用java写代码:输入自己的生日,距离今天已过多少天,或者还有...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 从新发过 import java.util.*; import java.io.*; public class birthday{ public stat ...

  9. java mysql 输入数据库_如何用JAVA录入数据到SQL数据库

    Java可以使用e68a8462616964757a686964616f31333361326236JDBC对数据库进行读写.JDBC访问一般分为如下流程: 1.加载JDBC驱动程序: 在连接数据库之 ...

  10. java 制作简易日历_如何用Java制作一个简易日历

    简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...

最新文章

  1. 【全文搜索引擎】Elasticsearch之分词器
  2. java servlet 返回图片_SpringMVC返回图片的几种方式
  3. python filter函数 字符串_Python数组条件过滤filter函数使用示例
  4. get√—搜索微信公众号【Dotnet跨平台】指定文章的办法
  5. JAVA--自制斐波那契数列输出
  6. Java中的时间和日期(下)
  7. BZOJ 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(博弈论)
  8. 【简易教程】人体时钟 ホネホネ・クロック [時計・ブログパーツ]
  9. spring 作用域理解
  10. 一文学会LCD12864显示中文、英文、反显
  11. linux 百度网盘 限速,哈哈,我终于找到解除百度网盘账号限速的方法了,可是........
  12. 看完这篇文章,还不知道怎么学单片机,来打我!
  13. Magento常用插件整理收集
  14. 【Idea】换行快捷键
  15. 合肥工业大学机器人技术期末_合肥工业大学 机器人技术 作业和实验
  16. 模电一、半导体二极管和三极管
  17. 什么是好代码-代码整洁之道阅读笔记
  18. SOTA 激光相机标定velo2cam_calibration(待完成)
  19. 教师是唯一无法被人工智能取代的职业
  20. win10 SystemParametersInfo 设置屏保 不好使_Win10系统游戏优化

热门文章

  1. 《我的眼睛--图灵识别》第四章:基础:图片识别
  2. SpringBoot入门,快速搭建简单Web应用环境
  3. Dubbo扩展点注解之@Adaptive
  4. 基于bootstrap的二维码支付系统webAPP设计
  5. 最近心血来潮,准备更新博客
  6. 【PM】产品需求文档PRD的一般格式
  7. 生成条形码二维码DataMatrix条码.EAN码.39码.交叉25码.UPC码.128码.93码.ISBN码.Codabar等...
  8. # gazebo 仿真
  9. 物联网大赛作品-老人手环介绍
  10. 和金融男谈恋爱 vs 和程序员谈恋爱