ImageVerifierCode 换一换
格式:DOCX , 页数:47 ,大小:1.13MB ,
资源ID:8244846      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8244846.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中国象棋CS版.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

中国象棋CS版.docx

1、中国象棋CS版中国象棋(C/S版)1设计内容及要求1.1 中国象棋的基本要求设计C/S网络版中国象棋,也就是客户端与服务器端都是java应用程序。具体要求如下:(1) 中国象棋是双方在有着9调竖线和10条横线的棋盘上对弈,竖线和横线的交叉称为棋点或对弈点,每个棋子都是在棋点上行走,而不是在方格中行走。(2) 河界将棋盘分成两等份,每一边都有一块有9个点组成的九宫,棋子“将”,“帅”和“士”只能在九宫内移动,并且“将”和“帅”每一步只可以水平或垂直移动一个棋点;“士”只能在九宫内移动,并且它每一步只可以沿着对角线移动一个棋点;“象”必须一次沿着对角线方向走两个棋点,但它不能过河也不能跳过或穿越障

2、碍,即“象”不能别眼,“马”没一步只可以水平或垂直移动两个棋点,但必须按对角线向左或向右移动。中国象棋的“马”不能跳过障碍,即马不能别腿。“车”可以水平或垂直方向移动人一个无障碍的点。“炮”移动起来和车类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那个棋子称为桥或者屏风。“兵”每步只能向前移动一个棋子过河以后,它便增加了向左右移动的能力,并不允许向后移动。(3) 用户开始运行程序后,进入用户登录界面,用户输入正确的用户名和密码才可以进入中国象棋主界面。(4) 用户进入主界面后,单击“建立主机”按钮,就把该计算机作为主机,等待其他用户登录到这台主机后,才可以进行对弈。(5) 当有用户登

3、录到这台主机上士,用户单击“开始”按钮就可以开始想起对弈了,在对弈过程中,用户可以单击“悔棋”按钮,就可以实现悔棋,用户还可以单击“认输”按钮,向对方认输。(6) 如果用户赢了,用户的积分就会增加。(7) 用户在对弈过程中可以聊天。1.2 需实现的主要功能(1) 用户登录验证功能。(2) 每一个用户可以把自己的计算机做为主机。(3) 每一个用户可以寻找主机,并且与主机建立连接。(4) 用户在对弈过程中,可以悔棋,而且可以认输。(5) 没一个用户都用积分,当赢了比赛后,用户的积分就会增加。(6) 有聊天室功能,即用户在对弈过程中可以与对方聊天。(7) 在线用户显示功能。2需求分析2.1数据库设计

4、2.1.1 数据库及表结构的建立中国象棋系统共创建了一个dengluzhuce数据库,在该数据库中创建了一个login表。数据库是用Access创建的,创建方法是:新建空数据库。login表是用来存储用户信息的,login数据表的创建如下表所示:字段名称数据类型说明用户名文本密码文本积分文本 是否在线数字表2-1 login数据表2.1.2 JDBC-ODBC的建立为了同dengluzhuce数据库建立连接,首先要创建一个ODBC数据源,打开Windows中的控制面板,对于Windows XP选择“性能和维护”“管理工具”“数据源(ODBC)”;创建好user数据源。现在有了数据源,这个数据源

5、就是一个数据库。为了要连接到这个数据库,首先要建立一个JDBC-ODBC桥接器;Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);这里,Class是包java.lang中的一个类,该类通过调用静态方法forName加载sun.jdbc.odbc包中的JdbcOdbcDriver来建立桥接器。2.1.3 JAVA 数据库的连接首先使用java.sql包中的Connection类声明一个对象,然后在使用DriverManager调用它的静态方法getConnection创建这个连接对象,建立连接时应捕捉SQLException异常:Try Connecti

6、on con=DriverManager.getConnection(“jdbc:odbc:user”,”,”)Catch(SQLException)这样就建立到数据库dengluzhuce的连接。2.2服务器端和客户端的数据传输方式 服务器端和客户端的数据时用套接字来传输的。IP地址表示Internet上的计算机,端口号标识正在计算机运行的进程。端口号与IP地址的组合得出一个网络套接字。客户端使用Socket类建立到服务器的套接字连接,具体实现:try Socket sock=new Socket(String host,int port);catch(IOException e)当套接字连

7、接sock建立后,sock使用getInputStream()方法获得一个输入流,然后把获得的输入流接到另一个数据流上,然后就可以从这个数据流读取服务器来的信息,同样sock使用getOutputStream()方法获得一个输出流,然后把获得的输出流接到另一个DataOutputStram()数据流上,然后向这个数据流写入信息,发送给服务器。客户负责建立客户端到服务器的套接字连接,即客户端负责呼叫,因此服务器必须建立一个等待接收客户的套接字的ServerSocket对象,具体实现:try ServerSocket server_socket=new ServerSocket(int port)

8、;catch(IOException e)当服务器的ServerSocket对象建立后,就可以使用accept()方法接收客户的套接字。2.3 服务器端功能设计本课程设计中国象棋(C/S)网络版,服务器端与客户端采用的时套接字连接,服务器端有一个是数据库文件,数据库中有一个表,该表时用来存在用户信息的,服务器端最主要的功能时用户登陆验证,客户端输入用户名和密码,客户端会通过套接字把信息发送给服务器端,服务器端条用数据库中的用户信息对用户的信息进行验证,然后把正确信息发送给客户端。2.4客户端功能设计客户端最主要的功能时实现象棋棋盘和棋子的绘制,还有一些棋子的走棋规则,本中国象棋棋盘棋子的绘制是

9、采用图片最为背景的,只要应用Graphics的对象g调用drawImage()方法绘制棋盘,棋子的走棋规则是应用一些棋点数组记录棋子的位置,在棋子走动的时候判断棋子是否符合棋子的走棋规则。3总体设计3.1 总体功能图根据对需求所做的分析,中国象棋游戏需要实现的基本功能应包括以下几个方面:(1) 用户登录验证功能(2) 提供棋盘和棋子;(3) 设定棋子的走棋规则;(4) 可以悔棋;(5) 可以聊天;(6) 判断胜负;(7) 建立主机和与主机建立连接;(8) 显示所有在线用户; 游戏可以再任何装有java运行环境的电脑中运行,界面简洁,大方,操作简单,方便,容易上手,满足中国象棋游戏爱好者智力娱乐

10、的需求。根据系统功能需求,其总体功能图如图2-1所示: 图2-1 总体功能图3.2 总体流程图 根据对中国象棋游戏的功能分析,设计得到中国象棋游戏的总流程图如图2-2所示: 图2-2 总体流程图4. 详细设计4.1 功能分析和描述 中国象棋游戏包括三大功能模块:即用户登陆注册模块、中国象棋模块、,用户聊天模块。具体实现的功能又下棋、悔棋、求和,认输、建立主机、建立连接、用户登陆、聊天、游戏音效等。4.2 中国象棋功能模块 中国象棋模块是中国象棋游戏额核心部分,它实现了游戏的最基本也是最重要的功能。该模块中含有连接、退出系统和开始游戏功能三项功能。功能模块结构图: 图2-3 中国象棋功能模块结构

11、图4.2.1 开始游戏该功能为本游戏的最核心的部分,它实现了中国象棋游戏的最主要的操作,是其他功能的基础。主要功能包括:1. 下棋2. 提示下棋方3. 悔棋4. 认输5. 求和开始游戏流程图如图2-4所示: 图2-4 开始游戏流程图4.2.2连接功能连接功能是开始游戏前必须进行的步骤,连接有建立主机、刷新主机、建立连接。用户正确登陆系统后,进入中国象棋主界面,用户可以点击建立主机,把自己的电脑作为主机,然后等待其他用户连入就可以开始游戏了,用户还可以刷新主机,找到一个主机然后连入就可以开始游戏了。连接功能流程图如图2-5所示: 图2-5 连接功能流程图4.2.3退出系统该功能模块是为游戏者提供

12、一种退出本游戏的方法,点击“退出系统”按钮退出4.3 用户登陆注册模块用户登陆注册模块提供用户登陆和注册功能,用户运行客户端程序后,首先进入的是用户登陆界面,用户只要输入用户名和密码就可以进入中国象棋界面,如果用户没有用户名,就点击“注册”按钮进行注册,注册完成后就可以输入刚才申请的用户名和密码进入中国象棋界面。用户登陆功能流程图如图2-6所示: 图2-6 用户登陆功能流程图用户注册功能流程图如图2-7所示: 图2-7 用户注册功能流程图4.4 聊天模块聊天模块提供给用户聊天,用户进入中国象棋界面后,开始游戏就可以与对方聊天了,用户发送信息给服务器,然后服务器把信息发送给对方,在对方界面显示。

13、聊天模块流程图如图2-8所示: 图2-8 聊天模块流程图5. 算法设计5.1 算法概述算法是指解决问题的一种方法或过程。它是由若干条指令组成的由穷序列,并且满足下述5条性质:(1) 输入:有零个或多个有外部提供的量作为算法的输入;(2) 输出:算法产生至少一个量作为输出;(3) 可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的;(4) 确定性:组成算法的每条指令是清晰的,无歧义的;(5) 有限性:算法中每条指令的执行次数是有限的,执行每条的时间也是有限的在中国象棋游戏中,涉及到多种算法。例如象棋棋盘、棋子的绘制;象棋棋种走棋规则的设置;象棋棋子拖动规

14、则的设置;象棋棋子的悔棋设置等方面都利用到了算法。这些算法的具体设计如下:5.2棋盘、棋子绘制的算法设计本中国象棋有限的棋盘和棋子采用的都是图片,采用图片比较简单,不用绘制那么多条线,用图片来代替棋盘和棋子,只要用Graphics对象g调用drawImage()方法就可以把突变加载进去。棋盘的实现如下图2-9所示: 图2-9 棋盘实现的相关代码棋子的实现如下图2-10所示: 图2-10 棋子实现的相关代码5.3 棋种走棋规则的算法设计象棋的每种棋种都有它们自己的走棋规则的,例如,车走直线,中间不能有棋子;马走“日”;象走“田”等等。下面我们就拿象棋棋子车,马,炮,象、士、卒、将的走棋规则算法分

15、别来进行详细的说明:5.3.1 “车”的走棋规则的算法设计“车”,它只能走直线,且中间不能有任何棋子,设计时分为两种情况来考虑,一种是纵向行走;一种是横向行走。用if语句来判断实现,例如车纵向行走,首先,用if(startI=endI)来判断棋子是否纵向行走,接着再用判断语句if(pointstartIj.isPiece()来判断中间有没别的棋子。横向行走同理。如果棋子车符合以上的走棋规则,则可以走动,否则棋子强制放回原处。现在假设车的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。算法设计流程图如图2-11所示: 图2-11 “车”的走棋规则算法设计流程图5.3.2

16、“马”的走棋规则的算法设计“马”,它只能走“日”字格,而且马腿不能被其它的棋子压到。设计时可两种情况来考虑,一种是横向走两个棋点,纵向走一个棋点;一种是纵向走两个棋点,横向走一个棋点。用if语句来判断,例如马横向走“日”,首先,用if(xAxle=2&yAxle=1)来判断棋子是否横向走两个棋点,纵向走一个棋点,接着再用判断语句if(pointstartI+1startJ.isPiece()来判断马腿是否被其它棋子压着。纵向走“日”同理。如果棋子马符合以上的走棋规则,则可以走动,否则棋子强制放回原处。现在假设马的棋点坐标为(a,b),a为横坐标,b为纵坐标,再设x,y为棋盘内任意值。算法设计流

17、程图如图2-12所示:图2-12 “马”的走棋规则算法设计流程图5.3.3 “卒”的走棋规则的算法设计“卒”,它的行走规则分两种情况。一种是棋子没过河界,另一种是棋子过了河界。用if语句来判断,首先,用if(endJ=6)语句来设定棋子过了河界,紧接着设定棋子在过了河界的情况下只能向前、向左、向右行走一个棋点。如果棋子卒符合以上的走棋规则,则可以走动,否则棋子强制放回原处。现在假设卒的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。算法设计流程图如图2-13所示:图2-13 “卒”的走棋规则算法设计流程图5.3.4 “将”的走棋规则的算法设计“将”,它只能在“九宫”中行

18、走,而且每次只能横着或者纵着行走一棋点。直接用if语句来判断,首先,用if(endI=4)来判断棋子是否是在“九宫”里行走,接着判断棋子是否是横向或纵向只走一个棋点。如果棋子将符合以上的走棋规则,则可以走动,否则棋子强制放回原处。现在假设将的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。算法设计流程图如图2-14所示:图2-14“将”的走棋规则算法设计流程图5.3.5 “炮”的走棋规则的算法设计“炮”,它只能走直线,且中间有且只能有一个棋子。算法设计流程图如图2-15所示:图2-15“炮”的走棋规则算法设计流程图5.3.6 “象”的走棋规则的算法设计“象”,它只能走“

19、田”字格,而且不能过河,象腿不能被其它的棋子压到。这样只有一种情况考虑,那就是纵向走两个棋点,横向也走两个棋点。用if语句来判断,首先,用if(xAxle=2&yAxle=2&endJ=5)来判断棋子是否走田字格,而且不能过河,接着再用判断语句if(pointcenterIcenterJ.isPiece()来判断象腿是否被其它棋子压着。如果棋子象走动符合以上的走棋规则,则可以走动,否则棋子强制放回原处。现在假设象的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。算法设计流程图如图2-16所示:图2-16“象”的走棋规则算法设计流程图5.3.7 “士”的走棋规则的算法设计

20、“士”,它只能在“九宫”中行走,而且每次只能斜着行走一格。这样只有一种情况来考虑,即纵向走一个棋点,横向走一个棋点。if语句来判断,if(endI=4&endJ=3&xAxle=1&yAxle=1)。如果棋子士符合以上的走棋规则,则可以走动,否则棋子强制放回原处。现在假设士的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。算法设计流程图如图2-17所示:图2-17“士”的走棋规则算法设计流程图5.4 棋子拖动规则的算法设计 在拖动象棋棋子的时候,首先要检查棋子当前覆盖的区域是否包含有一个棋点,接着判断该棋点上是否有棋子,这时,如果当前棋点上有棋子,我们还得判断,棋点上有

21、棋子且棋子的颜色是否和所拖动的棋子颜色相同,如果相同,则将拖动的棋子放回原处;否则,就将拖动的棋子防止在当前位置上并将当前棋子上的对方棋子吃掉。如果当前棋点上没有棋子,那就将棋子防止在棋点上即可。算法设计流程图如图2-18所示:图2-18 棋子拖动规则算法设计流程图5.5 悔棋的算法设计在悔棋的实现中,要考虑两种情况,一种是所悔的棋步没吃棋子,另一种是所悔的棋步吃了棋子。如果是没吃棋子,只需将移动的棋子放回原处:pointstartIstartJ.setPiece(piece,board)即可;如果是吃了棋子,就要先将悔棋方的棋子放回起始棋点pointstartIstartJ.setPiece

22、(piece,board),接着还得将被吃掉的棋子放回原处pointendIendJ.setPiece(removedPiece,board)。算法设计流程图如图2-19所示:、 图2-19 悔棋算法设计流程图6代码实现6.1 类之间关系图中国象棋程序包含22个java文件,其中包含DengluPanel.java、ZhucePanel.java、Start.java、Chessboard.java、Chess.java、NetSocket.java、StartServer.java、UdpServer.java、ChatServer.java等,其中ChatServer.java是在服务器端

23、,服务器端就是一个文件,其他的是客户端的java文件,由于服务器就只有一个类,所以不用画类之间的关系图,客户端的类之间的关系图如图2-20所示:图2-20 客户端类之间的关系图6.2 运行效果图用户登录界面:图2-21 用户登陆界面用户注册界面:图2-22 用户注册界面中国象棋主界面: 图2-23 中国象棋主界面中国象棋对弈一方界面:图2-24 中国象棋对弈一方界面中国象棋对弈另一方界面:图2-25 中国象棋对弈另一方界面服务器端界面: 图2-26 服务器端界面6.3 程序打包发布过程1.服务器端 服务器端程序在命令行窗口运行,不需要打包。2.客户端可以使用jar.exe命令制作JAR文件来发

24、布编写软件。(1) 首先用文本编辑器,如Windows下的“记事本”,编写一个清单文件: mymoon.mf Manifest-Version: 1.0 Main-Class: Main Created-By: 1.5(Sun Microsystems Inc.)将mymoon.Mf保存到D:中国象棋中,即和应用程序所用的字节码文件保存在相同的目录中。注意:清单文件中的“Manifest-Version:”和1.0之间, “Main-Class:”和主类Main之间以及“Created-By:”和1.2之间必须有且只有一个空格。(2) 生成JAR文件 D:中国象棋jar cfm 中国象棋.ja

25、r mymoon.mf *.Class其中,参数c表示要生成一个新的JAR文件,f表示要生成的JAR文件的名字,m表示清单文件的名字。7总结与说明我做的是中国象棋(C/S)网络版,其实把中国象棋改成网络版并不难,最难的中国象棋中涉及的算法,比如“车”、“马”、“卒”、“将”、“炮”、“象”、“士”的走棋规则算法,它士用棋点数组来存储各个棋子的位置,当用户移动一个棋子后,就用棋点数组来判断棋是否符合棋子的走棋规则,这种算法设计很精妙,我在以后涉及到这种的算法,我就可以用这种方法。附录:程序源代码:网络部分:Start.javaimport java.awt.Dimension;import ja

26、va.awt.Graphics;import .URL;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.sql.*;public class Start static JSplitPane rightPanel,rightPanel1; /表示是否已连接,0表示未连接,1表示已连接 public

27、static int isCollection=0; /表示是主机还是客户端,0表示客户端,1表示主机 public static int isServer=0; /下棋状态,0表示未开始,1表示我下,2表示对方下 public static int chessState=0; public static int chessCount=0; public static int chessConfirm=0; public Start() frame=new JFrame(中国象棋); listTable=new Hashtable(); chessboard=newChessboard(new

28、ImageIcon(getdir(images/main.jpg).getImage(); frame.getContentPane().setLayout(null); chessboard.setLocation(0, 0); frame.getContentPane().add(chessboard); c=new UserName(); collection=new Collection(); JPanel panel1=new JPanel(); panel1.setLayout(null); panel1.add(c); panel1.add(collection); c.setB

29、ounds(10,15,220,30); collection.setBounds(5,50,225,180); panel1.setBorder(BorderFactory.createTitledBorder(连接); msg=new Message(); JPanel panel2=new JPanel(); panel2.setLayout(null); panel2.add(msg); msg.setBounds(5,15,220,250); panel2.setBorder(BorderFactory.createTitledBorder(聊天区); /在线用户 zx=new Za

30、iXian(); zx.setBounds(10,15,220,100); zx.setBorder(BorderFactory.createTitledBorder(在线用户); rightPanel=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,panel1,zx); rightPanel.setDividerLocation(225); rightPanel1=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,rightPanel,panel2); rightPanel1.setDividerLocation(360); frame.getContentPane().add(rightPanel1); rightPanel1.setBounds(554,0,235,678); chess=new Chess(); chess.setLocation(0, 616); frame.getContentPane().add(chess); handlingMsg=

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

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