Java中国象棋对弈系统毕业设计论文.docx
《Java中国象棋对弈系统毕业设计论文.docx》由会员分享,可在线阅读,更多相关《Java中国象棋对弈系统毕业设计论文.docx(36页珍藏版)》请在冰豆网上搜索。
Java中国象棋对弈系统毕业设计论文
毕业设计(论文)
中国象棋对弈系统
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
中国象棋对弈系统
摘要:
1、任务
据统计,中国有2亿人会下中国象棋,这相当于平均6至7个人中就有1人会下,可见它有着广泛的群众基础。
中国象棋对弈系统正是为这一可行性而开发设计的,玩家可以通过它很好的研究棋谱,学习中国象棋技术,提高水平。
简单的棋规,便捷的载体,使得他成为雅俗共赏的竞技项目。
该程序是一个图形界面的java中国象棋对弈系统,本系统主要实现如下目标:
(1)系统实现:
下棋界面,走棋与吃棋,胜负判断;
(2)设计象棋菜单:
新游戏,保存,打开,退出,悔棋,信息提示。
2、着重培养的能力
本课题旨在对大学期间所学基础和专业知识的全面检验与总结;提高综合运用所学专业知识分析、解决实际问题的能力;通过本课程设计使学生加深理解、巩固课堂理论知识和实验知识,使学生初步具备综合运用所学Java语言基础知识,面向对象程序设计的基本思想、方法与技术,数据结构技术等开发简单应用系统的基本能力,初步掌握软件开发中系统分析、系统设计、系统实现和系统测试等阶段的基本方法与技术,培养学生的创新意识,提高实践应用能力,为培养应用型人才服务;进行撰写技术报告、学术论文等方面的基本训练。
3、成果形式
软件系统和设计论文
关键词:
JAVA;象棋;对弈;游戏;大学;专业;能力;论文
Chinesecheseplayingsystem
Abstract:
1,task
Accordingtostatistics,Chinahas200millionpeoplecanplayChinesechess,itisequivalenttoanaverageofsixtoonein7peopleinpeople,ithasabroadmassbase.Chinachesssystemisdesignedforthefeasibilityanddevelopment,theplayercanmovethroughitverygoodresearch,learningChinesechesstechnology,improvethelevel.Simplechessrule,convenientcarrier,makehimfitathleticproject.TheprogramisagraphicalinterfaceJavaChinesechessgamesystem,thissystemmainlyrealizethefollowinggoals:
(1)systemimplementation:
chessinterface,playingchessandchess,theoutcome,
(2)designchessmenu:
anewgame,save,open,quit,HuiQi,informationprompt.
2,focusontrainingtheability
Thistopicaimstothefoundationandprofessionalknowledgeduringtheperiodofuniversitycomprehensiveinspectionandsummary;Toimprovetheintegrateduseofprofessionalknowledgetoanalysis,thesolutionactualproblemability;Throughthiscoursedesigntomakethestudentsdeepenunderstanding,consolidatetheclassroomtheoreticalknowledgeandexperimentalknowledge,makestudentshaveintegrateduseoflearnedbasicknowledgeofJavalanguage,theobject-orientedprogramdesignbasicideas,methodsandtechnology,datastructure,technologydevelopmentsimpleapplicationsystemsuchasthebasicability,preliminarygraspsoftwaredevelopment,systemanalysis,systemdesign,systemimplementationandsystemtestphaseofthebasicmethodsandtechnology,cultivatethestudents'innovationconsciousness,improvingpracticalapplicationability,tocultivateappliedtalentsservice;Writetechnicalreportsandacademicpapersofbasictraining.
3,productionforms
Softwaresystemandthedesignpaper
Keywords:
JAVA;chesegame;game;university;magor;ability;dissertation
第一章引言(概述)
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
中国象棋发展至今已有二千三、四百年的历史了,早在战国时期就有正式记载,堪称中国的国粹。
想必在未来的几年随着中国象棋在各个领域的推广,必定会带来巨大的影响和经济效益。
中国象棋对弈在中国有着悠久的历史,是二人对抗性游戏中的一种。
由于用具简单,趣味性很强,很快成为流行极为广泛的棋艺活动。
也是我国正式开展的78个体育项目之一,为促进该游戏在世界范围内的推广和普及,在中国历史上,象棋被列为士大夫们的修身之艺,现在被视为怡神益智的一种有益的游戏。
在棋艺对战中,玩家们可以从攻与防、虚与实、整体与局部等复杂关系的变化中悟出某种各种哲理。
象棋博弈是由两个玩家轮流走子,以“将死”或“困毙”对方将或帅为胜的一种棋类运动,有着数以万亿计的爱好者。
它不仅能丰富人们的文化生活,陶冶情操,更有助于开发个人智力,启迪思维,锻炼辨证分析能力和培养顽强的意志等等。
随着计算机的使用的深入普及,计算机应用技术的日益完善,人们已经和计算机有着密切的关联,在计算机上玩游戏已经大众化,给人们带来了无限的欢悦,本系统是一个小程序,只要在装有jdk中的虚拟机的计算机上即可运行,中国象棋对弈系统实现了双人对弈这个功能,可用于多人一起游戏。
而实现中国象棋对弈系统就为象棋在网络应用平台提供多人对弈打下基础。
中国象棋对弈系统主要要实现的是棋子的走法和规则,中国象棋讲究车,马,象,仕,卒,炮,将的活用;只有当将被对方玩家的棋子吃掉,则首先吃掉对方将或帅的一方就是胜利的一方。
玩家对局时,由红棋的一方先走,双方轮流各走一次,直至分出胜负,对局即结束。
轮到走棋的一方,要将某个棋子从一个十字交叉点走到另一个十字交叉点,或者吃掉对方的棋子而占领其十字交叉点,都算走一次。
双方各走一次,称为一个回合。
象棋是中华民族的传统文化,不仅在国内深受群众喜爱,而且流传国外。
第二章系统可行性分析
2.1总体分析
此次对弈系统的开发研究是大学专业知识的一次综合应用于提高,计算机主要安装jdk运行环境和Eclipse应用程序开发工具。
在技术方面,开发过程中会出现很多问题,有预想之中的,也有预想之外的,特别在图形界面的设计上遇到了很多问题,但通过进一步的学习和与指导老师的沟通,一些问题逐一被解决。
运用java,gui监听器和标准类库等知识,首先编写一个主类ChineseChess,构造一个主窗口,在中国象棋-Java版上添加一块可显示的棋盘,再插入图片CChess.GIF图片作为棋谱,再在棋盘上添加32个棋子按钮,再插入相应图片作为棋子,然后再在主窗口下面添加一块面板作为设计象棋菜单,用此菜单来用来对“新游戏,悔棋,保存,打开,退出棋谱,走棋提示”进行操作。
1.中国象棋对弈系统是:
图形界面,线程,监听器与文件等技术的综合运用。
2.图形界面的实现:
考虑到中国象棋的特点本身程序使用GridLayout布局来实现由于使用鼠标操作本身程序使用Jbutton组件。
3.对弈的实现:
利用鼠标的监听来实现对象棋走法的操作。
2.2开发环境介绍
2.2.1硬件开发环境
本系统硬件环境在操作系统在WindowsServer2003上完成编码及测试,硬件要求不高,只要有台电脑即可。
2.2.2软件开发环境
1.结合本系统的特点,只需要一个软件开发工具和一个虚拟机即可,因此需要的软件有:
2.操作系统在WindowsServer2003以上;
3.开发工具使用Eclipse;
4.在操作系统上安装jdk的开发环境以及jre(虚拟机)的运行环境。
第三章系统需求设计
中国象棋对弈系统要求实现下棋界面,利用鼠标监听来实现走棋与吃棋,胜负判断并伴有信息提示,在下棋界面下端设有象棋菜单,菜单内容包括“新游戏,保存,打开,退出,悔棋,信息提示”等相关功能。
详情如下:
1.新游戏:
开始一场新的游戏,并重新棋子初始化。
2.打开:
打开原保存的文件,并开始棋局。
3.保存:
实现棋谱的保存,并生成一个棋谱文件。
4.悔棋:
返回到上一步棋局,并开始继续下棋。
5.退出棋谱:
对话框提示,是否退出系统。
第四章详细设计
4.1功能设计
4.1.1功能说明
这个系统主要实现人人对弈,采用鼠标监听的方法来实现对棋子的移动,双方依次轮流走棋,在状态显示栏有走棋的相关提示,主要提示该轮到哪方走棋。
如果一方想要认输,在征求对方认可的情况下,点击“新游戏”开始新的一局开始对弈,如果一方想要悔棋,也是在征求对方同意的情况下,点击“悔棋”按钮,可连续悔棋。
如果遇到紧急情况或者疲惫的情况下,可点击“保存”按钮保存当前棋局,当空闲的时候可以点击“打开”按钮并找到上次保存的棋局。
为防止误操作关闭下棋界面,在退出时设有信息提示,如果确认退出,则点击“是”按钮,否则点击“否”返回下棋界面。
4.1.2对弈规则
选择红黑棋子双方可以自由商定选择,但默认是红方先手,黑方后手。
打开以前残局可按照信息提示框的提示决定哪方先手,哪方后手。
4.1.3相关类图
(图)4.1.3-1包和类
在Eclipse应用程序开发工具新建一个项目ChineseChese项目,在项目中新建包com.Larry.frame,包内包含主类ChineseChese.java,作为该程序的main方法;图形界面类CheseMainFrame.java,对界面进行设计操作;象棋走子规则类CheseRule.java,主要对各个棋子的走法规则进行控制;音乐类MusicDemo.java,主要用于背景音乐的控制。
4.1.4相关类的类图
该类图包括了各个类内的方法,详细的展示了类中的方法。
(图)4.1.4-1相关类的类图
4.2功能的实现
4.2.1图形界面的实现
图形界面的是实现主要在类ChineseMainFrame类中实现,通过继承Jframe来进行初始化操作以下是相关代码:
如(图)4.2.1-1图形界面
//创建工具栏
jmain=newJToolBar();
showAbout=newButton("关于");
showAbout.setToolTipText("关于");
text=newJLabel("热烈欢迎");
text.setToolTipText("提示信息");
anew=newButton("新游戏");
anew.setToolTipText("重新开始新的一局");
exit=newButton("退出");
exit.setToolTipText("退出本程序");
repent=newButton("悔棋");
repent.setToolTipText("返回到上次走棋的位置");
showOpen=newButton("打开");
showOpen.setToolTipText("打开以前棋局");
showSave=newButton("保存");
showSave.setToolTipText("保存当前棋局");
//把组件添加到工具栏
jmain.setLayout(newGridLayout(0,7));
jmain.add(anew);
jmain.add(repent);
jmain.add(showOpen);
jmain.add(showSave);
jmain.add(exit);
jmain.add(text);
jmain.add(showAbout);
jmain.setBounds(0,500,470,24);
con.add(jmain);
//注册按扭监听
anew.addActionListener(this);
repent.addActionListener(this);
exit.addActionListener(this);
showAbout.addActionListener(this);
showOpen.addActionListener(this);
showSave.addActionListener(this);
//添加棋盘标签
con.add(image=newJLabel(newImageIcon("images//CChess.GIF")));
image.setBounds(0,0,446,497);
image.addMouseListener(this);
//注册窗体关闭监听
this.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEventwe)
{
System.exit(0);
}
});
//窗体居中让窗体居中
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionframeSize=this.getSize();
if(frameSize.height>screenSize.height)
{
frameSize.height=screenSize.height;
}
if(frameSize.width>screenSize.Width)
{
frameSize.width=screenSize.Width;
}
this.setLocation((screenSize.Width-frameSize.width)/2-200,(screenSize.height-frameSize.height)/2-290);
this.setIconImage(newImageIcon("images\\象.GIF").getImage());
this.setResizable(false);
this.setTitle(Title);
this.setSize(450,550);
this.show();
(图)4.2.1-1图形界面
(图)4.2.3-1棋谱
4.2.2棋谱的实现
在图形界面的空白处添加棋谱图片CChese.GIF,即可显示棋谱如(图)4.2.2-1棋谱。
以下是相关代码:
//添加棋盘标签
con.add(image=newJLabel(newImageIcon("image\\CChess.GIF")));
image.setBounds(0,0,446,497);
image.addMouseListener(this);
4.2.3棋子的添加
在图形界面中添加相关棋子图片后如(图)4.2.3-1
//添加棋子标签
drawChessMan();
这是添加红色棋子的棋子“车”,采用接口的形式实现,其它棋子依此方法依次添加即可形成一个完美的棋谱了。
//车
in=newImageIcon("image\\车1.GIF");
for(i=0,k=10;i<2;i++,k+=385)
{play[i]=newJLabel(in);
play[i].setBounds(k,10,40,40);
play[i].setName("车1");
}
(图)4.2.3-1添加棋子
(图)4.2.5-1版本信息
4.2.4背景音乐
在游戏过程中,时间长了往往会感觉到疲惫,来首优雅的背景音乐既可以消除疲劳,也可以缓解压力,从而带来身心的愉悦,本系统添加了一首流行音乐作为背景音乐,背景音乐能使玩家感觉到游戏中的气氛,使玩家容易进入游戏状态,还可以给玩家留下一个好印象,衬托游戏的场景,好的游戏背景也能表现出游戏的水准。
主要用以下方法实现:
try
{
Filemusic=newFile("许佳慧-预谋.wav");
AudioClipac=Applet.newAudioClip(music.toURL());
ac.loop();
}
catch(Exceptione)
{
e.printStackTrace();
}
}
4.2.5版本信息
点击图形界面中的“关于”按钮,即可显示(图)4.2.5-1所示的内容,主要显示系统名,版本号以及制作者,点击“确定按钮”结束浏览。
主要代码设计如下
setBounds(200,100,300,200);
setTitle("版本信息");
this.setIconImage(ico.getImage());
label=newJLabel("
中国象棋对弈系统
版本号:
v1.0
制作者:
XXXX
导师:
XXXX",JLabel.LEFT);
pane=newJPanel();
ok=newJButton("确定");
ok.addActionListener(this);
pane.add(ok);
add(pane,BorderLayout.SOUTH);
add(label,BorderLayout.CENTER);
在此,也可用此方法为象棋对弈系统添加,对弈规则以及说明书等介绍,为玩家提供更方便的游戏体验。
4.2.6新游戏
在游戏进行过程中,往往会因某种原因会重新开始游戏,玩家不可能重新开启游戏客户端,为了给玩家更好的游戏体验,设置重新开始游戏是必不可少的功能。
重新开始游戏后,会重新排列棋子返回原位。
以下是红子“车”的排列方法,通过坐标把相应的棋子排列,其它棋子排列与此方法相似,只是坐标不同。
//重新排列每个棋子的位置
//车
for(i=0,k=10;i<2;i++,k+=385)
{
play[i].setBounds(k,10,40,40);
}
4.2.7保存与打开
在一个系统中保存与打开文件是必不可少的操作,保存一个游戏进度可以省去很多不必要的麻烦,当对弈双方遇到得不暂停游戏的情况,双方又不想轻易放弃此局,保存游戏进度的功能就非常人性化的解决了这个问题,以下就是保存游戏进度的相关代码,通过文件流的方式把内存里的数据读出来,在保存在一个新的文件中,并保存所有棋子的坐标是否可见和哪方吃子。
try
{//保存对话框
JFileChooserjfcSave=newJFileChooser("保存当前棋局");
intv=jfcSave.showSaveDialog(this);
if(v!
=JFileChooser.CANCEL_OPTION)
{
FileVar.removeAllElements();
//保存所有棋子的坐标和是否可见
for(inti=0;i<32;i++)
{
FileVar.addElement(newInteger(play[i].getX()));
FileVar.addElement(newInteger(play[i].getY()));
FileVar.addElement(newBoolean(play[i].isVisible()));
}
//保存当前该哪方吃棋
FileVar.add(text.getText());
//保存到文件
FileOutputStreamfileOut=newFileOutputStream(jfcSave.getSelectedFile());
ObjectOutputStreamobjOut=newObjectOutputStream(fileOut);
objOut.writeObject(FileVar);
objOut.close();
fileOut.close();
}
打开理论上和保存一样,首先会弹出一个对话框“打开”,会删除集合里的所有信息,删