计算机中国象棋网络对弈软件毕业设计.docx

上传人:b****8 文档编号:23971899 上传时间:2023-05-23 格式:DOCX 页数:76 大小:1.43MB
下载 相关 举报
计算机中国象棋网络对弈软件毕业设计.docx_第1页
第1页 / 共76页
计算机中国象棋网络对弈软件毕业设计.docx_第2页
第2页 / 共76页
计算机中国象棋网络对弈软件毕业设计.docx_第3页
第3页 / 共76页
计算机中国象棋网络对弈软件毕业设计.docx_第4页
第4页 / 共76页
计算机中国象棋网络对弈软件毕业设计.docx_第5页
第5页 / 共76页
点击查看更多>>
下载资源
资源描述

计算机中国象棋网络对弈软件毕业设计.docx

《计算机中国象棋网络对弈软件毕业设计.docx》由会员分享,可在线阅读,更多相关《计算机中国象棋网络对弈软件毕业设计.docx(76页珍藏版)》请在冰豆网上搜索。

计算机中国象棋网络对弈软件毕业设计.docx

计算机中国象棋网络对弈软件毕业设计

计算机中国象棋网络对弈软件

摘要

中国象棋网络版是一款可以实现多人同时在线的网络对弈象棋软件。

中国象棋网络版采用C/S架构,由跨平台的Java语言和MySQL数据库开发,在开发过程中使用了多线程、javaswing、Socket编程以及TCP和UDP协议等技术。

中国象棋网络版提供了:

棋友状态列表,弈棋邀请,观看他人弈棋,棋谱记录和保存,在线交流,快速注册等功能。

服务端提供了:

发布系统消息提示,服务器状态显示,在线棋友管理等功能。

最后,对系统进行测试表明,系统功能达到了预期的要求,实现与同类的象棋软件如QQ象棋类似的功能,具有界面友好,操作简便,运行稳定的特点,完成设计要求的功能。

本系统不足之处在于没有实现人机对弈、聊天记录的本机存储,将在以后的更新版本中逐步完善。

关键词:

对弈,Java,多线程

Abstract

Chinesechessonlineisasoftwarecansupportmultiplayerplaychessonlineatthesametime.

Thechinesechessonline,basedonthearchitectureofC/S,isdevelopedbyMySQLdatabaseandJava,across-platformlanguage.Inthedevelopment,multi-thread,Javaswing,SocketprogrammingandTCP/UDPprotocolareapplied.First,thenewercanfastregisterandthengetanaccountinthenetworkversion.Theplayerscaninviteotherstojoin,watchothersplaying,communicatewithothersonlineandholdchess-playingrecords.Ofcourse,thereexistsastatusbartocheckthestatesofallchessplayers.Heretheservicereleasesthenotesofthesysteminformation,displaysthestateofitself,anddealwithchessplayersonline,etc.Thetestofthesystemindicates,alltheexpectedfunctionshavebeenrealized.IthasthesimilarfunctionsjustliketheQQchess,anonlinesoftwareofkind.Theinterfaceisongoodterms,andtheoperationiseasy,andalsoitrunsstably.However,disappointingly,thecomputercan'tbeanopponentoftheplayers,andtheusers'computercan'tkeepthechatrecordsitself.Theseareboththeweakpointsandtheimprovementswillbemadeinthenewversion.

Keywords:

chess-playing,Java,Multithreading

1.前言

1.1课题的研究目的和意义

本课题的目的是采用Java语言编写实现网络象棋对弈软件,实现中国象棋的网络对弈,拥有用户列表、棋谱查看保存、在线交流等功能。

虽然现在已经有了许多网络对弈软件,其中大多数都很优秀,所以本课题不作对比性开发。

通过中国象棋网络版的开发熟练掌握在Eclipse下的Java开发,详细了解Socket网络套接字技术、TCP和UDP协议,掌握MySQL应用。

1.2开发和运行环境

1.2.1开发环境

操作系统Windows7

开发平台MyEcilpse8.5

JDK1.6.0_17

数据库MySQL5.1

MySQLWorkbench5.2CE

1.2.2运行环境

Window7、Windowsxp等各类支持Java的操作系统。

2.Java和网络套接字技术

2.1Java简介

Java,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。

Java平台由Java虚拟机(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface、简称API)构成。

Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。

在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。

现在Java平台已经嵌入了几乎所有的操作系统。

这样Java程序可以只编译一次,就可以在各种系统中运行。

Java应用编程接口已经从1.1x版发展到1.2版。

目前常用的Java平台基于Java1.5,最近版本为Java1.7。

Java分为三个体系JavaSE(Java2PlatformStandardEdition,java平台标准版),JavaEE(Java2Platform,EnterpriseEdition,java平台企业版),JavaME(Java2PlatformMicroEdition,java平台微型版)。

本软件采用的是JavaSE。

Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。

2.2Java图形技术

Java是面向对象的语言,运用Java开发图形界面相当便捷,Java提供了JFrame、JPanel、JButton、JLabel等窗口和组件。

Java采用了触发更新的方式更新界面,如果我们需要在界面上添加上自己的图形则只需要重写paint方法。

AWT(AbstractWindowingToolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。

AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件(components)。

  抽象窗口工具包(AbstractWindowingToolkit)(AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包。

AWT是Java基础类(JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。

  AWT提供了JavaApplet和JavaApplication中可用的用户图形界面GUI中的基本组件(components)。

由于Java是一种独立于平台的程序设计语言,但GUI却往往是依赖于特定平台的,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观(不一定完全一致)。

  Java1.0的AWT(旧AWT)和Java1.1以后的AWT(新AWT)有着很大的区别,新的AWT克服了旧AWT的很多缺点,在设计上有较大改进,使用也更方便,这里主要介绍新的AWT,但在Java1.1及以后版本中旧的AWT的程序也可运行。

  抽象窗口工具包AWT(AbstractWindowToolkit)是API为Java程序提供的建立图形用户界面GUI(GraphicsUserInterface)工具集,AWT可用于Java的applet和applications中。

它支持图形用户界面编程的功能包括:

用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。

  Java释出的时候,AWT作为Java最弱的组件受到不小的批评。

最根本的缺点是AWT在原生的用户界面之上仅提供了一个非常薄的抽象层。

例如,生成一个AWT的复选框会导致AWT直接调用下层原生例程来生成一个复选框。

不幸的是,一个Windows平台上的复选框同MacOS平台或者各种UNIX风格平台上的复选框并不是那么相同。

  这种糟糕的设计选择使得那些拥护Java“一次编写,到处运行(writeonce,runanywhere)”信条的程序员们过得并不舒畅,因为AWT并不能保证他们的应用在各种平台上表现得有多相似。

一个AWT应用可能在Windows上表现很好可是到了Macintosh上几乎不能使用,或者正好相反。

在90年代,程序员中流传着一个笑话:

Java的真正信条是“一次编写,到处测试(writeonce,testeverywhere)”。

导致这种糟糕局面的一个可能原因据说是AWT从概念产生到完成实现只用了一个月。

在第二版的Java开发包中,AWT的器件很大程度上被Swing工具包替代。

Swing通过自己绘制器件而避免了AWT的种种弊端:

Swing调用本地图形子系统中的底层例程,而不是依赖操作系统的高层用户界面模块。

Swing是一个用于开发Java应用程序用户界面的开发工具包。

它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。

Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。

工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event。

2.3Java事件响应技术

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.1TCP

TCP:

TransmissionControlProtocol传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transportlayer)通信协议,由IETF的RFC793说明(specified)。

在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。

TCP是TCP/IP体系中非常复杂的一个协议,TCP的最主要的特点有:

1)TCP是面向连接的运输层协议。

2)每一条TCP连接只能有两个端点,每一条连接只能是点对点的。

3)TCP提供可靠交付的服务。

4)TCP提供全双工通信。

5)面向字节流。

2.4.2UDP

UDP是UserDatagramProtocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

它是IETFRFC768是UDP的正式规范。

用户数据报协议UDP只在IP的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及差错检测的功能。

UDP的主要特点是:

1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。

2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。

3)UDP是面向报文的。

2.4.3Socket

socket的英文原义是“孔”或“插座”。

作为4BDSUNIX的进程通信机制,取后一种意思。

通常也称作"套接字",用于描述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.4Java实现

Java提供了灵活方便的类实现Socket通信,包中拥有丰富的API,与TCP和UDP相关的有。

InetAddress:

用来封装IP地址的类。

ServerSocket:

用来产生服务器套接字实例的类。

Socket;用来产生客户端套接字实例的类。

DatagramPacket:

用来产生数据包实例的类。

DatagramSocket:

用来实现UDP套接字的类。

另外java.io提供了InputStream和OutputStream虚类实现对字节流操作的封装。

3.中国象棋网络版架构设计与通信设计

3.1中国象棋网络版架构分析与设计

本软件要实现多用户在线弈棋,所以采用C/S架构,服务器端和客户端分别完成各自的功能。

服务器需要实现登录注册和弈棋通信两大功能模块,提供登录、注册、数据转发、在线用户数据维护、建立弈棋等服务功能。

将服务器分为两大模块是因为这两个模块可以完全分离,互不影响,独立运行,保证了登录模块出现异常不会影响到已在线用户的用户体验,提高了服务器的可用性。

客户端需要实现登录、注册、弈棋、用户列表、实时交流和棋局状态记录显示六大功能,需要设计登录、注册、弈棋、用户列表维护、实时交流、棋局状态记录显示、登录注册和弈棋通信八大模块。

3.2中国象棋网络版数据通信设计与实现

3.2.1通信协议选择

经架构分析将登录注册模块与弈棋的通信模块分开设计,又根据两个模块对网络通信可靠性和即时性要求不同,所以设计登录模块的网络层通信协议为UDP协议,弈棋通信模块的网络层通信协议为TCP协议。

效率分析:

UDP协议是无连接、不需要包检测和重传机制的,优点是网络通信效率高。

而TCP协议是面向连接的,需经过三次握手,拥有包检测和重传机制,保证了数据完整和正确性,优点是可靠。

登录注册模块需要提供一个高效但不一定可靠的响应,即该模块允许在通信过程中丢包。

每一次登录注册请求与响应只产生一个往返的数据报,UDP协议的无连接特性保证的数据通信的高效性。

面对恶意登录请求,如果选择TCP协议,大量的建立连接会占用过多的系统资源,产生很高的服务器负载,影响服务质量,降低客户的用户体验。

所以登录注册模块选择UDP协议可以带来一个高效益的服务响应。

弈棋通信模块需要给客户提供一个高可靠性和稳定性的连接,即不允许在通信过程中发生数据丢失而不处理的事件。

如果采用UDP协议需要在服务器应用中添加包检测与重传功能,增加了服务器负载。

且弈棋通信是一个较长的数据通信过程,使用UDP协议并不能很大提供数据通信效率,而TCP协议很好的提供了包检测和重传机制,保证了数据通信的高可靠性和稳定性。

服务器与客户端的典型数据通信与处理流程图如图3.1。

 

图3.1服务器与客户端网络通信流程图

3.2.2数据类型分析

要实现在线对弈,就需要有数据的交互,根据预设的功能需要最基础的就有登录、登出、棋子移动、聊天等数据的通信,还有其它一些如:

棋子的选择、用户列表更新、棋谱的传输等数据通信。

如果不加分类很容易产生混乱,所以根据数据所属的不同模块将这些数据进行分类。

数据传输方式以“UTF-8”字符编码明文传输,其消息字符串message中的第一个字符为系统消息,将第一个字符char的2个字节16bit分为4级消息

char&0xf00char&0xf

符号位第二级消息第四级消息

将此字符进行位移运算分离各级消息

第一级消息第三级消息

char&0xf000char&0xf0

关于棋盘的消息格式为:

4字节字符串,前2个字节表示系统消息,后2个字节表示用户操作消息:

 

闪烁消息:

X坐标y坐标

移动消息:

 

源x坐标源y坐标目的x坐标目的y坐标

 

用户列表更新消息为

 

+";"+

用户积分用户状态8-16个

";"为分隔符,分割

每个用户的信息多个

 

服务器发送给旁观者的棋盘状态是一个由24个字符组成的字符串:

第一个字符为系统消息

其余23个字符分别携带棋盘上的90个位置的棋子状态

 

其中空子位为0

1-7代表黑方棋子:

1车8-14代表红方棋子:

8车

2马9马

3象10相

4士11仕

5将12帅

6炮13炮

7兵14卒

3.2.3数据格式设计

根据3.2.2节中对数据格式的分析,设计出系统消息格式(详见表3.1)。

给不同的功能模块设计不同的系统命令(如表3.1中Chessboard中第一级命令格式为CHESSBOARDPANE0x1000/0001,其中0x1000表示此命令的十六进制数值,0001表示为此命令的部分二进制数值,CHESSBORADPANE表示此命令所实现的消息内容)。

表3.1系统消息格式设计

消息级别

消息类型

第一级

第二级

第三级

第四级

Chessboard

(棋盘模块系统消息)

 

CHESSBOARDPANE

0x1000/0001

CB_STRAT

0x100/0001

0000

0000

CB_CHOICE

0x200/0010

0000

0000

CB_MOVE

0x300/0011

0000

0000

CB_RESULT

0x400/0100

0000

0000

CB_CHESSBOARD

0x500/0101

0000

0000

CB_LOOKONCHOICE

0x600/0110

0000

0000

CB_LOOKONMOVE

0x700/0111

0000

0000

Chat

(聊天模块系统消息)

CHATPANE

0x2000/0010

CP_SERVER

0x100/0001

0000

0000

CP_NORMALTALK

0x200/0010

0000

0000

Userlist

(用户列表模块系统消息)

 

USERLIST

0x3000/0011

U_ONLINE

0x100/0001

U_LOGIN_ACEEPT

0x10

0000

ULOGIN_REFUSE

0x20

U_OFFLNE

0x100/0001

0000

0000

U_USER

0x100/0001

0000

0000

 

U_USERUPDATA

0x100/0001

 

U_USTATE

0x10

FREE

0x1

PLAYING

0x2

LOOKON

0x3

U_U_ADD

0x20

0000

U_UDELETE

0x30

0000

U_INVITE

0x100/0001

0000

0000

U_INVITEACK

0x100/0001

ACCEPTINVITE

0x10

0000

REFSEINVITE

0x20

U_INVITED

0x100/0001

0000

0000

U_LOOKON

0x100/0001

0000

0000

U_NOLOOKON

0x100/0001

0000

0000

Login&Register

(登录模块系统命令)

 

LOGIN

0x3000/0011

L_ACCEPT

0x100

 

0000

 

0000

L_REFUSE

0x200

L_OUTTIME

0x300

3.2.4数据通信与处理伪码示例

数据通信格式为系统命令类型+消息数据。

此伪码示例简要的阐述了从登录到弈棋的数据通信与处理过程。

Begin:

第一步(登录):

Client(Login):

sendUDPpacket(登录消息+用户名+密码)

Server(LoginandRegisterThread):

接收Client的UDP包,解析数据内容为command+message

if(command==登录消息)

查询数据库中此用户名的密码

if(无此用户或密码不一致)

sendUDPpacket(登录失败)

else将用户名经MD5加密

sendUDPpacket(登录成功+MD5加密后的密匙)

elseif(command==注册消息)

if(数据库中有此用户)

sendUDPpacket(注册失败)

elsesendUDPpacket(注册成功)

else错误消息类型,丢弃

C

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1