JAVA中国象棋.docx
- 文档编号:12546303
- 上传时间:2023-04-20
- 格式:DOCX
- 页数:18
- 大小:1.16MB
JAVA中国象棋.docx
《JAVA中国象棋.docx》由会员分享,可在线阅读,更多相关《JAVA中国象棋.docx(18页珍藏版)》请在冰豆网上搜索。
JAVA中国象棋
中国象棋
1设计目的
通过对Java各种基础的学习,了解java的运行环境,学会java面向对象的设计。
以及java各种控件及图像用户的界面的设计使用,分别掌握基本工具继承抽象类接口。
输入输出,流程控制,开发环境,实现简单的功能设计,帮助熟练的掌握有关java的知识结构体系,
通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。
2设计方案论证
2.1需求分析
(1)功能需求
(1)用户登录验证功能。
(2)每一个用户可以把自己的计算机做为主机。
(3)每一个用户可以寻找主机,并且与主机建立连接。
(4)用户在对弈过程中,可以悔棋,而且可以认输。
(5)没一个用户都用积分,当赢了比赛后,用户的积分就会增加。
(6)有聊天室功能,即用户在对弈过程中可以与对方聊天。
(7)在线用户显示功能。
(2)性能需求
在开发学生学籍管理系统时,该项目使用的软件开发环境如下:
①操作系统:
Windownvista
②数据库:
SQLServer2005
③开发工具:
Myeclipse
2.2总体设计
设计C/S网络版中国象棋,也就是客户端与服务器端都是java应用程序。
具体要求如下:
(1)中国象棋是双方在有着9调竖线和10条横线的棋盘上对弈,竖线和横线的交叉称为棋点或对弈点,每个棋子都是在棋点上行走,而不是在方格中行走。
(2)河界将棋盘分成两等份,每一边都有一块有9个点组成的九宫,棋子“将”,“帅”和“士”只能在九宫内移动,并且“将”和“帅”每一步只可以水平或垂直移动一个棋点;“士”只能在九宫内移动,并且它每一步只可以沿着对角线移动一个棋点;“象”必须一次沿着对角线方向走两个棋点,但它不能过河也不能跳过或穿越障碍,即“象”不能别眼,“马”没一步只可以水平或垂直移动两个棋点,但必须按对角线向左或向右移动。
中国象棋的“马”不能跳过障碍,即马不能别腿。
“车”可以水平或垂直方向移动人一个无障碍的点。
“炮”移动起来和车类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那个棋子称为桥或者屏风。
“兵”每步只能向前移动一个棋子过河以后,它便增加了向左右移动的能力,并不允许向后移动。
(3)用户开始运行程序后,进入用户登录界面,用户输入正确的用户名和密码才可以进入中国象棋主界面。
(4)用户进入主界面后,单击“建立主机”按钮,就把该计算机作为主机,等待其他用户登录到这台主机后,才可以进行对弈。
(5)当有用户登录到这台主机上士,用户单击“开始”按钮就可以开始想起对弈了,在对弈过程中,用户可以单击“悔棋”按钮,就可以实现悔棋,用户还可以单击“认输”按钮,向对方认输。
(6)如果用户赢了,用户的积分就会增加。
(7)用户在对弈过程中可以聊天。
2.3详细设计
2.3.1总体功能图
根据对需求所做的分析,中国象棋游戏需要实现的基本功能应包括以下几个方面:
(1)用户登录验证功能
(2)提供棋盘和棋子;
(3)设定棋子的走棋规则;
(4)可以悔棋;
(5)可以聊天;
(6)判断胜负;
(7)建立主机和与主机建立连接;
(8)显示所有在线用户;
游戏可以再任何装有java运行环境的电脑中运行,界面简洁,大方,操作简单,方便,容易上手,满足中国象棋游戏爱好者智力娱乐的需求。
根据系统功能需求,其总体功能图如图1所示:
图1总体功能图
2.3.2总体流程图和中国象棋功能模块
根据对中国象棋游戏的功能分析,设计得到中国象棋游戏的总流程图如图2所示:
图2总体流程图
中国象棋模块是《中国象棋》游戏额核心部分,它实现了游戏的最基本也是最重要的功能。
该模块中含有连接、退出系统和开始游戏功能三项功能。
功能模块结构图:
图3中国象棋功能模块结构图
2.3.3数据库设计
数据库及表结构的建立
中国象棋系统共创建了一个dengluzhuce数据库,在该数据库中创建了一个login表。
数据库是用Access创建的,创建方法是:
新建—>空数据库。
login表是用来存储用户信息的,login数据表的创建如下表所示:
表1数据表
字段名称
数据类型
说明
用户名
文本
密码
文本
积分
文本
是否在线
数字
JDBC-ODBC的建立
为了同dengluzhuce数据库建立连接,首先要创建一个ODBC数据源,打开Windows中的控制面板,对于WindowsXP选择“性能和维护”—>“管理工具”—>“数据源(ODBC)”;创建好user数据源。
现在有了数据源,这个数据源就是一个数据库。
为了要连接到这个数据库,首先要建立一个JDBC-ODBC桥接器;Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);这里,Class是包java.lang中的一个类,该类通过调用静态方法forName加载sun.jdbc.odbc包中的JdbcOdbcDriver来建立桥接器。
JAVA数据库的连接
首先使用java.sql包中的Connection类声明一个对象,然后在使用DriverManager调用它的静态方法getConnection创建这个连接对象,建立连接时应捕捉SQLException异常:
Try{
Connectioncon=DriverManager.getConnection(“jdbc:
odbc:
user”,””,””)
}
Catch(SQLException){}
这样就建立到数据库dengluzhuce的连接。
2.3.4各部分功能流程图
(1)开始游戏
该功能为本游戏的最核心的部分,它实现了中国象棋游戏的最主要的操作,是其他功能的基础。
主要功能包括:
1.下棋
2.提示下棋方
3.悔棋
4.认输
5.求和
开始游戏流程图如图4所示:
图4开始游戏流程图
(2)连接功能
连接功能是开始游戏前必须进行的步骤,连接有建立主机、刷新主机、建立连接。
用户正确登陆系统后,进入中国象棋主界面,用户可以点击建立主机,把自己的电脑作为主机,然后等待其他用户连入就可以开始游戏了,用户还可以刷新主机,找到一个主机然后连入就可以开始游戏了。
连接功能流程图如图5所示:
图5连接功能流程图
(3)用户登陆注册模块
用户登陆注册模块提供用户登陆和注册功能,用户运行客户端程序后,首先进入的是用户登陆界面,用户只要输入用户名和密码就可以进入中国象棋界面,如果用户没有用户名,就点击“注册”按钮进行注册,注册完成后就可以输入刚才申请的用户名和密码进入中国象棋界面。
用户登陆功能流程图如图6所示:
图6用户登陆功能流程图
用户注册功能流程图如图7所示:
图7用户注册功能流程图
(4)聊天模块
聊天模块提供给用户聊天,用户进入中国象棋界面后,开始游戏就可以与对方聊天了,用户发送信息给服务器,然后服务器把信息发送给对方,在对方界面显示。
聊天模块流程图如图8所示:
图8聊天模块流程图
2.3.5算法设计
(1)棋盘、棋子绘制的算法设计
本中国象棋有限的棋盘和棋子采用的都是图片,采用图片比较简单,不用绘制那么多条线,用图片来代替棋盘和棋子,只要用Graphics对象g调用drawImage()方法就可以把突变加载进去。
棋盘的实现如下图9所示:
图9棋盘实现的相关代码
棋子的实现如下图10所示:
图10棋子实现的相关代码
(2)棋种走棋规则的算法设计
象棋的每种棋种都有它们自己的走棋规则的,例如,车走直线,中间不能有棋子;马走“日”;象走“田”等等。
下面我们就拿象棋棋子车,马,炮,象、士、卒、将的走棋规则算法分别来进行详细的说明:
1“车”的走棋规则的算法设计
“车”,它只能走直线,且中间不能有任何棋子,设计时分为两种情况来考虑,一种是纵向行走;一种是横向行走。
用if语句来判断实现,例如车纵向行走,首先,用if(startI==endI)来判断棋子是否纵向行走,接着再用判断语句if(point[startI][j].isPiece())来判断中间有没别的棋子。
横向行走同理。
如果棋子车符合以上的走棋规则,则可以走动,否则棋子强制放回原处。
现在假设车的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。
算法设计流程图如图11所示:
图11“车”的走棋规则算法设计流程图
2“马”的走棋规则的算法设计
“马”,它只能走“日”字格,而且马腿不能被其它的棋子压到。
设计时可
两种情况来考虑,一种是横向走两个棋点,纵向走一个棋点;一种是纵向走两个棋点,横向走一个棋点。
用if语句来判断,例如马横向走“日”,首先,用if(xAxle==2&&yAxle==1)来判断棋子是否横向走两个棋点,纵向走一个棋点,接着再用判断语句if(point[startI+1][startJ].isPiece())来判断马腿是否被其它棋子压着。
纵向走“日”同理。
如果棋子马符合以上的走棋规则,则可以走动,否则棋子强制放回原处。
现在假设马的棋点坐标为(a,b),a为横坐标,b为纵坐标,再设x,y为棋盘内任意值。
算法设计流程图如图12所示:
图12“马”的走棋规则算法设计流程图
3“卒”的走棋规则的算法设计
“卒”,它的行走规则分两种情况。
一种是棋子没过河界,另一种是棋子过了河界。
用if语句来判断,首先,用if(endJ<=5)语句来设定棋子没过河界,接着设定棋子在没过河界的情况下只能向前行走一个棋点;然后用if(endJ>=6)语句来设定棋子过了河界,紧接着设定棋子在过了河界的情况下只能向前、向左、向右行走一个棋点。
如果棋子卒符合以上的走棋规则,则可以走动,否则棋子强制放回原处。
现在假设卒的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。
算法设计流程图如图13所示:
图13“卒”的走棋规则算法设计流程图
4“将”的走棋规则的算法设计
“将”,它只能在“九宫”中行走,而且每次只能横着或者纵着行走一棋点。
直接用if语句来判断,首先,用if(endI<=6&&endI>=4)来判断棋子是否是在“九宫”里行走,接着判断棋子是否是横向或纵向只走一个棋点。
如果棋子将符合以上的走棋规则,则可以走动,否则棋子强制放回原处。
现在假设将的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。
算法设计流程图如图14所示:
图14“将”的走棋规则算法设计流程图
5“炮”的走棋规则的算法设计
“炮”,它只能走直线,且中间有且只能有一个棋子。
算法设计流程图如图15所示:
图15“炮”的走棋规则算法设计流程图
6“象”的走棋规则的算法设计
“象”,它只能走“田”字格,而且不能过河,象腿不能被其它的棋子压到。
这样只有一种情况考虑,那就是纵向走两个棋点,横向也走两个棋点。
用if语句来判断,首先,用if(xAxle==2&&yAxle==2&&endJ<=5)来判断棋子是否走"田"字格,而且不能过河,接着再用判断语句if(point[centerI][centerJ].isPiece())来判断象腿是否被其它棋子压着。
如果棋子象走动符合以上的走棋规则,则可以走动,否则棋子强制放回原处。
现在假设象的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。
算法设计流程图如图16所示:
图16“象”的走棋规则算法设计流程图
7“士”的走棋规则的算法设计
“士”,它只能在“九宫”中行走,而且每次只能斜着行走一格。
这样只有一种情况来考虑,即纵向走一个棋点,横向走一个棋点。
if语句来判断,if(endI<=6&&endI>=4&&endJ<=3&&xAxle==1&&yAxle==1)。
如果棋子士符合以上的走棋规则,则可以走动,否则棋子强制放回原处。
现在假设士的棋点坐标为(i,j),i为横坐标,j为纵坐标,再设x,y为棋盘内任意值。
算法设计流程图如图17所示:
图17“士”的走棋规则算法设计流程图
3运行结果与分析
用户登录界面:
图18用户登陆界面
用户注册界面:
图19用户注册界面
中国象棋主界面:
图20中国象棋主界面
中国象棋对弈一方界面:
图21中国象棋对弈一方界面
4设计体会
通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,特别是对于课外知识的积累也提高了不少,对于图形用户界面的设计从课本的ATW包扩展到SWING包,利用Swing编程设计漂亮的图形用户界面,在设计的过程中我遇到了很多的问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。
这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。
特别它还让我学会了在网上查阅那些无限的资料,让我明白知识是不能只限于课本,当然更不能只满足于课本。
我做的是中国象棋,遇到最难的是中国象棋中涉及的算法,比如“车”、“马”、“卒”、“将”、“炮”、“象”、“士”的走棋规则算法,它士用棋点数组来存储各个棋子的位置,当用户移动一个棋子后,就用棋点数组来判断棋是否符合棋子的走棋规则,这种算法设计很精妙,让我在以后涉及到这种的算法,我就可以用这种方法。
5参考文献
[1]王国辉,吕海涛.Java数据库系统开发案例精选[M].北京:
人民邮电出版社,2007.3:
106-177
[2]陈国君,陈锡祯.Java2程序设计基础[M].北京:
清华大学出版社,2006.1:
316-338
[3]袁海燕.Java实用程序设计100例[M].北京:
人民邮电出版社,2005.6:
210-224
[4]耿祥文.张跃平《JAVA2教程》[M].北京:
清华大学出版社2005.7:
210-235
[5]张仿彦.《JAVA项目开发全程实录》[M].北京:
清华大学出版社2004.6:
310-244
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 中国象棋