Java连连看课程设计.docx

上传人:b****6 文档编号:12789471 上传时间:2023-06-08 格式:DOCX 页数:56 大小:840.46KB
下载 相关 举报
Java连连看课程设计.docx_第1页
第1页 / 共56页
Java连连看课程设计.docx_第2页
第2页 / 共56页
Java连连看课程设计.docx_第3页
第3页 / 共56页
Java连连看课程设计.docx_第4页
第4页 / 共56页
Java连连看课程设计.docx_第5页
第5页 / 共56页
Java连连看课程设计.docx_第6页
第6页 / 共56页
Java连连看课程设计.docx_第7页
第7页 / 共56页
Java连连看课程设计.docx_第8页
第8页 / 共56页
Java连连看课程设计.docx_第9页
第9页 / 共56页
Java连连看课程设计.docx_第10页
第10页 / 共56页
Java连连看课程设计.docx_第11页
第11页 / 共56页
Java连连看课程设计.docx_第12页
第12页 / 共56页
Java连连看课程设计.docx_第13页
第13页 / 共56页
Java连连看课程设计.docx_第14页
第14页 / 共56页
Java连连看课程设计.docx_第15页
第15页 / 共56页
Java连连看课程设计.docx_第16页
第16页 / 共56页
Java连连看课程设计.docx_第17页
第17页 / 共56页
Java连连看课程设计.docx_第18页
第18页 / 共56页
Java连连看课程设计.docx_第19页
第19页 / 共56页
Java连连看课程设计.docx_第20页
第20页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java连连看课程设计.docx

《Java连连看课程设计.docx》由会员分享,可在线阅读,更多相关《Java连连看课程设计.docx(56页珍藏版)》请在冰点文库上搜索。

Java连连看课程设计.docx

Java连连看课程设计

(此文档为word格式,下载后您可任意编辑修改!

摘要

关键字:

发展,java,连连看,程序设计;

现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握现代科学技术知识,以适应社会的发展,能够独立完成面临的任务,作一名有创新意识的新型人才。

Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。

Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。

有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。

连连看游戏是一种很流行的小游戏,记得在小时候去游戏厅玩的时候就有两台专门的连连看的机器(当然当时不叫这个名字),一个是连麻将牌、另一个是连水果图片。

当时的麻将牌分好几层,相邻层的牌还可以连,看得人眼花缭乱。

作为一个java初学者,我所编辑的“悠嘻猴连连看”小游戏,只有几个基本功能:

“开始”“再来一局”炸弹“重新开始”“退出”。

我所选中给出的游戏界面很漂亮,不过似乎图形只有一层,而且数量也不是很多,只有64张图,降低了不少难度。

摘要I

第1章需求分析1

1.1功能分析1

1.2流程图2

第2章详细设计3

2.1课程设计目的3

2.2课程设计的实验环境3

2.3课程设计的预备知识3

2.4课程设计要求3

2.5连连看算法设计4

2.6类的实现方法4

2.6.1成员变量4

2.6.2方法设计5

第3章测试分析7

3.1程序运行情况7

3.2测试计划及分析9

3.2.1检验的先后顺序9

3.2.2程序异常处理9

第4章课程设计总结10

附件A1

参考资料26

第1章需求分析

1.1功能分析

每次用户选择两个图形,如果图形满足一定条件(两个图形一样,且这两个图形之间存在转弯少于3的路径),则两个图形都能消掉。

给定任意具有相同图形的两个格子,我们需要寻找这两个格子之间在转弯最少的情况下,经过格子数目最少的路径。

如果这个最优路径的转弯数目少于3,则这两个格子可以消去。

将界面中相同的猴子图片消去,游戏限时1000秒,如果在规定的时间内没有完成,就会跳出对话框“笨蛋!

游戏时间到!

GAMEOVER!

”的字样。

如果玩家赢了这局,还没有过瘾的话,可以单击“再来一局”。

判断游戏是否结束。

如果所有图形全部消去,或者游戏玩家不可能再消去任意两个格子的时候,游戏应该结束。

后一种情况,我们称之为“死锁”。

在死锁的情况下,我们也可以暂时不终止游戏,而是随机打乱局面,使得打破“死锁”局面。

不管怎样,我们需要判别游戏当前状态是否为“死锁”状态。

我们首先思考问题:

怎么判断两个图形能否相消?

前面分析中,我们已经知道,两个图形能够相消,当且仅当这两个图形相同,且它们之间存在路径转弯数目小于3。

因此,我们主要需要解决的问题还是,怎样求出相同图形之间的最短路径?

这个最短的路径,我们首先需要保证转弯数目最少。

在转弯数目最少的情况下,经过的格子数目要尽可能地少。

在经典的最短路问题中,我们需要求出经过格子数目最少的路径。

而这里,要保证转弯数目最少,需要把最短路问题的目标函数修改为从一个点到另一个点的转弯次数。

虽然,目标函数修改了,但算法的框架仍然可以保持不变。

广度优先搜索是解决经典最

短路问题的一个思路。

我们看看在新的目标函数(转弯数目最少)下,如何用广度优先搜索来解决图形A(x1,y1)和图形B(x2,y2)之间的最短路问题。

1.2流程图

第2章详细设计

2.1课程设计目的

《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。

实践教学环节是必不可少的一个重要环节。

本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

2.2课程设计的实验环境

硬件要求能运行Windows9.X操作系统的微机系统。

JAVA程序设计语言及相应的集成开发环境,UltraEdit-32开发工具。

2.3课程设计的预备知识

熟悉JAVA语言及UltraEdit-32开发工具。

2.4课程设计要求

按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。

要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。

同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

2.5连连看算法设计

在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。

*分3种情况:

(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。

这样就会有三条路经。

若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)

*1.相邻

*2.若不相邻的先在第一个按钮的同行找一个空按钮。

1).找到后看第二个按钮横向到这个空按钮所在的列是否有按钮。

2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。

3).没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。

没有的话路经就通了,可以消了.

*3.若2失败后,再在第一个按钮的同列找一个空按钮。

1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。

3).没有的话,再从与第一个按钮同列的那个空按钮横向到与第二个按钮同列看是否有按钮。

没有的话路经就通了,可以消了。

*若以上三步都失败,说明这两个按钮不可以消去。

2.6类的实现方法

2.6.1成员变量

成员变量也叫类的属性,一般带有访问控制属性的,而全局变量虽然也有类的属性,但全局变量严重影响了封装和模块化,一般的全局变量前面要加上static和fina属性其中,static使该变量任何类都可用(方法ClassName.全局变量名),而fina则使得变量不可更改,基本上算是常量了,这也在一定程度上防止对变量的非法修改。

表2-6-1成员变量

成员变量描述

变量类型

名称

文件

File

File

文件区

Jtextarea

Textarea

菜单项

Jmenuitem

Menuitem_copy

菜单

Umenuitem

Umenuitem

标签

Jlabel

Label_seek

文件名

String

Seel

2.6.2方法设计

方法名称为任何合乎语法的识别字,返回值类型是方法执行结果返回给调用者的数据类型,void表示没有返回值,参数行(parameter list)是调用时给予的参数声明,两个以上的参数声明以逗号隔开,若没有参数则参数行为空白,调用时每一个参数对应一个参数值(argument)大括号内为方法本体,也称为方法程序模块(block),包含声明(declarations)和语句(statements),声明也可以掺杂在语句之间。

一个方法不能声明在另一个方法内。

表2-6-2方法定义

方法名

功能

备注

MyTextEditor

创建文本编辑器

构造方法

Dialog

创建对话框

addMenu

添加菜单栏菜单项

writeToFile

向文本区写文件

readFromFile

读文件

openDialog

打开文件

saveDialog

保存对话框

actionPerformed

事件处理

itemStateChanged

ItemListener事件处理方法

mouseClicked

鼠标处理事件

接口方法

mouseEvent

鼠标处理事件

接口方法

mouseReleased

鼠标处理事件

接口方法

mouseEntered

鼠标处理事件

接口方法

mouseExit

鼠标处理事件

接口方法

mouseDragged

鼠标处理事件

接口方法

Main

程序开始运行

第3章测试分析

3.1程序运行情况

连连看游戏规则很简单,就是点中两个互相匹配并且可以通过不多于两个折点的折线连在一起的方块后,这两个方块就可以消掉。

图1初始界面

菜单选项中,包括“开始游戏”、“重新开始”、“炸弹”、“退出”功能。

当选择炸弹功能时:

每次含有三个炸弹,所炸的位置也是随机的;

图2游戏界面

粗略想来,由于用户每次只能消除一对图形,即只会用到一个最短路径,但由于实现并不知道用户会选择哪一对图形,所以需要事先计算出所有可能的最短路径并保存起来。

此外,采用这种方法的话似乎每次用户消去一对相同图像之后都需要重新计算出当前所有可能被连接的相同图形之间最短路径,这是因为当某些图像被消去之后可能会产生很多新路径,而我们又不能确定这些空出来的格子到底能够影响哪些路径,所以就只好都重新计算一遍。

其缺点很明显就是每次消去图形动作之后重新计算所有可能的最短路径所需要消耗的时间;而该方法的优点则是可以很快地判断两个相同图形之间是否存在满足条件的最短路径。

如果用户很厉害,每次都能选中可以消除的图形对,那么用这种方法浪费的时间就会相当可观,毕竟用户未选中的其他可以连接的图形对之间的最短路径都被浪费掉了;而如果用户很差劲,每轮选择的次数都远远大于当前可能的连接数量时,该方法就会比书中正文提到的方法高效。

但这种情况是比较少的,因为在整个游戏中用户主要是会用眼睛“找”而不是频繁的用鼠标去“试”。

所以总的来看,维护所有最短路径的方法的效率相对比较低。

游戏结束后,在页面出现对话框,询问玩家是否进行下一局。

3.2测试计划及分析

3.2.1检验的先后顺序

在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。

所以,这里应该先检验配对,如果该条件不成立的话,就不要再进行连线检查了,这样可以避免很多不必要的复杂运算。

当然,如果你在做这个游戏的时候,配对规则不够如此简单的话,那么就看哪个算起来麻烦就把它放在后面。

3.2.2程序异常处理

本程序没有涉及到程序的异常处理,只有关于“死锁”问题,本质上还是判别两个格子是否可以消去的问题。

最直接的方法就是,对于游戏中尚未消去的格子,两两都计算一下,它们是否可以消去。

此外,从上面的广度优先搜索可以看出,我们每次都是扩展出起始格子A(x1,y1)能够到达的格子。

也就是说,对于每一个格子,我们可以调用一次上面的扩展过程,得到所有可以到达的格子,如果这些格子中有任意一个跟起始格子的图形一致,则它们可以消去,目前游戏还不是“死锁”状态。

第4章课程设计总结

通过这次课程设计还使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,并且还发现了自己的许多不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

但通过这次课程设计之后,一定把以前所学过的知识重新温故。

我完成了这次JAVA课程设计,不过这只是我学习路上的驿站。

我相信我在未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学习中去。

在这里谢谢老师的指导,我会更加努力的学习

附件A

**********************************************************

*类名:

MainFrame

*作用:

自定义主类,对鼠标拖拽的初始界面进行声明*

*继承的父类:

JFrame类*

*实现的接口:

Strings*

**********************************************************

importjava.awt.*;

importjavax.swing.*;

importcn.elva.Settings;

importcn.elva.model.Map;

publicclassMainFrameextendsJFrame{

privatestaticfinallongserialVersionUID=1L;

炸弹的次数

privateintbombCount=Settings.BOMBCOUNT;

privateJPaneljContentPane=null;

privateJMenuBarmenuBar=null;

privateJMenufileMenu=null;

privateJMenuItemreloadItem=null;

privateJMenuItemstartItem=null;

炸弹

privateJMenuItembombItem=null;

privateJMenuItemexitItem=null;

privateMapUImapUI=null;

游戏开始时间

privatelongstartTime;

结束时间

privatelongendTime;

privateTimertimer=null;

privateJMenuItemti

privateJMenuBarinitMenuBar(){

if(menuBar==null){

menuBar=newJMenuBar();

fileMenu=newJMenu("菜单");

startItem=newJMenuItem("开始游戏");

startItem.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

reload();

}

});

reloadItem=newJMenuItem("重新开始");

reloadItem.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

reload();

}

});

bombItem=newJMenuItem("炸弹");

bombItem.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

if(bombCount==0){

JOptionPane.showMessageDialog(MainFrame.this,"三枚炸弹已用完!

!

!

");

bombItem.setEnabled(false);

return;

}

mapUI.bomb();

bombCount--;

}

});

exitItem=newJMenuItem("退出");

exitItem.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

System.exit(0);

}

});

fileMenu.add(startItem);

fileMenu.add(reloadItem);

fileMenu.add(bombItem);

fileMenu.add(exitItem);

menuBar.add(fileMenu);

}

returnmenuBar;

}

publicstaticvoidmain(String[]args){

自动生成方法存根

SwingUtilities.invokeLater(newRunnable(){

publicvoidrun(){

MainFramethisClass=newMainFrame();

thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

thisClass.setVisible(true);

}

});

}

publicMainFrame(){

super();

initialize();

}

privatevoidinitialize(){

this.setSize(650,650);

this.setTitle("llk");

this.setJMenuBar(initMenuBar());

this.setTitle("悠嘻猴连连看");

}

privatevoidreload(){

mapUI=newMapUI();

startTime=System.currentTimeMillis()1000;

endTime=startTime+Settings.PERTIME;

jContentPane=newJPanel();

jContentPane.setLayout(newBorderLayout());

jContentPane.add(mapUI);

this.setContentPane(jContentPane);

this.validate();

Map.LEFTCOUNT=Settings.ROWS*Settings.COLUMNS;

initTimer();

bombItem.setEnabled(true);

bombCount=Settings.BOMBCOUNT;

}

privatevoidinitTimer(){

ActionListeneractionListener=newActionListener(){

publicvoidactionPerformed(ActionEvente){

startTime=System.currentTimeMillis()1000;

if(startTime==endTime){

JOptionPane.showMessageDialog(MainFrame.this,"笨蛋!

时间到!

GAMEOVER!

!

");

intresult=JOptionPane.showConfirmDialog(MainFrame.this,

"重玩一次?

","Again",JOptionPane.YES_NO_CANCEL_OPTION);

if(result==JOptionPane.YES_OPTION){

reload();

}

else{

jContentPane.setVisible(false);

validate();

}

}

}

};

timer=newjavax.swing.Timer(1000,actionListener);

timer.start();

}

}

**********************************************************

*类名:

MapUI

*作用:

定义按钮和炸弹功能*

*继承的父类:

JPanel类*

*实现的接口:

Stings*

**********************************************************

importjava.awt.*;

importjavax.swing.*;

importcn.elva.Settings;

importcn.elva.model.ArrayPoint;

importcn.elva.model.Map;

publicclassMapUIextendsJPanelimplementsActionListener{

privatestaticfinallongserialVersionUID=1L;

棋子数组,用按钮来表示

privateChessButton[]chesses=null;

数据模型

privateMapmap=newMap();

判断当前点击的棋子是否是第二次选中的

privatebooleantwo=false;

前面点的那个棋子

privateArrayPointpriviousPoint;

第二次选中的棋子

privateArrayPointcurrPoint;

构造函数

publicMapUI(){

super();

initialize();

}

初始化函数

privatevoidinitialize(){

initChesses();

GridLayoutgridLayout=newGridLayout(Settings.ROWS+2,

Settings.COLUMNS+2);

gridLayout.setHgap

(2);

gridLayout.setVgap

(2);

this.setLayout(gridLayout);

this.setSize(300,200);

放置按钮,按行

for(introw=0;row

for(intcol=0;col

add(chesses[row*(Settings.COLUMNS+2)+col]);

}

}

}

privatevoidinitChe

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2