JAVA课程设计连连看游戏的开发.docx
- 文档编号:6766595
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:24
- 大小:758.66KB
JAVA课程设计连连看游戏的开发.docx
《JAVA课程设计连连看游戏的开发.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计连连看游戏的开发.docx(24页珍藏版)》请在冰豆网上搜索。
JAVA课程设计连连看游戏的开发
湖南涉外经济学院
课程设计报告
课程名称:
程序设计实训
报告题目:
连连看游戏的开发
学生姓名:
所在学院:
专业班级:
学生学号:
指导教师:
2013年6月20日
课程设计任务书
报告题目
连连看游戏的开发
完成时间
2013-6
学生姓名
专业班级
职称
讲师
总体设计要求和技术要点
设计一个连连看游戏程序,游戏程序的功能需求如下:
游戏区是一个包含了多种不同花色游戏牌的二维棋盘,棋盘的行数和列数可以自行定义。
每一种花色的游戏牌的数量都是偶数。
两张花色相同的游戏牌的之间的路径如果满足以下条件,这两张游戏牌即可消去:
路径连线由不多于3条的水平和垂直的线段构成,任何一条线段都不能穿越其他的游戏牌,但可以不在棋盘中,路径两端的游戏牌必须具有相同的花色。
游戏只要用鼠标即可进行操作。
最初棋盘里布满了游戏牌,游戏开始时进行计时。
第一次使用鼠标点击棋盘中的游戏牌,该游戏牌此时为“被选中”,以特殊方式显示;再次以鼠标点击其他游戏牌,若该游戏牌与被选中的游戏牌两者花色相同,且把第一张游戏牌到第二张游戏牌连起来,中间的线段不超过3条,则消掉这一对游戏牌,否则第一张游戏牌恢复成未被选中状态,而第二张游戏牌变成被选中状态。
每消去一对游戏牌,应检查棋盘内是否至少还存在一对能消去的游戏牌,如果不存在,则在原有位置对游戏牌进行重排,直到至少存在一对能够消去的游戏牌。
如果在指定的时间内消去了所有的游戏牌,游戏胜利;如果时间耗尽还未能消除全部的游戏牌,游戏失败。
要求每人独立完成,使用主流开发工具,尽可能采用面向对象方法,在设计判断两张相同花色游戏牌能否消去的算法时,尽可能使用状态空间搜索算法(如回溯法、分支限界法等),要求代码的具有一定的可读性、可维护性和可扩充性。
可以参考教师给定的程序或者其他程序,但程序和报告严禁全盘抄袭。
工作内容及时间进度安排
第11周~第12周:
对需要开发的软件进行需求分析和软件设计
第13周:
论证方案设计
第14周~第16周:
程序设计
第17周:
测试、修改程序,撰写报告
第18周:
验收答辩
课程设计成果
1.与设计内容对应的软件程序
2.课程设计总结报告
摘要
近年来,Java作为一种新的编程语言,以其可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
本设计报告阐述了连连看游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。
连连看游戏有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。
这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。
连连看游戏采用JAVA语言开发,以MyEclipse为开发平台。
游戏主界面是基于SWING(图形用户界面)的开发,使得游戏界面简单清晰。
并调用了其中的一些函数,完成了事件的触发功能。
希望通过这次开发设计出的连连看小游戏,给大家的生活带来一点乐趣。
游戏通过定义动态的二维数组,根据一定的算法实现规定的路径判断。
关键词:
连连看游戏;算法设计;路径判断;Java
一、绪论
计算机产业的进步与发展也促进了游戏产业的进步。
当前我们生活中的各类游戏层出不穷,但是经典总会存在,有一些游戏不是时间的推移或是技术的革新可以洗刷掉它的存在和光环的。
其中连连看游戏就是计算机游戏世界里典型的经典游之一。
电子游戏产业作为现代计算机技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流位置。
我们必须明确的一点就是游戏本身所具有的强大的吸引力。
游戏其吸引力主要在于,它在让玩家打发时间的同时,也可以让人发泄对现实生活中的不满,得到在现实中不能得到的东西。
而且游戏产业促动高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”。
游戏产业的多样性发展趋势促使一门使程序设计更加方便、功能更加强大的开发语言发展起来。
连连看游戏的设计主要采用的Java编程技术,就语言技术、风格、严谨等特点上来说,Java是编程语言中最为优秀的一种语言之一,甚至由它而引发出计算机语言界中的多种新的规范和特征。
特别的,在连连看游戏的设计中需要将一些小图片贴入到游戏界面上,如果利用C或C++来设计这部分是比较复杂的,但是使用Java语言只需将图片set到button控件的背景图片即可,并将图片直接导入到控件中便可省去很部分的代码。
所以,Java的产生和发展使得程序设计的功能更加的强大、设计的方法更加的便捷。
二、可行性分析
2.1技术可行性
此次编写的连连看游戏是建立在MyEclipse8.5开发环境下,Java中swing为连连看游戏的设计提供了便利,此次设计主要是运用的Java语言编程与实现的。
在此开发环境中是完全可行的。
连连看游戏是涉及到图形界面处理的,其中图片的导入可以通过开发软件的图片导入控件直接导入,但是相应的操作需要对界面进行重绘,图1.1是界面控制处理的流程图:
图2.1图形界面控制
2.2经济可行性
一个游戏的实现,需要考虑玩家花费的人力物力,不计算能够回收多少资金就不是一个好的项目负责人。
一个新想法如果不经过项目负责人的决策是不可能立项的。
所以,在进行游戏设计的过程中,一定要把项目的规模和市场效果考虑进去,否则游戏再好,如果不适合市场的需要也是徒劳。
通过花费、时间和人力的综合考虑,连连看游戏的设计只需要一台装有开发软件Java的计算机和一个具有相关知识的开发者,是有经济可行性的。
2.3操作可行性
从技术上来考虑,这是可以实现的。
需要你熟悉C#与以及SQLSERVER2008并能够简单的应用,那样留言簿就能够实现了。
但对于用户来说他要的仅仅是能够与大家交流,分享心情的平台。
他并不会在乎你用什么技术去实现以及你花费多少精力去完成的。
因此在操作上必须简单,这是完全能够去实现的。
因此在操作上是完全可行的。
此次课程设计的连连看游戏是基于MyEclipse8.5之上的,只要你的电脑安装了此软件就可以玩连连看游戏了.
三、课程设计题目任务描述和要求
3.1任务描述
3.1.1界面
用Javaswing的JFrame设计界面,使用JFrame继承。
([1])其主体实现如下:
publicclassTestLLK01extendsJFrame设置游戏界面的大小以及布局
this.setSize(1200,800);//将窗体的大小设定
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);//窗体不能改变大小
this.setTitle("连连看");//设置标题
其界面如下(图3.1.1):
图3.1.1
3.1.2程序
游戏过程,如果玩家在规定的时间内消完则提示玩家胜利,如果在一定时间内图片没有消完则提示玩家时间到,游戏失败。
经过对游戏的初步分析,连连看游戏包含了如下规则:
1、条件:
程序的关键在于判断用户连续点击的两个图案能否消除。
两个图片可以消除的条件有两个:
◆图片相同
◆图片间连线的转角数不得超过2。
2、操作:
第一次使用鼠标点击游戏界面中的牌,该牌此时为"被选中",以特殊方式显示;再次以鼠标点击其他牌,若该牌与被选中的牌图案相同,且把第一个牌到第二个牌连起来,中间的直线不超过3根,则消掉这一对牌,否则第一个牌恢复成未被选中状态,而第二个牌变成被选中状态。
在规定的时间内将游戏界面上的牌全部消除掉。
则游戏胜利,在规定时间,界面上的牌仍未全部消掉。
则游戏失败
3.2设计要求及目的
通过本次课程设计,并在实际运用中学习和熟悉Java程序开发的基础过程,进一步熟悉掌握Java程序设计语言的基础内容、基本技能和方法,同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
1.主要是能通过开发“连连看”这个小游戏,提高自己Java程序设计编程的实际能力。
2.进一步熟悉掌握Java程序设计的基础内容,Java多线程编程等。
3.大体了解怎样用Java来编写小游戏,增强我们实践能力和创新精神的综合培养。
4.设计过程中,对整个游戏所实现的功能进行详细的设计以及对存在的问题及解决办法进行最终确定;而后完成游戏的程序编写,并优化;最后,写出设计本游戏的详细文档说明,并作课程设计汇报。
四、需求分析
4.1方案选择
在概要设计阶段,主要有两中方案可供选择:
一、所有的图片都是按约定好的种类数和在同一区域的重复次数随机出现,并且每张图片的的出现次数为偶数,时间会有限制,每一关的图片数量或种方案的设计思想,时间是不同的,这样就增加了游戏的难度。
二、在同一区域中,图片出现的种类数和重复次数是可以由玩家选择的,时间由游戏约定。
不过玩家选择的种类数和重复次数必须是偶数才可以顺利完成游戏,否则游戏虽然可以正常运行,但无法完成游戏。
在第一种方案中,由于出现的图像按种类数和重复次数都由软件约定,这样就缺乏玩家自主选择的空间,只是在玩系统已经是设定好的游戏,不能改变什么,这样就在无意中降低了玩家在游戏的过程中乐趣,最后致使玩家放弃继续玩下去。
我们参考了网络上的连连看游戏,考虑到游戏的娱乐性。
所以我们放弃第一种方案的设计思想,参考网络上流行的连连看的游戏,设计出第二种方案。
4.2功能描述
本设计采用单机模式,当在规定的时间内消完全部的图片则当前关卡通过,如果在规定的时间内没能消完所有的图片则游戏结束,重新开始新游戏。
游戏规则是模仿普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。
当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。
在两张想同图片用三根以内的直线能连在一起,就可以消去;否则,不予处理。
游戏过程,如果玩家在一定的时间内消完则提示玩家胜利;如果在一定时间内图片没有消完则提示玩家时间到。
4.3功能需求
1、设计游戏界面
2、游戏基本功能
3、在游戏无解决方案时重排
4、
4.4功能模块及思路
4.4.1解决游戏区域问题
这个问题最简单,但是却是最花时间的。
正所谓:
万事开头难。
刚开始想了好多控件来实现。
比如Label,Panel,button等等,[2]后来在参考文献中发现一个扫雷游戏可以通过image控件来画图。
因此在几天之后才解决这个最早的最简单的也是最头疼的问题。
4.4.2获取图片位置的思路
首先,最基本的就是用button代替图片进行布局了,然后将图片set到button用来做背景图片。
这里采用最简单的方法——数组。
考虑到图片是多行多列的格式。
所以采用二维数组(数组名为game_grid[][]方式来控制比较直观,并且为了程序容易解读,统一在不同过程中用名为i和j的变量来分别表示行列。
程序开始时给数组中的各个元素赋初值为0,即表示没有图片。
然后数组控制整个游戏区域,游戏区域最外围为空白区域,即相关元素的值为0。
这样就可以保证游戏刚开始后,第二层显示的图片之间的相连路径处理时就没有阻碍了。
这个游戏考虑到玩家对图片的爱好不同,故可以自由修改。
将数组game_grid
的数据与图片名匹配(如:
game_grid的数据为1~25则图片名为1,2...25与之一一对应),玩家则只需要将自己喜欢的图片改变图片名字去替换就可以了。
其button背景图片的方法是用ImageIcon来存储图片信息然后set到button中。
这个思路的具体算法可以后面的3.2.2的第二个步骤中得以体现。
4.4.3分类判断法
这里实质上是一种递归的思想,要判断图片A与图片B能否通过一条有N个转角的路径相连,可以转化为判断能否找到图片C,C与A能直线相连,且C与B能用一条有N-1个转角的路径相连。
若这样的图片C存在,那么A与B就可以通过一条有N个转角的路径相连。
根据转角数不得超过2个的规则,我们可以分为转角数分别为0个、1个、2个这三种情况分别讨论。
[3]
(1)0转角连通(直线连通):
两个图片的纵坐标或横坐标相等,且两者连线间没有其他图案阻隔。
(2)一个转角连通:
其实相当于两个图片的横向与纵向的直线相交只有一个焦点。
图4.4.2一个转角连通
(3)两个转角连通:
判断图片A与图片B能否经过有两个转角的路径连通实质上可以转化为判断能否找到一个点C,这个C点与A可以直线连通,且C与B可以通过有两个转角的路径连通。
若能找到这样一个C点,那么A与B就可以经过有两个转角的路径连通。
判断是否经两个转角连通的算法需要做两个方向上的扫描:
水平扫描和垂直扫描。
水平判断。
如下图所示,为了判断A,B能否通过2个转角连通,则从A开始在水平方向上向左右扫描,并判断经过的点能否与B点经过1个转角连通。
显然C点能与B点经1个转角连通,故A,B能经2个转角连通。
图4.4.3两个转角连通的判断
垂直判断。
如下图所示,为了判断A,B能否通过2个转角连通,则从A开始在垂直方向上下扫描,并判断经过的点能否与B点经过1个转角连通。
显然C点能与B点经1个转角连通,故A,B能经2个转角连通。
图4.4.4两个转角连通的判断
4.5系统需求分析总结
通过对现行连连看系统的调查与分析,本系统的结构基本合理,系统功能基本能够达到Windows小游戏的要求。
本系统的输入边界是用户进行鼠标事件操作,图片全部消除,游戏结束,并且游戏胜利[4]。
通过对连连看游戏规则以及相关算法的分析,本系统总的数据量较小,规模不大,适合于在普通微机或小型机上运行。
五、设计方案
5.1总体设计
本设计采用单机模式,当在规定的时间内消完全部的图片则当前关卡通过,如果在规定的时间内没能消完所有的图片则游戏结束,重新开始新游戏。
游戏规则是模仿普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。
当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。
在两张想同图片用三根以内的直线能连在一起,就可以消去;否则,不予处理。
连连看游戏其结构图如下:
图5.1游戏结构图
5.2详细设计
5.2.1游戏界面设计
游戏界面的设计对于编程人员来说,可能算是最简单的问题,但是,对于大多数玩家来说,他可能不会关心你是怎么实现的,玩家一开始选择玩这个游戏,他可能更加关心的界面是否美观,是不是能让他有耳目一新的感觉。
在本次课程设计中,主要用Java中swing界面编程来实现[5]。
5.2.2鼠标点击控制
鼠标点击控制主要表现在游戏的功能控制上,外部的鼠标、键盘对游戏操作的相应,连连看游戏主要是鼠标点击对游戏操作的作用,例如:
鼠标单击开始、结束选项对游戏的控制[6]。
鼠标点击退出选项退出游戏,程序中由系统触发了publicvoidactionPerformed(ActionEvente)鼠标响应,添加系统内置代码System.exit(0);,点击触发,退出游戏。
鼠标点击选择游戏区的图片响应则交予Java系统自动响应
for(introw_i=0;row_i for(intcolumn_j=0;column_j if(e.getSource()==game_all[row_i][column_j]){//game_all[row_i][column_j].setBackground(Color.red);button_check(row_i+1,column_j+1,game_all[row_i][column_j]); } } } 5.2.3路径判断的设计 连连看游戏的所要求的是: 两个目标之间连接线的折点不超过两个。 (连接线由x轴和y轴的平行线组成)那么分析一下连接的情况可以看到,一般分直线连接、一个折点、两个折点三种情况(其理论在第二章已详述)。 其满足游戏规则: 那么目标图片将顺利的消除。 否则,继续游戏。 5.2.4游戏详细过程流程图 如图5.2.4所示: 图5.2.4游戏过程流程图 六、实现 6.1游戏界面 1、游戏初始界面如下图6.1所示 游戏界面设计比较简洁,用swing的JFrame,以及一个button控件。 其已经消除的图片将button隐藏。 具体界面如图6.1所示: 图6.1基本界面图 其部分实现代码如下: this.setSize(1200,800);//将窗体的大小设定 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出游戏时关掉进程 this.setResizable(false);//窗体不能改变大小 this.setTitle("连连看");//设置标题 /** *头部容器init */ JPaneltoolBar=newJPanel(); Borderborder=BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.blue, Color.yellow,Color.blue,Color.yellow); toolBar.add(button); button.addActionListener(this); toolBar.setBorder(border); toolBar.setPreferredSize(newDimension(1200,50)); /** *用户选择区init */ JPanelactionPanel=newJPanel();//新建JPanel型的控件 actionPanel.setBorder(border); actionPanel.setPreferredSize(newDimension(300,740));//设置大小 /** *游戏区init */ JPanelcontentPanel=newJPanel(); GridLayoutgridlayout=newGridLayout(ROW,COLUMN); contentPanel.setBorder(border); contentPanel.setPreferredSize(newDimension(900,740)); contentPanel.setLayout(gridlayout);//将游戏区contentPanel布局改为gridlayout布局 this.getContentPane().add(toolBar,BorderLayout.NORTH); this.getContentPane().add(actionPanel,BorderLayout.EAST); this.getContentPane().add(contentPanel,BorderLayout.CENTER); 游戏完成界面如图6.2所示 图6.2完成界面 6.2游戏各功能及代码 publicclassLLKanTestimplementsActionListener{ JFramemainFrame;//主面板 JButtonfirstButton,secondButton;//第一二次选择button ContainerthisContainer; JPanelcenterPanel,eastPanel,northPanel;//子面板 publicstaticintROW=8,COLUMN=8; JButtongame_all[][]=newJButton[ROW][COLUMN];//游戏实际按钮数组 JButtonexitButton,resetButton,newlyButton;//退出,重列,重新开始按钮 intgame_grid[][]=newint[10][10]; staticbooleanflag=false;//判断是否有按钮被选中 introw1=0,column1=0,row2=0,column2=0; intfristMsg=0,secondMsg=0,validateLV;//游戏按钮的位置坐标 inti,j,k,n; Stringstr="src/images/",str1=".jpg"; ImageIconicon; publicvoidinit(){ Borderborder=BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.blue, Color.yellow,Color.blue,Color.yellow); mainFrame=newJFrame("无聊连连看"); thisContainer=mainFrame.getContentPane();//得到内存中窗体内容 thisContainer.setLayout(newBorderLayout());//实现窗体 centerPanel=newJPanel(); eastPanel=newJPanel(); northPanel=newJPanel(); thisContainer.add(centerPanel,"Center"); eastPanel.setBorder(border); thisContainer.add(eastPanel,"East"); thisContainer.add(northPanel,"North"); centerPanel.setLayout(newGridLayout(ROW,ROW)); /** *画button */ for(row1=0;row1 for(column1=0;column1 if(game_grid[row1+1][column1+1]>15){ game_grid[row1+1][column1+1]=0; game_all[row1][column1]=newJButton(); game_all[row1][column1].setBorder(border); centerPanel.add(game_all[row1][column1]); game_all[row1][column1].setVisible(false); }else{ icon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 课程设计 连连 游戏 开发