基于Java中国象棋游戏设计论文.docx
《基于Java中国象棋游戏设计论文.docx》由会员分享,可在线阅读,更多相关《基于Java中国象棋游戏设计论文.docx(24页珍藏版)》请在冰豆网上搜索。
基于Java中国象棋游戏设计论文
本科毕业论文(设计)
题目:
基于Java的中国象棋游戏设计
摘要:
随着社会的发展,科学技术不断提高,人们的娱乐活动不断地增加,中国象棋作为中华民族的传统文化,不仅在国内深受群众喜爱,而且流传国外。
开发中国象棋游戏软件,推广我们传统的象棋文化。
本文通过运用Java语言、软件工程的知识,参考网上一些文献资料的设计思路,开发出中国象棋对弈游戏系统,程序实现了游戏计时、悔棋、和棋、认输等功能。
通过对系统进行详细地需求分析,设计出了系统的逻辑模型,并且对各个功能进行了详细的分析,对中国象棋规则进行了详细地算法描述,最后对该程序的功能进行了测试与总结。
关键词:
JAVA;中国象棋;对弈;游戏
1绪论
1.1项目开发的背景及意义
随着电子信息技术的不断发展以及网络技术的普及,网络能够提供多样、便捷的服务,已经成为人们生产生活中不可缺少的重要组成部分。
如今网络休闲游戏发展非常迅猛,它凭借健康、方便、益智、互动性强等诸多优点,成为大众休闲娱乐的首选。
作为中华民族悠久文化的代表之一,中国象棋不仅源远流长,而且基础广泛,作为一项智力运动,中国象棋不仅能丰富人们文化生活,陶冶情操,而且有助于开发智力,启迪思维,培养人的品格。
弈棋可磨练意志,锤炼品质,塑造性格,陶冶情操,中国象棋是中国文化的缩影,是中华民族智慧的反映。
中国象棋的规则的复杂性是社会复杂性在中国象棋游戏中的一个反映。
通过Java技术开发中国象棋游戏系统,以便于与时俱进,将中国象棋运用于计算机等电子设备,实现中国象棋对弈系统,为象棋在网络应用平台提供多人对弈。
1.2研究现状及发展趋势
象棋游戏软件现在有腾讯象棋、JJ象棋、象棋巫师等游戏软件;腾讯象棋和JJ象棋是网络对弈游戏。
现在的棋盘类软件有很多,大多数都是游戏对战平台的网络对弈软件;如腾讯QQ象棋、JJ象棋等网络对弈游戏。
在文献[7]中提到的象棋巫师等。
在文献[5]中提到五子棋、国际象棋等棋类的计算机博弈已经取得了成功,但规则更加复杂的中国象棋电子计算机博弈尚处于萌芽阶段。
棋盘类游戏将向多平台、智能化方向发展。
1.3研究目标
此项目主要应用于中国象棋对弈软件,本文针对的是双人的对弈,能够运用该软件进行象棋对弈。
实现对弈计时、悔棋、和棋、认输等功能。
2可行性研究
可行性研究的目的,就是以最小的代价、在尽量短的时间内确定问题是否能够被解决。
因此,必须客观的分析问题,找出主要的可能解决法,然后从系统逻辑模型出发,分析若干种主要的解法,研究每种解法的可行性,从而最终确定这项工程的可行性。
2.1技术可行性
Java是SunMicrosystem公司开发的编程语言,Java语言具有高效性、通用性、平台移植性和安全性等特点。
运用Eclipse软件进行编写,并进行编译执行。
2.1.1使用Java技术的优点
Java是非常新的一种语言,具有面向对象、分布式、解释执行、体系结构中立、可移植、多线程、以及动态性等特点。
和其他编程语言相比,它有很多优点。
使用Java语言的主要优点体现在以下几个方面:
(1)灵活性
Java语言是非常灵活的,它支持部署和开发环境中的各种变化。
因为Java是在面向对象的基础平台上构建的,故其很容易对基本的语言进行扩展和发布。
(2)厂商的广泛支持
采用Java有一个非常重要的原因,就是受到了厂商的广泛支持。
Java不仅仅只有一个主要的供应商,有许多公司都生产、支持Java产品。
(3)用户的广泛支持
Java语言具有良好的用户基础,它们并不局限于某一个特定的公司。
在Internet上,有许多资源以及Java示例代码。
另外,Java程序员还可以使用许多免费软件或共享软件和许多应用程序代码。
(4)平台独立性
Java源代码和运行时的文件与操作系统无关,可以支持多个操作系统。
因此,在Windows环境中创建并编译Java类文件,无需任何修改就可以将其部署到Linux环境中。
Java的这种特性,也称为可移植性,这一点使得Java开发更加方便,对于那些需要一个特定操作系统、又需要支持其他操作系统的企业来说是非常重要。
2.1.2Eclipse简介
Eclipse是一个基于Java的可扩展开发平台。
它本身只是一个框架和一组服务,用于通过插件组件构建开发环境。
Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。
Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),该组件主要是针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。
Eclipse这样功能完整且成熟的开发环境,大部分的开发掌握在IBM手中,但是有一部份是由eclipse.org的软件联盟主导。
Eclipse使用开放原始码许可书,即用公共公众许可书CommonPublicLicense(CPL)作为授权方式,设计上是可以容许商业利益的。
CPL可以容许Eclipse和其它开放原始码软件合组时,能够用更加严谨的许可书散布软件,可以用于商业途径。
CPL经过OpenSoftwareInitiative(OSI)认证,其内容符合开放原始码授权的需求。
2.2经济可行性
经济可行性分析是指进行成本与效益的核算分析,从经济角度判断开发该系统的预期经济效益能否超过它的开发成本。
当系统开发人员接受开发任务时,首要研究开发任务,判断是否具有简单明确合理可行的解决办法。
其实,有许多不可能在预期的规模内解决的问题,如果某些问题无法很好的解决,那么花费在该项工程上的任何时间、资源和经费都是浪费的。
因此可行性分析必不可少。
该系统的开发运用Java开发环境Eclipse来完成,参考图书及网上相关资料,由自己独立开发完成,在经济方面成本可自己承担,具有一定的经济可行性。
2.3社会可行性
随着计算机科技的发展,个人计算机的普及,越来越多的人们接触并使用计算机,现今普通人也能熟练地使用计算机,并习惯使用计算机通过网络进行学习工作和娱乐活动,这样更有利于人力资源的有效利用。
而且该程序的简单易用,使得人们能够使用该程序进行对弈。
3需求分析及总体设计
3.1需求分析
该程序需要实现象棋游戏的以下几个基本功能:
(1)开始游戏/重新开始:
开始一局新的象棋对弈;
(2)计时:
设置走棋时间限制和棋局的时间限制;
(3)悔棋:
将棋子返回到之前所处的位置;
(4)求和和认输:
将双方协商棋局为和棋,或一方认输结束棋局;
(5)退出:
退出本程序;
(6)提示:
显示出象棋的走棋、赢棋规则。
3.2总体设计
3.2.1总体结构设计
中国象棋软件的总体结构层次方框图如图3-1所示。
图3-1层次方框图
3.2.2棋盘棋子的设计
打开程序后显示棋盘界面如图3-2所示。
图3-2棋盘界面
棋盘是棋子的活动位置棋子活动的场所。
在长方形的平面上,由九竖线和十条横线相交组成,共有九十个交叉点,棋子摆在交叉点上。
中间部分,即棋盘的第五和第六两横线之间末画竖线的空白地带称为“楚河汉界”,也称“河界”。
两端的中间,以斜交叉线构成“米”字方格的地方,叫作“九宫”(它共有九个交叉点)。
开始游戏后调入棋子后界面如图3-3。
图3-3棋子调入界面
棋子共有三十二个,分为红、黑两组,各有十六个,由对弈的双方各执一组。
兵种是一样的,分为七种:
将(帅)、仕、象(相)、车、马、炮、卒(兵)。
红方持有棋子:
一个帅,仕、相、车、马、炮各有两个,五个兵。
黑方持有棋子:
一个将,士、象、车、马、炮各有两个,五个卒。
其中帅与将;仕与士;相与象;兵与卒的作用完全相同,仅仅是区别红棋和黑棋。
3.3类图说明
该程序的所包含的类如图3-4所示,层次结构如图3-5所示。
图3-4类图
图3-5层次结构图
在图3-4中,zgxq包内的XQJFrame.java与ZGXQ.java是本程序的源代码文件;image中的棋子图片,及Rule.txt象棋规则说明文件是程序中所调用的。
图3-5所示的是本项目的层次结构图,显示了本项目中的类及其所用方法的层次结构。
层次结构图表示的是程序系统中运用的方法、函数的层次结构,显示了它们的层次关系。
XQJFrame.java中的方法大纲如图3-6所示,图3-6中(a)的最后与(b)的最前面相联。
图3-6(a)方法大纲图3-6(b)方法大纲
图3-6中(a)和(b)所示的是本项目的大纲,“导入声明”是本程序中调用的Java自带的方法;“XQJFrame”是本程序中运用的参数,及方法的属性和顺序。
4详细设计
4.1程序流程设计
程序的主体流程图如图4-1所示。
该流程图是在不悔棋、求和、认输的情况下的流程,若进行悔棋、求和等操作,则执行悔棋、求和的方法。
图4-1程序流程图
4.2开始游戏设计
打开程序后,点击开始,弹出询问对话框(如图4-2),确定后,弹出局时和步时的设置界面(如图4-3,图4-4),设置好后开始游戏(如图3-3)。
图4-2对话框
图4-3局时设置
图4-4步时设置
局时是限制一盘棋的时间,时间到时就会结束该局;步时是限制走一步棋所用的时间,当一方走棋超时时,则认定该方放弃走棋,该方认输,对方获胜。
代码如下:
if(e.getSource()==anew){//新游戏(N)
inttemp=JOptionPane.showConfirmDialog(this,"是否开始新游戏?
","新游戏",
JOptionPane.YES_NO_OPTION);
if(temp==JOptionPane.YES_OPTION){
//或者temp==0,表示点击"是(Y)";temp==1,表示点击"否(N)"
intcount=0;//记录点击了几次取消或者几次没有输入值
Stringinput1=(String)JOptionPane.showInputDialog(this,
"设定局时为(单位:
分钟,如果输入0,则表示没有局时限制):
","局时设置",
JOptionPane.PLAIN_MESSAGE,null,null,"0");
//输入局时
StringssJtime;
if(Jtime==0)//输入数值为0
ssJtime="无限制";
else
ssJtime=Jtime/3600+"小时"
+(Jtime/60-Jtime/3600*60)+"分"
+(Jtime-Jtime/60*60)+"秒";
if(input1==null||input1.equals("")){//未输入数值
JOptionPane.showConfirmDialog(this,"没有设置局时,局时为"+ssJtime,
"游戏信息",JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
count++;
}elseif(Integer.parseInt(input1)<0){//输入数值为负数
JOptionPane.showConfirmDialog(this,"不能输入负值,局时为"+ssJtime,
"游戏信息",JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
count++;
}else
Jtime=Integer.parseInt(input1)*60;
Stringinput2=(String)JOptionPane.showInputDialog(this,
"设定步时为(单位:
秒钟,如果输入0,则表示没有步时限制):
","步时设置",
JOptionPane.PLAIN_MESSAGE,null,null,"0");
StringssBtime;
if(Btime==0)//输入数值为0
ssBtime="无限制";
else
ssBtime=Btime/3600+"小时"
+(Btime/60-Btime/3600*60)+"分"
+(Btime-Btime/60*60)+"秒";
if(input2==null||input2.equals("")){//未输入数值
JOptionPane.showConfirmDialog(this,"没有设置步时,步时为"+ssBtime,
"游戏信息",JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
count++;
}elseif(Integer.parseInt(input2)<0){//输入的数值为负值
JOptionPane.showConfirmDialog(this,"不能输入负值,步时为"+ssBtime,
"游戏信息",JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
count++;
}else
Btime=Integer.parseInt(input2);
Game_begin();
}
4.3功能设计
4.3.1计时功能
打开游戏,再开始游戏前,进行局时和步时的设置(如图4-3,图4-4),局时是限制一盘棋的时间,时间到时就会结束该局;步时是限制走一步棋所用的时间,当一方走棋超时时,则认定该方放弃走棋,该方认输,对方获胜。
局时和步时设置时,需要输入自然数,局时是分钟数,步时是秒数;当数值设置为0时,默认为没有时间限制。
运用Thread方法定义局时、步时倒计时线程,“intJtime=0,Btime=0;”定义局时、步时限制。
“intjtime;intRbtime,Bbtime;”显示双方的局时、步时的剩余时间。
用setBounds()设置双方局时、步时在界面上的显示位置。
开始游戏后,设置局时、步时,启动局时、步时倒计时线程。
当局时或步时完毕时,结束进程,并结束游戏。
4.3.2悔棋功能
悔棋,是在误操作和失误的情况下,两方协商同意后返回到之前的状态。
定义VectorVar,保存棋子的动作;定义悔棋方法“huiqi(intn)”。
开始游戏后,当某方点击悔棋按钮时,该哪方走棋则认为是那方要求悔棋;由另一方同意悔棋后,执行“huiqi(intn)”方法,返回到该方前一步走棋状态,继续由该方走棋,并删除Var中相应的记录。
4.3.3求和和认输
求和,是在一方认为都无法战胜对手时,提出求和,另一方同意后,判定为该局为和棋,游戏结束。
认输,是一方在走投无路,或自认为自己一定会输时,主动认输,则判定对方获胜,游戏结束。
代码如下:
if(e.getSource()==qiuhe){//求和(P)
Strings1=null,s2=null;//s1表示当前走棋的玩家,s2表示另一方
if(player==1){//红方走棋,红方点的求和
s1="红方";
s2="黑方";
}else{//player==2,黑方走棋,黑方点的求和
s1="黑方";
s2="红方";
}
inttemp1=JOptionPane.showConfirmDialog(this,s1+"确认求和?
","求和",
JOptionPane.YES_NO_OPTION);
if(temp1==JOptionPane.YES_OPTION){
inttemp2=JOptionPane.showConfirmDialog(this,s1+"求和,"+s2
+"是否同意和棋?
","和棋",JOptionPane.YES_NO_OPTION);
if(temp2==JOptionPane.YES_OPTION){
//一方求和,另一方同意,双方和棋,游戏结束。
Game_over();
message.setText(null);
message.setForeground(g);
message.setText("双方和棋!
");
}
}
}elseif(e.getSource()==renshu){//认输(L)
Strings1=null,s2=null;//s1表示当前走棋的玩家,s2表示另一方
if(player==1){//红方走棋,红方点的认输
s1="红方";
s2="黑方";
message.setText(null);
message.setForeground(b);
}else{//player==2,黑方走棋,黑方点的认输
s1="黑方";
s2="红方";
message.setText(null);
message.setForeground(r);}
Game_over();
JOptionPane.showConfirmDialog(this,s1+"认输,"+s2+"获胜!
",
"获胜",JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
message.setText(s2+"获胜!
");
}
4.3.4信息帮助
信息帮助,是介绍中国象棋的基本走棋、吃棋和规则说明。
4.4界面设计
该程序界面包括:
菜单栏,信息提示,棋盘界面,计时器界面和棋子。
菜单栏包括:
开始、悔棋、求和、认输、帮助、退出。
菜单栏如图4-5所示。
菜单栏运用JMenuBar、JButton方法定义,并放置界面的顶端;用ActionListener方法设置按键监听。
图4-5菜单栏
信息提示:
是用JLabel方法显示玩家走棋、悔棋、赢棋等信息;置于菜单栏下面,并设置字体的类型、颜色和大小。
棋盘界面:
在菜单栏下面添加棋盘图片,设置棋盘位置(如图3-2),并添加鼠标监听。
棋盘由九竖十横的直线交叉组成,直线的交叉点称为棋点。
棋盘上共有九十个棋点,象棋子摆在和活动在这些棋点上。
棋盘中间没有线的空白地方,叫做“楚河汉界”;划有斜交叉线的地方,叫做“九宫”。
计时器界面:
在棋盘的右侧,显示出开始游戏设置的局时和步时,并设置字体的类型、颜色和大小。
棋子:
开始游戏,通过调用棋子图片,显示在棋盘上(如图3-3);定义数组qx[],qy[]保存棋子在棋盘上的坐标。
棋子共有三十二个,分为红棋、黑棋两组,每组各有七种,十六个,其名称和数目如下:
红棋子:
“帅”一个,“车、马、炮、相、仕”各两个,“兵”五个。
黑棋子:
“将”一个,“车、马、炮、象、士”各两个,“卒”五个。
4.5走棋和吃棋规则设计
对局时,由执红棋的一方先走,双方轮流各走一步,直至分出胜、负、和,对局即结束。
轮到走棋的一方,将某个棋子从一个交叉点移动到另一个交叉点,或者吃掉对方的棋子占领其棋点,算走了一步。
双方各走一步,称为一个回合。
走棋:
帅(将)每一步只许走一格,前进、后退、横走都可以,但不能走出“九宫”。
将和帅不允许在同一竖线上直接对面。
士每一步只许沿“九宫”斜线走一格,可进可退。
相(象)不能越过“河界”,每一步斜走两格,可进可退,即俗称“相(象)走田”。
若田字中心有棋子,则不许走过去。
马每一步走日字的对角点,可进可退,即俗称“马走日”。
如果在要去的方向有棋子挡住,俗称“蹩马腿”,不允许走过去。
车每一步沿着横线或竖线直走,不限格数。
炮在不吃棋子的时候,走法同车一样。
兵(卒)在没有过“河界”前,每步只许向前直走一格;过“河界”后,每步可向前直走或横走一格,但不能后退。
走棋和吃棋的流程图如图4-6所示。
图4-6走棋和吃棋流程图
注:
图4-6是走棋和吃棋流程图,图中①连接总体流程。
吃棋:
走一步棋时,除炮以外,如果己方棋子可以走到的位置上有对方棋子存在,就可以把对方棋子吃掉而占领那个位置。
炮吃子时必须隔一个棋子跳吃,即俗称“炮隔山打”。
吃子的一方,把被吃掉的棋子移走。
在鼠标点击监听“mouseClicked(MouseEvente)”方法中,先单击己方棋子,并保存棋子下标Man及坐标(Manx,Many),再单击可移动位置,走棋或吃子,并保存记录。
定义“booleanMove(Ex,Ey)”方法,设置棋子移动吃子规则;另外定义“booleanpaoEat(ix,iy)”方法定义炮吃子规则。
5系统测试与总结
5.1系统测试
系统测试是软件开发过程中非常重要的一个环节,它是衡量我们所开发系统的准则。
通过各种形式的测试以及相应的调试,使软件系统达到预定的要求。
通过对软件测试结果的分析可以预测软件的可靠性;反之,也可以根据对软件可靠性的要求,来决定测试和调试过程什么时候可以结束。
在软件生命周期中的每个阶段都无法避免的会出现差错,只有做好软件的测试工作,才能保证软件的安全可靠性。
象棋游戏系统最好的测试方式是通过进行象棋对弈,和各个功能的执行来测试。
5.1.1系统功能测试
在进行悔棋、认输、求和等操作时,系统运行正常。
黑方点击“悔棋”时,弹出图5-4界面,由红方同意或拒绝黑方悔棋,同意则棋盘界面回到一回合前状态,悔棋功能正常。
图5-4悔棋对话框
黑方点击“求和”时,弹出图5-5界面,由红方同意或拒绝黑方求和,同意则棋局结束,本局为和棋,求和功能正常。
图5-5求和对话框
红方点击“认输”时,弹出图5-6界面,结束棋局,黑方获胜,认输功能正常。
图5-6红方认输
5.1.2运行效果测试
开始程序后,进行对弈操作,运行正常。
程序开始运行后的效果如下图。
图5-7是开始游戏时询问对话框。
图5-8是游戏退出时的询问窗口。
图5-9是象棋游戏对弈过程中的界面。
图5-7开始对话框
图5-8退出对话框
图5-9对弈界面
由上述图所示,象棋对弈系统可以正常运行使用,各个功能已经实现,没有发生错误。
5.2总结与展望
本次课程设计充分利用自己学的Java知识,熟