java课程设计模版.docx
《java课程设计模版.docx》由会员分享,可在线阅读,更多相关《java课程设计模版.docx(34页珍藏版)》请在冰豆网上搜索。
java课程设计模版
课程设计(论文)任务书
学 院 专 业2 班号
一、课程设计(论文)题目:
人机对弈五子棋游戏
二、课程设计(论文)工作:
自2015年6月23日起至2015年6月25日止
三、课程设计(论文)地点:
5-205
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)使学生掌握软件开发的基本工作流程;
(2)巩固JAVA程序设计课程所学的内容;
(3)培养学生的计算机思维能力以及合作的精神;
(4)培养学生分析、解决问题的能力;
(5)提高学生的科技论文写作能力。
2.课程设计的任务及要求
1)基本要求:
(1)研究课程设计任务,并进行系统需求分析;
(2)对系统进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;
(3)实现各功能模块代码;
(4)系统组装,测试、完善系统。
2)创新要求:
在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。
3)课程设计论文编写要求
(1)要按照书稿的规格打印誊写课程设计论文
(2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结
(3)论文装订按学校的统一要求完成
4)参考文献:
(1)丁振凡,《JAVA语言程序设计》,清华大学出版社
(2)丁振凡,《JAVA语言程序设计实验指导与习题解答》,清华大学出版社
(3)
5)课程设计进度安排
内容天数地点
系统总体设计1实验室
软件设计及调试2实验室
答辩及撰写报告2实验室、图书馆
学生签名:
2015年6月25日
课程设计(论文)评审意见
(1)课程设计过程(20分):
优( )、良( )、中( )、一般( )、差
();
(2)是否完成调试,系统运行效果(30分):
优( )、良( )、中( )、
一般()、差();
(3)回答问题(20分):
优( )、良( )、中( )、一般( )、差( );
(4)课程设计报告(30分):
优( )、良( )、中( )、一般( )、差
();
(5)格式规范性及考勤是否降等级:
是( )、否( )
评阅人:
职称:
教授
2015年6月27日
人机对弈五子棋游戏设计
摘要:
近些年来五子棋游戏成为了人们的最爱,游戏的下载量很高可以说一直排在前几位,也是人们日常生活中放松娱乐的最爱,特别是最近IT行业的发展,人工智能的实现,移动客户端的发展和普及为我们五子棋游戏的发展带来了新的生机,新的高潮,人工智能与五子棋的完美结合是五子棋的又一项重要发展,而我们现在开发的人机对弈更是掀起了五子棋发展的新篇章,为五子棋的发展与传播提供了新的机会,但是机会与挑战并存,我们相信通过我们对五子棋程序的不断优化和完善,五子棋一定会越来越受到大家的欢迎。
五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。
在Windows操作系统下,用VC++实现了这个人机对战的五子棋程序。
采用了博弈树的方法,应用了剪枝和最大最小树原理进行搜索发现最好的下子位置。
介绍了五子棋程序的数据结构、评分规则、胜负判断方法和搜索算法过程。
目录
1、项目内容、要求与分组情况总体介绍1
2、概要设计1
2.1开发工具及环境1
2.2任务及需求分析1
2.3工作原理1
3、具体实现1
3.1类设计1
3.2关键技术处理2
4、运行调试与分析讨论3
5、设计体会与小结3
6、参考文献4
附录:
(源程序)4
1、项目内容、要求与分组情况总体介绍
本次实验的目标是制作一个计算器,可以进行简单的四则运算(加、减、乘、除)。
小组的具体分工情况见下表:
2、概要设计
2.1开发工具及环境
文本编辑器:
记事本;
运行环境:
命令提示符(DOS环境)。
2.2任务及需求分析
设计简易计算器程序,实现简单的运算(加减乘除),具体任务如下:
(1)计算器窗口界面布局设计;
(2)各种计算功能的算法分析;
(3)编程实现具体的计算功能,实现类的封装处理;
(4)运行测试程序,调试纠正运行错误。
2.3工作原理
(1)工作过程
点击相应的数字键,即会在显示文档中显示该数字。
进行相应的运算,首先输入第一个计算数字,然后输入运算符,再输入第二个计算数字,点击“=”按钮即得计算结果。
同时,还有归零功能,点击该按钮,显示栏中即可归零。
(2)工作原理
利用图形界面编程实现,利用到的知识点包括:
❑窗体的创建和应用界面布局;
❑事件处理,包括按钮的动作事件处理,窗体事件。
❑接口知识:
事件处理中通过接口约束事件监听者必须实现相应接口中定义的方法。
❑流程控制语句:
通过条件判断区分不同按钮,作不同操作处理。
3、具体实现
3.1类设计
(1)类名:
jisuanqi
作用:
实现窗口的布局设定,事件注册。
该类继承WindowAdapter类。
类中含有的方法介绍:
❑frame()方法:
实现窗体的界面布局及按钮的事件注册。
❑main()方法:
应用程序的入口,完成创建对象并调用frame()方法。
(2)类名:
close
该类为jisuanqi的内嵌类,作用是实现对关闭按钮的动作事件监听处理。
该类实现ActionListener接口。
类中含有的方法介绍:
❑actionPerformed方法:
实现关闭按钮的动作事件处理。
(3)类名:
buttonlistener
该类为jisuanqi的内嵌类,作用是实现计算器中数字按钮和各类运算按钮等的动作事件监听处理。
该类实现ActionListener接口。
类中含有的方法介绍:
❑actionPerformed方法:
实现各类按钮的动作事件处理。
❑jisuan()方法:
实现具体运算操作。
3.2关键技术处理
(1)窗体界面设计及注册事件监听
Framefm=newFrame("简单计算器");
for(inti=0;i<=16;i++){
b[i]=newButton(ss[i]);
}
for(inti=0;i<=15;i++){
p2.add(b[i]);
}//创建按钮并添加到P2
b[16].setBackground(Color.yellow);
txt=newTextField(15);
txt.setEditable(false);
for(inti=0;i<=16;i++){
b[i].addActionListener(newbuttonlistener());
……
}
注:
此方法主要设置窗口、面板、各个按键。
对各个按键进行定义(定义好各按键该实现什么功能)、排布,将各个按键注册到监听器上。
(2)按钮事件处理
❑区分事件源:
通过事件对象的getSource()方法得到事件源。
关键代码如下:
Buttonbtn=(Button)e.getSource();
if(btn.getLabel()=="="){
……
}
❑改变计算器的结果。
更改文本框的显示,先读原有的数据。
txt.setText(txt.getText()+btn.getLabel());
❑清除计算器的显示
if(btn.getLabel()=="归零")
txt.setText("");
(3)窗体关闭
classcloseimplementsActionListener{//退出
publicvoidactionPerformed(ActionEvente){
System.exit(0);
}
}
【注】也可以执行窗体的dispose()方法实现窗体关闭。
(4)记住前一个运算符
引入一个字符串类型的类变量s记录前一个运算符,每次按运算符是先执行前一个运算符的结果。
4、运行调试与分析讨论
调试运行4*5运算,运算过程如下所示:
测试程序,点击数字键可将数据输入到文本框,点击“+”、“-”、“*”、“/”按钮可进行前一个运算,点击“=”可完成整个运算。
从而达到能进行加、减、乘、除运算的简易计算器的功能。
点击关闭图标可关闭计算器。
5、设计体会与小结
通过独立完成五子棋对弈系统的后,发现自己在进行软件开发方面提高不少,同时积极利用所学到的新技术用于自己的设计开发过程。
另外,在整个开发的过程中,时间也比较仓促。
因此,该系统必然会存在一些缺陷和不足。
如:
没有讨论五子棋禁手的问题。
另一个就是电脑按即定的算法去与玩家下子。
这种算法有“固定”。
不太会变,玩家若是仔细观察,可以掌握其规律。
还有就是界面不是很华丽有待改进。
尽管本系统存在着很多不足,但其实现了最重要的功能就是有人工智能。
这也让我对计算机中的人工智能领域有一定的了解。
另一个就在做系统的过程中,我学到了Visual C++的一些基本结构,尤其对于MFC有一定的了解。
还有就是对于C++有更深一步的认识。
6、参考文献
[1]丁振凡,《JAVA语言程序设计》,清华大学出版社.
[2]丁振凡,《JAVA语言程序设计实验指导与习题解答》,清华大学出版社.
[3][4]
附录:
(源程序)
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classChessFrameextendsJFrameimplementsActionListener{
privateString[]strsize={"标准棋盘","大号棋盘","超大号棋盘"};
privateString[]strmode={"人机对弈","人人对战"};
publicstaticbooleaniscomputer=true,checkcomputer=true;
privateintwidth,height;
privateChessModelcm;
privateMainPanelmp;
publicChessFrame(){
this.setTitle("五子棋游戏");
cm=newChessModel
(1);
mp=newMainPanel(cm);
Containercon=this.getContentPane();
con.add(mp,"Center");
this.setResizable(false);
this.addWindowListener(newChessWindowEvent());
MapSize(14,14);
JMenuBarmbar=newJMenuBar();
this.setJMenuBar(mbar);
JMenugameMenu=newJMenu("游戏");
mbar.add(makeMenu(gameMenu,newObject[]{
"再来一局",null,"棋盘",null,"模式",null,"认输",null,"悔棋",null,"退出"},this));
JMenulookMenu=newJMenu("外观");
mbar.add(makeMenu(lookMenu,newObject[]{"类型一","类型二","类型三"},this));
JMenuhelpMenu=newJMenu("版本");
mbar.add(makeMenu(helpMenu,newObject[]{"关于"},this));
}
publicJMenumakeMenu(Objectparent,Objectitems[],Objecttarget){
JMenum=null;
if(parentinstanceofJMenu)
m=(JMenu)parent;
elseif(parentinstanceofString)
m=newJMenu((String)parent);
else
returnnull;
for(inti=0;iif(items[i]==null)
m.addSeparator();
elseif(items[i]=="棋盘"){
JMenujm=newJMenu("棋盘");
ButtonGroupgroup=newButtonGroup();
JRadioButtonMenuItemrmenu;
for(intj=0;jrmenu=makeRadioButtonMenuItem(strsize[j],target);
if(j==0)
rmenu.setSelected(true);
jm.add(rmenu);
group.add(rmenu);
}
m.add(jm);
}elseif(items[i]=="模式"){
JMenujm=newJMenu("模式");
ButtonGroupgroup=newButtonGroup();
JRadioButtonMenuItemrmenu;
for(inth=0;hrmenu=makeRadioButtonMenuItem(strmode[h],target);
if(h==0)
rmenu.setSelected(true);
jm.add(rmenu);
group.add(rmenu);
}
m.add(jm);
}else
m.add(makeMenuItem(items[i],target));
returnm;
}
publicJMenuItemmakeMenuItem(Objectitem,Objecttarget){
JMenuItemr=null;
if(iteminstanceofString)
r=newJMenuItem((String)item);
elseif(iteminstanceofJMenuItem)
r=(JMenuItem)item;
else
returnnull;
if(targetinstanceofActionListener)
r.addActionListener((ActionListener)target);
returnr;
}
publicJRadioButtonMenuItemmakeRadioButtonMenuItem(
Objectitem,Objecttarget){
JRadioButtonMenuItemr=null;
if(iteminstanceofString)
r=newJRadioButtonMenuItem((String)item);
elseif(iteminstanceofJRadioButtonMenuItem)
r=(JRadioButtonMenuItem)item;
else
returnnull;
if(targetinstanceofActionListener)
r.addActionListener((ActionListener)target);
returnr;
}
publicvoidMapSize(intw,inth){
setSize(w*24,h*27);
if(this.checkcomputer)
this.iscomputer=true;
else
this.iscomputer=false;
mp.setModel(cm);
mp.repaint();
}
publicbooleangetiscomputer(){
returnthis.iscomputer;
}
publicvoidrestart(){
intmodeChess=cm.getModeChess();
if(modeChess<=3&&modeChess>=0){
cm=newChessModel(modeChess);
MapSize(cm.getWidth(),cm.getHeight());
}
}
publicvoidactionPerformed(ActionEvente){
Stringarg=e.getActionCommand();
try{
if(arg.equals("类型三"))
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
elseif(arg.equals("类型二"))
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.motif.MotifLookAndFeel");
else
UIManager.setLookAndFeel(
"javax.swing.plaf.metal.MetalLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
}catch(Exceptionee){}
if(arg.equals("标准棋盘")){
this.width=14;
this.height=14;
cm=newChessModel
(1);
MapSize(this.width,this.height);
SwingUtilities.updateComponentTreeUI(this);
}
if(arg.equals("大号棋盘")){
this.width=18;
this.height=18;
cm=newChessModel
(2);
MapSize(this.width,this.height);
SwingUtilities.updateComponentTreeUI(this);
}
if(arg.equals("超大号棋盘")){
this.width=22;
this.height=22;
cm=newChessModel(3);
MapSize(this.width,this.height);
SwingUtilities.updateComponentTreeUI(this);
}
if(arg.equals("人机对弈")){
this.checkcomputer=true;
this.iscomputer=true;
cm=newChessModel(cm.getModeChess());
MapSize(cm.getWidth(),cm.getHeight());
SwingUtilities.updateComponentTreeUI(this);
}
if(arg.equals("人人对战")){
this.checkcomputer=false;
this.iscomputer=false;
cm=newChessModel(cm.getModeChess());
MapSize(cm.getWidth(),cm.getHeight());
SwingUtilities.updateComponentTreeUI(this);
}
if(arg.equals("再来一局")){
restart();
}
if(arg.equals("悔棋")){
if(!
checkcomputer){
intresult=JOptionPane.showConfirmDialog(this,(FiveChessAppletDemo.isBlack==false?
"白方悔棋,黑方是否同意?
":
"黑方悔棋,白方是否同意?
"));
if(result==0){
JOptionPane.showMessageDialog(this,"双方同意悔棋决定,棋盘清空!
请继续...");
restart();
}
}
}
if(arg.equals("认输")){
intresult=JOptionPane.showConfirmDialog(this,"是否认输?
");
if(result==0){
JOptionPane.showMessageDialog(this,"游戏结束,"+(FiveChessAppletDemo.isBlack==true?
"黑方认输,白方获胜!
":
"白方认输,黑方获胜!
"));
}
}
if(arg.equals("关于"))
JOptionPane.showMessageDialog(null,"制作者:
\n制作时间:
2015年6月25日","课程设计制作介绍",JOptionPane.PLAIN_MESSAGE);
if(arg.equals("退出"))
System.exit(0);
}
}
classChessModel{
privateintwidth,height,modeChess;
privateintx=0,y=0;
privateint[][]arrMapShow;
privatebooleanisOdd,isExist;
publicChessModel(){}
publicChessModel(intmodeChess){
this.isOdd=true;
if(modeChess==1){PanelInit(14,14,modeChess);}
if(modeChess==2){PanelInit(18,18,modeChess);}
if(modeChess==3){PanelInit(22,22,modeChess);}
}
privatevoidPanelInit(intwidth,intheight,intmodeChess){
this.width=width;
this.height=height;
this.modeChess=modeChess;
arrMapShow=newint[width+1][height+1];
for(inti=0;i<=width;i++)
for(intj=0;j<=height;j++)
arrMapShow[i][j