武汉理工数据结构课设欢乐连连看游戏的设计与实现.docx
- 文档编号:10764424
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:59
- 大小:530.72KB
武汉理工数据结构课设欢乐连连看游戏的设计与实现.docx
《武汉理工数据结构课设欢乐连连看游戏的设计与实现.docx》由会员分享,可在线阅读,更多相关《武汉理工数据结构课设欢乐连连看游戏的设计与实现.docx(59页珍藏版)》请在冰豆网上搜索。
武汉理工数据结构课设欢乐连连看游戏的设计与实现
学号:
课程设计
题目
欢乐连连看游戏的设计与实现
学院
计算机科学与技术
专业
软件工程
班级
zy1302
姓名
指导教师
胡燕
2014
年
12
月
19
日
课程设计任务书
学生姓名:
专业班级:
软件zy1302
指导教师:
胡燕工作单位:
计算机科学与技术学院
题目:
欢乐连连看游戏的设计与实现
初始条件:
理论:
学习了《数据结构》课程,掌握了一种计算机高级语言。
实践:
计算机技术系实验中心提供计算机及软件开发环境。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1、系统应具备的功能:
(1)游戏界面设计
(2)绘制游戏地图
(3)完成游戏功能
(4)游戏计时和重排
(5)提供游戏帮助
2、数据结构设计;
3、主要算法设计;
4、编程及上机实现;
5、撰写课程设计报告,包括:
(1)设计题目;
(2)摘要和关键字(中文和英文);
(3)正文,包括引言、需求分析、数据结构设计、算法设计、有关技术的讨论、设计体会等;
(4)结束语;
(5)参考文献。
时间安排:
2014年12月15日-19日(第15周)
12月15日查阅资料,系统设计,数据结构设计,算法设计
12月16日-18日编程并上机调试
12月19日撰写报告,验收程序,提交设计报告书。
指导教师签名:
2014年12月15日
系主任(或责任教师)签名:
年月日
欢乐连连看游戏的设计与实现
摘要:
在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活不可或缺的一部分。
与此同时,游戏行业发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,迄今为止,游戏产业在我国已经发展为一个庞大的产业,为许多相关行业带来了巨大的经济效益。
随着人们工作压力变得越来越大,现如今更多的人开始通过玩游戏来排解内心的压力,而各种各样的游戏也排入市场,一些大型网络游戏更是一些年轻用户的最爱,像连连看类似的小游戏似乎更被儿童和老年人所青睐。
连连看游戏是一款很流行的益智小游戏,有的是连卡通头像,有的是连汽车品牌,有的是连明星头像的等等。
连连看游戏的对象是非常广泛的,几乎适用于所有人,包括小孩、老人等,尤其受到是小孩子的喜爱。
。
这款游戏可以给人在工作之余放松紧张的神经,以及消除心理焦虑等。
远大点说可以锻炼一个人的智力,提高人们的观察力。
连连看这一经典的益智小游戏,实现它的方法很多,不同算法设计和不用语言都能够实现,例如:
C、C++、C#、JAVA……在本课程设计中我是利用JAVA语言编写,开发平台是Eclipse,功能简单,易于上手。
关键字:
连连看,游戏,JAVA,课程设计
Designandimplementationoflianliankangame
Abstract:
Whencomputergraduallypenetratesintoallaspectsofsociallife,computerhasbecomeanindispensablepartofPeople'sDailylife.Meanwhile,atagameindustrydevelopment,theindustrygreatlyinfluencedandchangedpeople'slifeandentertainment,gamesprovideconsumerswithrichandcolorfulvirtualspace,makeconsumerscanenjoythepleasureofthevirtualworldoffree,sofar,thegameindustryinourcountryhasdevelopedintoahugeindustry,foravarietyofrelatedindustriesbroughthugeeconomicbenefits.
Asthepressureofpeopleisbecomingmoreandmorebig,nowadaysmoreandmorepeoplestartingbyplayingthegameistoeliminateinnerstress,andavarietyofgamealsoputintothemarket,somelargenetworkgame,thefavoriteofsomeyounguserslikelianliankanasimilargameseemstobemorefavoredbychildrenandtheelderly.
Lianliankangameisaverypopularpuzzlegame,haveaplentyofcartoonimage,haveaplentyofcarbrands,haveaplentyofeventhestar,andsoon.Lianliankangameobjectisaverybroad,appliestoalmostallpeople,includingchildren,theelderly,etc.,especiallypopularwithchildren.Thisgamecangiveapersonrelaxnerves,afterthework,andeliminatethepsychologicalanxiety,etc.Itcanexerciseaperson'sintelligence,enhancepeople'sobservation.Lianliankan,aclassicpuzzlegame,alotofwaysforit,makedifferentalgorithmdesignandwithoutlanguage,suchasC,C++,C#,Java,...IaminthiscoursedesignusingJavalanguage,istheEclipsedevelopmentplatform,functionissimple,easytogetstarted.
Keywords:
lianliankangame,JAVA,curriculumdesign
引言:
现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握现代科学技术知识,以适应社会的发展,能够独立完成面临的任务,作一名有创新意识的新型人才。
小游戏连连看发展现状及未来趋势的研究认为,小游戏依然是一个能给小游戏市场创造巨大财富的行业,因此急需寻求一个新的亮点。
艾瑞咨询分析认为,选择有很大发展空间、且投资金额要求不高的小游戏连连看成了投资者再次介入小游戏行业的首选,其优势主要体现在以下两个方面:
1.连连看小游戏产品定位合理,外部有利因素促进行业发展;
2.连连看小游戏行业正处于迅猛发展期,上升空间巨大。
现在小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外,很多游戏不乏经典。
连连看游戏就是典型了!
游戏“连连看”,只要将相同花色的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手。
游戏速度节奏快,画面清晰可爱,老少皆宜。
不管你走到哪个游戏网站,连连看游戏总是排在受玩家欢迎排名的前5位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络休闲小游戏。
需求分析:
随着世界经济的长足发展和计算机技术的日益成熟,计算机被应用到人类活动的各个领域,各种应用软件也相继问世,这其中有相当一部分是游戏开发软件。
游戏种类繁多,有网络游戏,单机游戏,网页游戏等,其中单机游戏又有很多种类,这里就不详细介绍了,单机游戏中有些小游戏,它们对系统的配置要求较低。
能够满足人们对娱乐性的需求,是人们在日常生活中,工作过后放松紧张心情的最佳选择。
我所专修的JAVA语言自然而然的成为了我设计这款连连看小游戏的首选语言,它是面向对象的语言,程序语言简洁易懂,可移植性强,几乎不受操作系统版本的影响。
设计流程:
流程规划大致上可以分为三个部分,分别为:
游戏初始化界面设计、游戏规则的设定,菜单控制模块。
在这其中最主要的就是游戏规则的设置,与游戏窗口的初始化。
当玩家单击“文件”菜单中的“开始游戏”按钮后,系统就会初始化游戏界面。
初始化游戏界面主要包括游戏区的图片布局与显示,作弊功能的炸弹个数的初始化,游戏时间的初始化。
该游戏的图片张数为64张,分为8行和8列,每次开局的图片布局都是随机的。
初始时间设置为600秒,当时间用完,而图片未能全部消除,则提示游戏结束,这里我要申明一下,由于我的技术还不强,所以未能将时间用进度条的形式显示出来,敬请见谅。
游戏界面都设置好了也初始化了,接下来就是游戏的开始了,根据游戏设定的规则进行图片的清除,直到最后一对图片消除为止。
我设计的连连看游戏的流程图如下图1.1所示:
图1.1流程图
数据结构设计:
整个游戏地图被抽象成一个有ROWS与COLUMNS坐标位置属性的平面,平面上有序地分布着若干个小方块,并且这些表情方格都是成对出现的。
经过前面的描述和分析后,可以把游戏区域地图用一个二维数组Map来表示。
Map是把地图设计成一个整型二维数组,对应地图中的行列数。
在这里设计Map的ROWS为8,COLUMNS为8。
它在MapUI的类文件中对象定义中添加地图核心数据的成员变量,具体如下:
publicstaticfinalintROWS=8;//行数
publicstaticfinalintCOLUMNS=8;//列数
而map数组在Map类中定义:
privateint[][]map=newint[Settings.ROWS+2][Settings.COLUMNS+2];
上面的成员变量中定义了一个二维整型数组map,用于记录动态分配出来的地图数组空间的地址。
对于地图区域中的某个小方块的类型,可以用一个整形的ID来进行识别。
这里为标识地图的行列位置分别添加ROWS和COLUMNS变量。
算法设计:
玩家选择的两张图片要能够被消除,它们必须符合几个基本的条件第一就是选中的两个方块图案必须相同。
第二个要求就是选中的两个方块之间没有障碍物阻碍的情况下,可以用一条平行或垂直的直线线段连接起来。
第三就是这些将它们连接起来的直线线段的折点不超过两个(也就是说直线线段不超过三条)。
图片可以消除的连接方式分为三种最简单的就是直连方式。
第二种就是有一个折点的平行垂直线段连接。
第三种就是有两个折点的平行垂直线段连接。
它的具体消除图片实例如图2.1所示。
图2.1消除图片实例
(1)直接连接方式
在直接连接方式中,必须要求所选定的两个方块在同一水平直线上或者在同一垂直线上,并且两个方块之间没有任何其它图案方块。
(2)有一个转折点连接方式
所选定的两个方块如果通过折点的方式连接,那么对折点来说,每个折点必定有且至少有一个坐标(x或y)是和其中一个目标点相同的,即折点必定在两个目标点所在的x方向或y方向的直线上。
此外,对于一个折点连接的情况,折点应该为第一个选中方块的横向线或纵向线与第二个选中方块的纵向线和横向线相交而得出。
(3)两个转折点的连接方式
这种方式的两个折点所连成的直线与两物件的直接连线可以构成平行线,因此可以根据这个规律,将这条水平线在游戏区域允许的条件上下移动,然后通过判断整条带垂直折线点的曲线之间有无障碍物方式来确定是否可以连同。
这种情况可以分为两种情况:
(1)选中的两图案方块在同一直线,两折点间的直连线可在其这两个方块之间的空间位置作移动,其约束是不超过游戏边界区域。
(2)选中的两图案方块不在同一直线,两折点间的直连线可在两个方块之间的空间位置作移动,其约束是两方块之间的区域。
经过上面详细的分析后,可以对选定的两方块是否可以作抵消操作可以这样设计下去。
它的判断图片是否相同的流程图如图2.2所示。
图2.2判断图片是否相等的流程图
首先,对简单直接连的情况进行判断,看它是否符合条件,假如不能,再加深一个级别的复杂度,对一个折点的情况进行判断,依次类推。
规则设计好之后就是判断两张图片能否消除,因此我将这些判断方法统一放在了Map类当中。
在该类中首先由oneLine方法判断选择的两张图片是否在同一条直线上,不管是垂直上的还是平行上的都可以消除。
如果选择的两张图片不能消除就由oneConner方法来实现通过转一次弯是否能够消除。
如果还不能消除则由twoConner方法来实现通过转两次弯是否能够消除。
每次玩家点击两张图片后就会调用这个类中的三个判断方法。
三个方法的代码如下所示:
publicbooleanoneLine(ArrayPointp1,ArrayPointp2)
{
if(p1.value!
=p2.value)
{
returnfalse;
}
if(oneLineWithoutValue(p1,p2))
{
returntrue;
}
returnfalse;}
publicbooleanoneConner(ArrayPointp1,ArrayPointp2)
{
//获取P1水平方向的拐点
ArrayPointp1H=newArrayPoint(p1.i,p2.j,map[p1.i][p2.j]);
//获取P1垂直方向的拐点
ArrayPointp1V=newArrayPoint(p2.i,p1.j,map[p2.i][p1.j]);
if(p1.value!
=p2.value){
returnfalse;
}
if(oneConnerWithoutValue(p1,p2)){
returntrue;
}
returnfalse;}
publicbooleantwoConner(ArrayPointp1,ArrayPointp2)
{
if(p1.value!
=p2.value){
returnfalse;
}
intcount=0;
ArrayPointtemp=null;
//纵坐标左移
for(intcol=p1.j-1;col>=0;col--)
{
temp=newArrayPoint(p1.i,col,map[p1.i][col]);
if((temp.value==0)&&this.oneLineWithoutValue(p1,temp)){
if(this.oneConnerWithoutValue(temp,p2)){
returntrue;
}
}else{
break;
}
}//纵坐标右移
count=Settings.COLUMNS+2-p1.j;
for(intcol=p1.j;col { temp=newArrayPoint(p1.i,col,map[p1.i][col]); if((temp.value==0)&&oneLineWithoutValue(p1,temp)) { if(oneConnerWithoutValue(temp,p2)) { returntrue; } } } //横坐标上移 count=p1.i; for(introw=count-1;row>=0;row--) { temp=newArrayPoint(row,p1.j,map[row][p1.j]); if((temp.value==0)&&oneLineWithoutValue(p1,temp)) { if(oneConnerWithoutValue(temp,p2)) { returntrue; } } } //横坐标下移 for(introw=p1.i+1;row { temp=newArrayPoint(row,p1.j,map[row][p1.j]); if((temp.value==0)&&oneLineWithoutValue(p1,temp)) { if(oneConnerWithoutValue(temp,p2)) { returntrue; } } } returnfalse; } 程序运行测试: 1.程序主界面图 当用户运行程序时将会出现一个灰色带菜单的界面,它是最原始的游戏界面,还没有进行游戏界面的初始化。 它的原始界面如图3.1所示。 图3.1原始界面 2.游戏开始的界面 用户在菜单栏中选择“文件”,单击“开始游戏”,这样就能进入游戏界面了。 游戏初始化后的界面如图3.2所示。 图3.2游戏初始化后的界面 3.使用道具界面 用户进入游戏界面后,开始游戏,在菜单栏中选择“帮助”,单击“炸弹”。 游戏界面如图3.3所示。 图3.3使用道具界面 4.游戏成功提示界面 如果玩家在游戏规定的时间内消除了游戏区域的所有图片则游戏胜利,该游戏在设计的时候设计了一个游戏胜利后的提示窗口,提供了两种选择,一种是玩家继续挑战下一关另一种选择就是退出游戏。 游戏成功的界面如图3.4所示。 3.4游戏成功的界面 5.游戏菜单栏界面 用户运行程序后,选择菜单栏有如下选择,如图4.1中a,b,c,d所示。 (a) (b) (c) (d) 图4.1游戏菜单栏界面 6.游戏规则界面 用户运行程序后,选择菜单栏中的“游戏说明”,单击“游戏规则”,弹出“游戏规则”窗口,如图6.1所示。 图6.1游戏规则窗口 7.版本介绍界面 用户运行程序后,选择菜单栏中的“游戏说明”,单击“版本介绍”,弹出“版本介绍”窗口,如图7.1所示。 图7.1版本介绍窗口 结束语: 这次的课程设计让我收获颇丰,不仅对数据结构有了更胜层次的理解,还学会了怎么去应用,另外还提高了我的JAVA语言应用能力。 这次的课程设计,让我彻底了解了连连看小游戏的设计思想和程序设计要领,虽然这个程序不全是我的思想,但是它的总体实现步骤、各种算法、系统函数等我都还是详细的去了解了,遇到不懂的都一一的去网上XX了,或者请教老师与同学,通过这些途径问题都一一的解决了,所以我觉得在学习上遇到困难不是什么大的问题,如果不去解决就会慢慢的变成大问题了。 程序的编写需要有耐心,有些事情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。 再总体解决大的问题。 这样做起来不仅有条理也使问题得到了轻松的解决。 参考文献: [1]严蔚敏 吴伟民编著,《数据结构》(C语言版),清华大学出版社,2010 [2]邓俊辉.《数据结构与算法(Java描述)》.北京: 机械工业出版社,2006 [3](美)Michael Main,孔芳等译.《数据结构——Java语言描述》.北京: 机械工业出版社,2007 附录: //MainFrame.java importjava.awt.BorderLayout; importjava.awt.FlowLayout; importjava.awt.Frame; importjava.awt.GridLayout; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjavax.swing.JButton; importjavax.swing.JFrame; importjavax.swing.JLabel; importjavax.swing.JMenu; importjavax.swing.JMenuBar; importjavax.swing.JMenuItem; importjavax.swing.JOptionPane; importjavax.swing.JPanel; importjavax.swing.JTextArea; importjavax.swing.JTextField; importjavax.swing.SwingUtilities; importjavax.swing.Timer; importcom.xxy.Settings; importcom.xxy.model.Map; publicclassMainFrameextendsJFrame { privatestaticlonga[]; privatestaticfinallongserialVersionUID=1L; //炸弹的次数 privateintbombCount=Settings.BOMBCOUNT; privateJFramef,f1; finalJFramef2=null; privateJPaneljContentPane=null; privateJMenuBarmenuBar=null; privateJMenufileMenu=null; privateJMenuhelpMenu=null; privateJMenugsmMenu=null; privateJMenujiluMenu=null; privateJMenuItemreloadItem=null; privateJMenuItemgguizeItem=null; privateJMenuItemgbanbenItem=null; JMenuItemMyjiluItem=null; JTextFieldtext1,text2; privateJMenuIt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工 数据结构 欢乐 连连 游戏 设计 实现