




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安徽工业大学 毕业设计(论文)说明书 i 装 订 线 摘 要 中国象棋网络版是一款可以实现多人同时在线的网络对弈象棋软件。 中国象棋网络版采用 c/s 架构,由跨平台的 java 语言和 mysq l 数据库开 发,在开发过程中使用了多线程、java swing、socket 编程以及 tcp 和 udp 协 议等技术。中国象棋网络版提供了:棋友状态列表,弈棋邀请,观看他人弈棋, 棋谱记录和保存,在线交流,快速注册等功能。服务端提供了:发布系统消息 提示,服务器状态显示,在线棋友管理等功能。最后,对系统进行测试表明, 系统功能达到了预期的要求,实现与同类的象棋软件如 qq 象棋类似的功能,具 有界面友好,操作简便,运行稳定的特点,完成设计要求的功能。本系统不足 之处在于没有实现人机对弈、聊天记录的本机存储,将在以后的更新版本中逐 步完善。 关键词关键词: 对弈,java,多线程 安徽工业大学 毕业设计(论文)说明书 ii 装 订 线 abstract chinese chess online is a software can support multiplayer play chess online at the same time . the chinese chess online, based on the architecture of c/s, is developed by mysql database and java, a cross-platform language. in the development, multi- thread, java swing, socket programming and tcp/udp protocol are applied. first, the newer can fast register and then get an account in the network version. the players can invite others to join, watch others playing, communicate with others online and hold chess-playing records. of course ,there exists a status bar to check the states of all chess players. here the service releases the notes of the system information, displays the state of itself, and deal with chess players online, etc. the test of the system indicates, all the expected functions have been realized. it has the similar functions just like the qq chess, an online software of kind. the interface is on good terms, and the operation is easy, and also it runs stably. however, disappointingly, the computer cant be an opponent of the players, and the users computer cant keep the chat records itself. these are both the weak points and the improvements will be made in the new version. keywords: chess-playing , java, multithreading 安徽工业大学 毕业设计(论文)说明书 iii 装 订 线 目目 录录 1.前 言 1 1.1 课题的研究目的和意义 .1 1.2 开发和运行环境 1 1.2.1 开发环境.1 1.2.2 运行环境.1 2java 和网络套接字技术 2 2.1 java简介 2 2.2 java图形技术 2 2.3 java事件响应技术 4 2.3.1 鼠标事件响应.4 2.3.2 键盘事件响应.4 2.4 网络网络通信技术 4 2.4.1 tcp.4 2.4.2 udp.4 2.4.3 socket .5 2.4.4 java 实现 .5 3.中国象棋网络版架构设计与通信设计7 3.1 中国象棋网络版架构分析与设计 7 3.2 中国象棋网络版数据通信设计与实现 7 3.2.1 通信协议选择.7 3.2.2 数据类型分析.9 3.2.3 数据格式设计11 3.2.4 数据通信与处理伪码示例13 4中国象棋网络版客户端实现16 4.1 客户端基础架构 .16 4.2 客户端 gui 设计 .16 4.2.1 弈棋主面板16 4.2.2 用户列表面板17 4.2.3 棋谱记录面板17 4.2.4 用户交流面板17 4.3 客户端类设计 .18 4.3.1 chessboardp 18 4.3.2 userp 18 4.3.3 chessstatep 19 4.3.4 chatp 19 4.3.5 数据处理相关类19 4.4 客户端主要算法伪码示例 .20 4.4.1 棋子和棋盘状态维护算法简介20 4.4.2 棋盘规则马规则伪码示例20 安徽工业大学 毕业设计(论文)说明书 iv 装 订 线 4.4.3 棋子选择和移动伪码示例20 4.4.4 棋谱生成部分伪码示例21 4.4.5 棋局结果判定伪码示例22 4.4.6 通信数据处理和分发算法简介22 4.4.7 棋子选中闪烁算法简介22 5.中国象棋网络版服务器端实现.23 5.1 服务器端基础架构 .23 5.2 服务器端 gui 设计 .24 5.3 服务器端类设计 .25 5.3.1 servergui 25 5.3.2 serverlistener .25 5.3.3 chessroom 26 5.3.4 databaseinterface 26 5.4 数据库相关开发 .26 5.4.1 数据库需求分析26 5.4.2 数据库表设计26 5.5 服务器端主要算法伪码示例 .27 5.5.1 登录注册时与数据库交互伪码示例27 5.5.2 弈棋聊天用户列表维护数据转发算法简介28 5.5.3 md5 加密产生密匙伪码示例28 5.5.4 踢用户下线伪码示例28 6中国象棋网络版运行测试30 6.1.客户端功能测试 .30 6.1.1 用户上线响应异常30 6.1.2 弈棋过程中将可以出九宫异常31 6.2 服务器端测试 .32 6.2.1 用户下线后服务器在线用户数统计异常32 6.2.2 对正在弈棋的用户强制下线异常33 6.3 测试总结 .33 结束语 34 致 谢 35 参考文献.36 附 录.37 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 1 页 装 订 线 1.前 言 1.1 课题的研究目的和意义 本课题的目的是采用 java 语言编写实现网络象棋对弈软件,实现中国象棋 的网络对弈,拥有用户列表、棋谱查看保存、在线交流等功能。 虽然现在已经有了许多网络对弈软件,其中大多数都很优秀,所以本课题 不作对比性开发。通过中国象棋网络版的开发熟练掌握在 eclipse 下的 java 开 发,详细了解 socket 网络套接字技术、tcp 和 udp 协议,掌握 mysql 应用。 1.2 开发和运行环境 1.2.1 开发环境 操作系统 windows7 开发平台 myecilpse 8.5 jdk1.6.0_17 数据库 mysql5.1 mysql workbench 5.2 ce 1.2.2 运行环境 window 7、windows xp 等各类支持 java 的操作系统。 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 2 页 装 订 线 2java 和网络套接字技术 2.1 java 简介 java,是由 sun microsystems 公司于 1995 年 5 月推出的 java 程序设计语 言和 java 平台的总称。 java 平台由 java 虚拟机(java virtual machine)和 java 应用编程 接口(application programming interface、简称 api)构成。java 应 用编程接口为 java 应用提供了一个独立于操作系统的标准接口,可分为基 本部分和扩展部分。在硬件或操作系统平台上安装一个java 平台之后, java 应用程序就可运行。现在 java 平台已经嵌入了几乎所有的操作系统。 这样 java 程序可以只编译一次,就可以在各种系统中运行。 java 应用编 程接口已经从 1.1x 版发展到 1.2 版。目前常用的 java 平台基于 java1.5,最近版本为 java1.7。 java 分为三个体系 javase(java2 platform standard edition,java 平台标准版),javaee(java 2 platform,enterprise edition,java 平台 企业版),javame(java 2 platform micro edition,java 平台微型版 )。 本软件采用的是 javase。 java 是一种简单的,面向对象的,分布式的,解释型的,健壮安全的, 结构中立的,可移植的,性能优异、多线程的动态语言。 eclipse 是一个开放源代码的、基于 java 的可扩展开发平台。就其 本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。 幸运的是,eclipse 附带了一个标准的插件集,包括 java 开发工具 (java development tools,jdt) 。 2.2 java 图形技术 java 是面向对象的语言,运用 java 开发图形界面相当便捷, java 提 供了 jframe、jpanel、jbutton、jlabel 等窗口和组件。 java 采用了触发 更新的方式更新界面,如果我们需要在界面上添加上自己的图形则只需要重 写 paint 方法。 awt(abstract windowing toolkit),中文译为抽象窗口工具包,是 java 提供的用来建立和设置 java 的图形用户界面的基本工具。 awt 由 java 中的 java.awt 包提供,里面包含了许多可用来建立与平台无关的图形用户界 面(gui)的类,这些类又被称为组件 (components)。 抽象窗口工具包 (abstract windowing toolkit) (awt)是 java 的平 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 3 页 装 订 线 台独立的窗口系统, 图形和用户界面器件工具包。 awt 是 java 基础类 (jfc)的一部分,为 java 程序提供图形用户界面 (gui)的标准 api。 awt 提供了 java applet 和 java application 中可用的用户图形界面 gui 中的基本组件(components)。由于 java 是一种独立于平台的程序设计语 言,但 gui 却往往是依赖于特定平台的, java 采用了相应的技术使得 awt 能提供给应用程序独立于机器平台的接口,这保证了同一程序的gui 在不同 机器上运行具有类似的外观(不一定完全一致)。 java1.0 的 awt(旧 awt)和 java1.1 以后的 awt(新 awt)有着很大的区别, 新的 awt 克服了旧 awt 的很多缺点,在设计上有较大改进,使用也更方便, 这里主要介绍新的 awt, 但在 java1.1 及以后版本中旧的 awt 的程序也可运 行。 抽象窗口工具包 awt (abstract window toolkit) 是 api 为 java 程 序提供的建立图形用户界面 gui (graphics user interface)工具集,awt 可用于 java 的 applet 和 applications 中。它支持图形用户界面编程的功 能包括: 用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色 和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏 幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。 java 释出的时候,awt 作为 java 最弱的组件受到不小的批评。最根本 的缺点是 awt 在原生的用户界面之上仅提供了一个非常薄的抽象层。例如, 生成一个 awt 的复选框会导致 awt 直接调用下层原生例程来生成一个复选框。 不幸的是,一个 windows 平台上的复选框同 macos 平台或者各种 unix 风格 平台上的复选框并不是那么相同。 这种糟糕的设计选择使得那些拥护 java“一次编写,到处运行 (write once, run anywhere) ”信条的程序员们过得并不舒畅,因为 awt 并不能保证他们的应用在各种平台上表现得有多相似。一个awt 应用可能在 windows 上表现很好可是到了 macintosh 上几乎不能使用,或者正好相反。 在 90 年代,程序员中流传着一个笑话 :java 的真正信条是“一次编写,到 处测试 (write once, test everywhere) ” 。导致这种糟糕局面的一个可能 原因据说是 awt 从概念产生到完成实现只用了一个月。 在第二版的 java 开发包中,awt 的器件很大程度上被 swing 工具包替 代。swing 通过自己绘制器件而避免了 awt 的种种弊端:swing 调用本地图形 子系统中的底层例程,而不是依赖操作系统的高层用户界面模块。 swing 是一个用于开发 java 应用程序用户界面的开发工具包。它以抽象窗 口工具包(awt)为基础使跨平台应用程序可以使用任何可插拔的外观风格。 swing 开发人员只用很少的代码就可以利用 swing 丰富、灵活的功能和模块化 组件来创建优雅的用户界面。 工具包中所有的包都是以 swing 作为名称,例如 javax.swing,javax.swing.event。 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 4 页 装 订 线 2.3 java 事件响应技术 java 事件响应技术采用监听事件产生组件的事件产生来响应事件。 2.3.1 鼠标事件响应 鼠标操作可以产生 actionevent,mouseevent,mousewheelevent 事件,我 们可以创建一个继承 actionlistener 接口的 myactionlistener 类用来监听鼠 标产生的 actionevent 事件,在 myactionlistener 中重写 actionperformed 方 法,在此方法中可以加入当鼠标产生 actionevent 事件时的响应操作,我们通 过创建另一个继承 mouselistener 接口的 mymouselistener 类用来监听鼠标产 生的 mouseevent,在 mymouselistener 中重写 mouseclicked 方法,在此方法 中可以加入鼠标产生 mouseevent 事件时的响应操作。 2.3.2 键盘事件响应 键盘操作可以产生 keyevent 事件,我们可以创建一个继承 keylistener 接 口的 mykeylistener 类用来监听键盘产生的 keyevent 事件,在 mykeylistener 中重写 keypressed 方法,在此方法中可以加入键盘产生 keyevent 事件时的相 应操作。 2.4 网络网络通信技术 2.4.1 tcp tcp:transmission control protocol 传输控制协议 tcp 是一种面向连接 (连接导向)的、可靠的、基于字节流的运输层(transport layer)通信协议, 由 ietf 的 rfc 793 说明(specified) 。在简化的计算机网络 osi 模型中,它完 成第四层传输层所指定的功能。 tcp 是 tcp/ip 体系中非常复杂的一个协议 ,tcp 的最主要的特点有: 1) tcp 是面向连接的运输层协议。 2) 每一条 tcp 连接只能有两个端点,每一条连接只能是点对点的。 3) tcp 提供可靠交付的服务。 4) tcp 提供全双工通信。 5) 面向字节流。 2.4.2 udp udp 是 user datagram protocol 的简称, 中文名是用户数据包协议,是 osi 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传 送服务。它是 ietf rfc 768 是 udp 的正式规范。 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 5 页 装 订 线 用户数据报协议 udp 只在 ip 的数据报服务之上增加了很少一点的功能,这 就是复用和分用的功能以及差错检测的功能。udp 的主要特点是: 1) udp 是无连接的,即发送数据之前不需要建立连接,因此减少了开销 和发送数据之前的时延。 2) udp 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持 复杂的连接状态表。 3) udp 是面向报文的。 2.4.3 socket socket 的英文原义是“孔”或“插座” 。作为 4bds unix 的进程通信机制, 取后一种意思。通常也称作“套接字“,用于描述 ip 地址和端口,是一个通信链 的句柄。所谓 socket 通常也称作 “套接字“,应用程序通常通过 “套接字“向 网络发出请求或者应答网络请求。 如何使用 socket 开发一个 server-client 模型的程序。 服务器,使用 serversocket 监听指定的端口,端口可以随意指定(由 于 1024 以下的端口通常属于保留端口,在一些操作系统中不可以随意使用, 所以建议使用大于 1024 的端口) ,等待客户连接请求,客户连接后,会话产 生;在完成会话后,关闭连接。 客户端,使用 socket 对网络上某一个服务器的某一个端口发出连接请 求,一旦连接成功,打开会话;会话完成后,关闭socket。客户端不需要 指定打开的端口,通常临时的、动态的分配一个1024 以上的端口。 socket 接口是 tcp/ip 网络的 api,socket 接口定义了许多函数或例程, 程序员可以用它们来开发 tcp/ip 网络上的应用程序。要学 internet 上的 tcp/ip 网络编程,必须理解 socket 接口。 socket 接口设计者最先是将接 口放在 unix 操作系统里面的。如果了解 unix 系统的输入和输出的话,就 很容易了解 socket 了。网络的 socket 数据传输是一种特殊的 i/o,socket 也是一种文件描述符。 socket 也具有一个类似于打开文件的 函数调用 socket(),该函数返回一个整型的 socket 描述符,随后的连接建 立、数据传输等操作都是通过该 socket 实现的。 2.4.4 java 实现 java 提供了灵活方便的类实现 socket 通信, 包中拥有丰富 的 api,与 tcp 和 udp 相关的有。 inetaddress:用来封装 ip 地址的类。 serversocket:用来产生服务器套接字实例的类。 socket;用来产生客户端套接字实例的类。 datagrampacket:用来产生数据包实例的类。 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 6 页 装 订 线 datagramsocket:用来实现 udp 套接字的类。 另外 java.io 提供了 inputstream 和 outputstream 虚类实现对字节流 操作的封装。 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 7 页 装 订 线 3.3.中国象棋网络版架构设计与通信设计 3.1 中国象棋网络版架构分析与设计 本软件要实现多用户在线弈棋,所以采用 c/s 架构,服务器端和客户端分 别完成各自的功能。 服务器需要实现登录注册和弈棋通信两大功能模块,提供登录、注册、数 据转发、在线用户数据维护、建立弈棋等服务功能。将服务器分为两大模块是 因为这两个模块可以完全分离,互不影响,独立运行,保证了登录模块出现异 常不会影响到已在线用户的用户体验,提高了服务器的可用性。 客户端需要实现登录、注册、弈棋、用户列表、实时交流和棋局状态记录 显示六大功能,需要设计登录、注册、弈棋、用户列表维护、实时交流、棋局 状态记录显示、登录注册和弈棋通信八大模块。 3.2 中国象棋网络版数据通信设计与实现 3.2.1 通信协议选择 经架构分析将登录注册模块与弈棋的通信模块分开设计,又根据两个模块 对网络通信可靠性和即时性要求不同,所以设计登录模块的网络层通信协议为 udp 协议,弈棋通信模块的网络层通信协议为 tcp 协议。 效率分析: udp 协议是无连接、不需要包检测和重传机制的,优点是网络通信效率高。 而 tcp 协议是面向连接的,需经过三次握手,拥有包检测和重传机制,保证了 数据完整和正确性,优点是可靠。 登录注册模块需要提供一个高效但不一定可靠的响应,即该模块允许在通 信过程中丢包。每一次登录注册请求与响应只产生一个往返的数据报,udp 协 议的无连接特性保证的数据通信的高效性。面对恶意登录请求,如果选择 tcp 协议,大量的建立连接会占用过多的系统资源,产生很高的服务器负载,影响 服务质量,降低客户的用户体验。所以登录注册模块选择 udp 协议可以带来一 个高效益的服务响应。 弈棋通信模块需要给客户提供一个高可靠性和稳定性的连接,即不允许在 通信过程中发生数据丢失而不处理的事件。如果采用 udp 协议需要在服务器应 用中添加包检测与重传功能,增加了服务器负载。且弈棋通信是一个较长的数 据通信过程,使用 udp 协议并不能很大提供数据通信效率,而 tcp 协议很好的 提供了包检测和重传机制,保证了数据通信的高可靠性和稳定性。 服务器与客户端的典型数据通信与处理流程图如图 3.1。 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 8 页 装 订 线 图 3.1 服务器与客户端网络通信流程图 客户端客户端 底层 数据 发送 和接 收 登录 和注 册监 听 底层 数据 发送 和接 收 登录和注册监听 udptcp 登 录 模 块 注 册 模 块 登录和注册处 理模块 数据库 数据预处理和 分发 数据预处理和分发模块 棋 盘 模 块 用 户 列 表 模 块 聊 天 模 块 聊天和 用户状 态处理 模块 棋 局 处 理 模 块 服务器端服务器端 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 9 页 装 订 线 3.2.2 数据类型分析 要实现在线对弈,就需要有数据的交互,根据预设的功能需要最基础的就 有登录、登出、棋子移动、聊天等数据的通信,还有其它一些如:棋子的选择、 用户列表更新、棋谱的传输等数据通信。如果不加分类很容易产生混乱,所以 根据数据所属的不同模块将这些数据进行分类。 数据传输方式以“utf-8”字符编码明文传输,其消息字符串 message 中的 第一个字符为系统消息,将第一个字符 char 的 2 个字节 16bit 分为 4 级消息 char“+ 用户积分 用户状态 8-16 个 “;“为分隔符,分割 每个用户的信息 多个 服务器发送给旁观者的棋盘状态是一个由 24 个字符组成的字符串: 第一个字符为系统消息 其余 23 个字符分别携带棋盘上的 90 个位置的棋子状态 其中空子位为0 1-7代表黑方棋子:1 车 8-14代表红方棋子:8 车 2 马 9 马 3 象 10 相 4 士 11 仕 5 将 12 帅 6 炮 13 炮 7 兵 14 卒 xxxxxxxxxxxx xxx xxxx xxxx xxxx xxxx 0 001 0011 0000 0000 xxxx xxxx xxxx xxxx 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 11 页 装 订 线 3.2.3 数据格式设计 根据 3.2.2 节中对数据格式的分析,设计出系统消息格式(详见表 3.1) 。 给不同的功能模块设计不同的系统命令(如表 3.1 中 chessboard 中第一级命令 格式为 chessboardpane 0x1000/0001,其中 0x1000 表示此命令的十六进制数值, 0001 表示为此命令的部分二进制数值,chessboradpane 表示此命令所实现的消 息内容) 。 表 3.1 系统消息格式设计 消息级别 消息类型 第一级第二级第三级第四级 cb_strat 0x100/0001 00000000 cb_choice 0x200/0010 00000000 cb_move 0x300/0011 00000000 cb_result 0x400/0100 00000000 cb_chessboard 0x500/0101 00000000 cb_lookonchoice 0x600/0110 00000000 chessboard (棋盘模 块系统消 息) chessboardpan e 0x1000/0001 cb_lookonmove 0x700/0111 00000000 cp_server 0x100/000100000000 chat (聊天模 块系统消 息) chatpane 0x2000/0010 cp_normaltalk 0x200/0010 00000000 u_login_aceept 0x10 u_online 0x100/0001 ulogin_refuse 0x20 0000 u_offlne 0x100/0001 00000000 u_user 0x100/0001 00000000 free 0x1 u_ustateplayin 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 12 页 装 订 线 g 0x2 0x10 lookon 0x3 u_u_add 0x20 0000 u_userupdata 0x100/0001 u_udelete 0x30 0000 u_invite 0x100/0001 00000000 acceptinvite 0x10 u_inviteack 0x100/0001 refseinvite 0x20 0000 u_invited 0x100/0001 00000000 u_lookon 0x100/0001 00000000 userlist (用户列 表模块系 统消息) userlist 0x3000/0011 u_nolookon 0x100/0001 00000000 l_accept 0x100 l_refuse 0x200 login publicpublic classclass rule privateprivate chessboard chessboard; privateprivate booleanboolean correct = falsefalse; privateprivate intint clr = 0; publicpublic rule() publicpublic voidvoid setclr(intint clr) ifif (clr != 1 publicpublic voidvoid setchessboard(chessboard chessboard) thisthis.chessboard = chessboard; publicpublic booleanboolean isself(intint chess) ifif (clr = 1 ifif (clr = 2 returnreturn falsefalse; publicpublic booleanboolean isother(intint chess) ifif (clr = 1 ifif (clr = 2 returnreturn falsefalse; 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 38 页 装 订 线 publicpublic booleanboolean won(chess board) ifif (clr = chessboard.c_black) forfor (intint i = 0; i 5 | destpointy 5 | destpointy 2) returnreturn; ifif (sourcepointx + 1 = destpointx returnreturn; ifif (sourcepointx - 1 = destpointx returnreturn; ifif (sourcepointx = destpointx returnreturn; ifif (sourcepointx = destpointx returnreturn; returnreturn; privateprivate voidvoid cannonrule(intint sourcepointx, intint sourcepointy, intint destpointx, intint destpointy, chess board) correct = falsefalse; intint temp = 0; whilewhile (truetrue) ifif (sourcepointx != destpointx ifif (sourcepointy = destpointy) ifif (sourcepointx 1 | boarddestpointxdestpointy .getchessobject() = 0) correct = falsefalse; returnreturn; ifif (temp = 1 ifif (temp = 0 correct = truetrue; elseelse forfor (intint i = destpointx + 1; i 1 | boarddestpointxdestpointy .getchessobject() = 0) correct = falsefalse; returnreturn; ifif (temp = 1 ifif (temp = 0 correct = truetrue; elseelse ifif (sourcepointy 1 | boarddestpointxdestpointy .getchessobject() = 0) correct = falsefalse; returnreturn; ifif (temp = 1 ifif (temp = 0 correct = truetrue; elseelse forfor (intint i = destpointy + 1; i 1 | boarddestpointxdestpointy .getchessobject() = 0) 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 46 页 装 订 线 correct = falsefalse; returnreturn; ifif (temp = 1 ifif (temp = 0 correct = truetrue; breakbreak; returnreturn; privateprivate voidvoid pawnrule(intint sourcepointx, intint sourcepointy, intint destpointx, intint destpointy, chess board) correct = falsefalse; ifif (sourcepointx - 1 = destpointx returnreturn; ifif (sourcepointx visiters; privateprivate linkedlist visitersdataia; privateprivate intint chessdesknum; privateprivate chessdeskmanage chessdeskmanage; publicpublic staticstatic finalfinal intint blackplayer = 1; publicpublic staticstatic finalfinal intint redplayer = 2; publicpublic chessdesk(user redp, user blackp, intint chessdesknum, chessdeskmanage cdm) chessboard = newnew chessboard(); thisthis.redp = redp; thisthis.blackp = blackp; reddataia = redp.getdataia(); blackdataia = blackp.getdataia(); visiters = newnew linkedlist(); visitersdataia = newnew linkedlist(); thisthis.chessdesknum = chessdesknum; thisthis.chessdeskmanage = cdm; publicpublic voidvoid addvisiter(user visiter) visiter.lookon(chessdesknum); visiters.add(visiter); visitersdataia.add(visiter.getdataia(); visiter .getdataia() .sendmessage( newnew character( (charchar) (messageconstants.userlist + messageconstants.u_lookon) .tostring(); visiter .getdataia() 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 48 页 装 订 线 .sendmessage( (charchar) (messageconstants.chessboardpane + messageconstants.cb_chessboard) + chessboard.getboard(); visiter .getdataia() .sendmessage( (charchar) (messageconstants.chessstate + messageconstants.cs_inituser) + redp.getname() + “;“ + blackp.getname(); publicpublic voidvoid removevister(user visiter) visiter.nolookon(); visiters.remove(visiter); visitersdataia.remove(visiter.getdataia(); visiter .getdataia() .sendmessage( (charchar) (messageconstants.userlist + messageconstants.u_nolookon) + “); publicpublic voidvoid removeallvisiter() iterator iter = visiters.listiterator(); whilewhile (iter.hasnext() iter.next().nolookon(); visiters = nullnull; visitersdataia = nullnull; publicpublic voidvoid startplay() charchar commandchar = messageconstants.chessboardpane + messageconstants.cb_strat; reddataia.sendmessage(commandchar + “ + chessdeskmanage.red); blackdataia.sendmessage(commandchar + “ + chessdeskmanage.black); reddataia.setchessdesk(thisthis); blackdataia.setchessdesk(thisthis); cpmessage(newnew character( (charchar) (messageconstants.chatpane + messageconstants.cp_server) .tostring() + “对弈开始“); redp 安徽工业大学 毕业设计(论文)说明书 共 51 页 第 49 页 装 订 线 .getdataia() .sendmessage( (charchar) (messageconstants.chessstate + messageconstants.cs_inituser) + redp.getname() + “;“ + blackp.getname(); blackp .getdataia() .sendmessage( (charchar) (messageconstants.chessstate + messageconstants.cs_inituser) + redp.getname() + “;“ + blackp.getname(); publicpublic voidvoid endplay(intint clr) string message = newnew character( (charchar) (messageconstants.chatpane + messageconstants.cp_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 10820:2025 EN Fine ceramics (advanced ceramics,advanced technical ceramics) - Ultraviolet irradiation equipment using UV-A LEDs and optical radiometry for performance t
- 【正版授权】 ISO 3054:2025 EN Essential oil of lavandin Abrial (Lavandula x intermedia Emeric ex Loisel.‘abrial’) (ex Lavandula angustifolia Mill. x Lavandula latifolia Medik.‘abrial’)
- GB/T 28570-2025水轮发电机组状态在线监测系统技术导则
- 粮油食品检验人员高频难、易错点题及参考答案详解【培优】
- 2024年测绘职业技能鉴定能力检测试卷附完整答案详解(典优)
- 2025年药店相关技能鉴定综合提升测试卷【考点精练】附答案详解
- 新生儿腹泻常见病因与治疗
- 布病合同(标准版)
- 传染病护理中医疗废物分类处理与管理
- 土特产加盟合同(标准版)
- 2025年注册安全工程师考试(初级)安全生产法律法规试卷及答案
- 支付终端管理办法
- 公共艺术-音乐篇(中职公共艺术)完整版全套教学课件
- MES运行管理办法
- 平面构成在服装设计中的运用
- 集团招商引资管理办法
- 2025年天文地理知识竞赛题库及答案
- 园区工作薪酬管理办法
- 劳动仲裁流程课件培训
- 睑腺炎的护理与治疗
- 2025至2030中国空气制水机行业市场发展分析及发展前景与投融资报告
评论
0/150
提交评论