JAVA课程设计连连看游戏的开发.doc_第1页
JAVA课程设计连连看游戏的开发.doc_第2页
JAVA课程设计连连看游戏的开发.doc_第3页
JAVA课程设计连连看游戏的开发.doc_第4页
JAVA课程设计连连看游戏的开发.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南涉外经济学院课程设计报告课程名称:程序设计实训报告题目:连连看游戏的开发学生姓名:所在学院:专业班级:学生学号:指导教师:2013年6月20日课程设计任务书报告题目连连看游戏的开发完成时间2013-6学生姓名专业班级职称讲师总体设计要求和技术要点设计一个连连看游戏程序,游戏程序的功能需求如下:游戏区是一个包含了多种不同花色游戏牌的二维棋盘,棋盘的行数和列数可以自行定义。每一种花色的游戏牌的数量都是偶数。两张花色相同的游戏牌的之间的路径如果满足以下条件,这两张游戏牌即可消去:路径连线由不多于3条的水平和垂直的线段构成,任何一条线段都不能穿越其他的游戏牌,但可以不在棋盘中,路径两端的游戏牌必须具有相同的花色。游戏只要用鼠标即可进行操作。最初棋盘里布满了游戏牌,游戏开始时进行计时。第一次使用鼠标点击棋盘中的游戏牌,该游戏牌此时为“被选中”,以特殊方式显示;再次以鼠标点击其他游戏牌,若该游戏牌与被选中的游戏牌两者花色相同,且把第一张游戏牌到第二张游戏牌连起来,中间的线段不超过3条,则消掉这一对游戏牌,否则第一张游戏牌恢复成未被选中状态,而第二张游戏牌变成被选中状态。每消去一对游戏牌,应检查棋盘内是否至少还存在一对能消去的游戏牌,如果不存在,则在原有位置对游戏牌进行重排,直到至少存在一对能够消去的游戏牌。如果在指定的时间内消去了所有的游戏牌,游戏胜利;如果时间耗尽还未能消除全部的游戏牌,游戏失败。要求每人独立完成,使用主流开发工具,尽可能采用面向对象方法,在设计判断两张相同花色游戏牌能否消去的算法时,尽可能使用状态空间搜索算法(如回溯法、分支限界法等),要求代码的具有一定的可读性、可维护性和可扩充性。可以参考教师给定的程序或者其他程序,但程序和报告严禁全盘抄袭。工作内容及时间进度安排第11周第12周:对需要开发的软件进行需求分析和软件设计第13周:论证方案设计第14周第16周:程序设计第17周:测试、修改程序,撰写报告第18周:验收答辩课程设计成果1与设计内容对应的软件程序2课程设计总结报告摘 要 近年来,java作为一种新的编程语言,以其可移植性和平台无关性等优点,得到了广泛地应用,特别是java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。本设计报告阐述了连连看游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。连连看游戏有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。连连看游戏采用java语言开发,以myeclipse为开发平台。游戏主界面是基于swing(图形用户界面)的开发,使得游戏界面简单清晰。并调用了其中的一些函数,完成了事件的触发功能。希望通过这次开发设计出的连连看小游戏,给大家的生活带来一点乐趣。 游戏通过定义动态的二维数组,根据一定的算法实现规定的路径判断。关键词:连连看游戏;算法设计;路径判断;java目 录课程设计任务书ii摘 要iii一、绪 论1二、可行性分析22.1 技术可行性22.2 经济可行性22.3 操作可行性3三、课程设计题目任务描述和要求43.1 任务描述43.1.1 界面43.1.2程序43.2 设计要求及目的5四、需求分析64.1 方案选择64.2功能描述64.3 功能需求64.4 功能模块及思路74.5 系统需求分析总结9五、设计方案115.1 总体设计115.2 详细设计12六、实现146.1 游戏界面146.2 游戏各功能及代码15七、总结21八、参考资料22一、绪论计算机产业的进步与发展也促进了游戏产业的进步。当前我们生活中的各类游戏层出不穷,但是经典总会存在,有一些游戏不是时间的推移或是技术的革新可以洗刷掉它的存在和光环的。其中连连看游戏就是计算机游戏世界里典型的经典游之一。电子游戏产业作为现代计算机技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流位置。我们必须明确的一点就是游戏本身所具有的强大的吸引力。游戏其吸引力主要在于,它在让玩家打发时间的同时,也可以让人发泄对现实生活中的不满,得到在现实中不能得到的东西。而且游戏产业促动高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”。游戏产业的多样性发展趋势促使一门使程序设计更加方便、功能更加强大的开发语言发展起来。连连看游戏的设计主要采用的java编程技术,就语言技术、风格、严谨等特点上来说,java是编程语言中最为优秀的一种语言之一,甚至由它而引发出计算机语言界中的多种新的规范和特征。特别的,在连连看游戏的设计中需要将一些小图片贴入到游戏界面上,如果利用c或c+来设计这部分是比较复杂的,但是使用java语言只需将图片set到button控件的背景图片即可,并将图片直接导入到控件中便可省去很部分的代码。所以,java的产生和发展使得程序设计的功能更加的强大、设计的方法更加的便捷。二、 可行性分析2.1 技术可行性此次编写的连连看游戏是建立在myeclipse8.5开发环境下,java中swing为连连看游戏的设计提供了便利,此次设计主要是运用的java语言编程与实现的。在此开发环境中是完全可行的。连连看游戏是涉及到图形界面处理的,其中图片的导入可以通过开发软件的图片导入控件直接导入,但是相应的操作需要对界面进行重绘,图1.1是界面控制处理的流程图:开始button随机生成图片界面button布局选中相同的两张图片不符合规则重新选择隐藏button图片消除完毕结束ynyn图2.1 图形界面控制2.2 经济可行性一个游戏的实现,需要考虑玩家花费的人力物力,不计算能够回收多少资金就不是一个好的项目负责人。一个新想法如果不经过项目负责人的决策是不可能立项的。所以,在进行游戏设计的过程中,一定要把项目的规模和市场效果考虑进去,否则游戏再好,如果不适合市场的需要也是徒劳 。通过花费、时间和人力的综合考虑,连连看游戏的设计只需要一台装有开发软件java的计算机和一个具有相关知识的开发者,是有经济可行性的。 2.3 操作可行性从技术上来考虑,这是可以实现的。需要你熟悉c#与 以及sql server 2008并能够简单的应用,那样留言簿就能够实现了。但对于用户来说他要的仅仅是能够与大家交流,分享心情的平台。他并不会在乎你用什么技术去实现以及你花费多少精力去完成的。因此在操作上必须简单,这是完全能够去实现的。因此在操作上是完全可行的。 此次课程设计的连连看游戏是基于myeclipse8.5之上的,只要你的电脑安装了此软件就可以玩连连看游戏了.三、课程设计题目任务描述和要求3.1 任务描述3.1.1 界面用java swing的jframe设计界面,使用jframe继承。(1)其主体实现如下:public class testllk01 extends jframe 设置游戏界面的大小以及布局 this.setsize(1200, 800); /将窗体的大小设定this.setdefaultcloseoperation(jframe.exit_on_close); this.setresizable(false); /窗体不能改变大小this.settitle(连连看); /设置标题其界面如下(图3.1.1):图.2程序游戏过程,如果玩家在规定的时间内消完则提示玩家胜利,如果在一定时间内图片没有消完则提示玩家时间到,游戏失败。经过对游戏的初步分析,连连看游戏包含了如下规则: 1、条件:程序的关键在于判断用户连续点击的两个图案能否消除。两个图片可以消除的条件有两个: u 图片相同 u 图片间连线的转角数不得超过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的数据为125则图片名为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。鼠标点击退出选项退出游戏,程序中由系统触发了public void actionperformed(actionevent e)鼠标响应,添加系统内置代码 system.exit(0);,点击触发,退出游戏。鼠标点击选择游戏区的图片响应则交予java系统自动响应for(int row_i=0;row_irow;row_i+)for(int column_j=0;column_jcolumn;column_j+)if(e.getsource()=game_allrow_icolumn_j)/game_allrow_icolumn_j.setbackground(color.red);button_check(row_i+1,column_j+1,game_allrow_icolumn_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 */jpanel toolbar = new jpanel();border border = borderfactory.createbevelborder(bevelborder.lowered, color.blue, color.yellow,color.blue,color.yellow);toolbar.add(button);button.addactionlistener(this);toolbar.setborder(border);toolbar.setpreferredsize(new dimension(1200, 50);/* * 用户选择区init */jpanel actionpanel = new jpanel(); /新建jpanel型的控件actionpanel.setborder(border);actionpanel.setpreferredsize(new dimension(300, 740); /设置大小/* * 游戏区init */jpanel contentpanel = new jpanel();gridlayout gridlayout = new gridlayout(row,column);contentpanel.setborder(border);contentpanel.setpreferredsize(new dimension(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 游戏各功能及代码1、游戏界面初始化 public class llkantest implements actionlistener jframe mainframe; / 主面板 jbutton firstbutton, secondbutton; / 第一二次选择button container thiscontainer; jpanel centerpanel, eastpanel, northpanel; /子面板 public static int row=8,column=8; jbutton game_all = new jbuttonrowcolumn; / 游戏实际按钮数组 jbutton exitbutton, resetbutton, newlybutton; / 退出,重列,重新开始按钮 int game_grid = new int1010; static boolean flag = false; / 判断是否有按钮被选中 int row1 = 0, column1 = 0, row2 = 0, column2 = 0; int fristmsg =0, secondmsg = 0, validatelv; / 游戏按钮的位置坐标 int i, j, k, n; string str=src/images/,str1=.jpg; imageicon icon; public void init() border border = borderfactory.createbevelborder(bevelborder.lowered, color.blue, color.yellow,color.blue,color.yellow); mainframe = new jframe(无聊连连看); thiscontainer = mainframe.getcontentpane(); /得到内存中窗体内容 thiscontainer.setlayout(new borderlayout(); /实现窗体 centerpanel = new jpanel(); eastpanel = new jpanel(); northpanel = new jpanel(); thiscontainer.add(centerpanel,center); eastpanel.setborder(border); thiscontainer.add(eastpanel,east); thiscontainer.add(northpanel,north); centerpanel.setlayout(new gridlayout(row,row); /* * 画button */ for ( row1 = 0; row1 row; row1+) for ( column1 = 0; column1 15) game_gridrow1+1column1+1=0; game_allrow1column1= new jbutton(); game_allrow1column1.setborder(border); centerpanel.add(game_allrow1column1); game_allrow1column1.setvisible(false); else icon = new imageicon(str+game_gridrow1+1column1+1+str1); game_allrow1column1 = new jbutton(null,icon); game_allrow1column1.setborder(border); game_allrow1column1.addactionlistener(this); /添加响应事件 centerpanel.add(game_allrow1column1); newlybutton = new jbutton(重玩); newlybutton.addactionlistener(this); resetbutton = new jbutton(重列); resetbutton.addactionlistener(this); exitbutton = new jbutton(退出); exitbutton.addactionlistener(this); eastpanel.add(exitbutton); eastpanel.add(resetbutton); eastpanel.add(newlybutton); mainframe.setbounds(300, 100, 850, 500); mainframe.setvisible(true); mainframe.setdefaultcloseoperation(jframe.exit_on_close); /退出后关闭程序 2、游戏随机布局/* * 随机布局 */ public void randombuild() int randoms, col01, row01; for (int ii = 1; ii = row*column/2; ii+)/一共row*column/2对button randoms = (int) (math.random() * 25 +1);/button上的数字 for (int jj = 1; jj = 2; jj+) col01 = (int) (math.random() * row + 1); row01 = (int) (math.random() * row + 1); while (game_gridcol01row01 != 0) /等于0说明这个空格有了button col01 = (int) (math.random() * row + 1); row01 = (int) (math.random() * row + 1); this.game_gridcol01row01 = randoms; 3、 选择图片获取用户点击两张图片的位置,并传入xiaochu()函数进行判断public void estimateeven(int placerow2, int placecolumn2, jbutton bz) if (flag = false) row2 = placerow2; column2 = placecolumn2; secondmsg = game_gridrow2column2; secondbutton = bz; flag = true; else row1 = row2; column1 = column2; fristmsg = secondmsg; firstbutton = secondbutton; row2 = placerow2; column2 = placecolumn2; secondmsg = game_gridrow2column2; secondbutton = bz; if (fristmsg = secondmsg &secondbutton != firstbutton) /button不同数字相同则消掉 xiaochu(); 4、判断消除图片1. 消除图片时要判断是否可达,即优化判断是否可以消除的算法是本程序的灵魂,连连看游戏分为三种消去方式,分别为“0折型”,“一折型”,“两折型”,由图4-5可以看出,如果两点间只需要一条直线能够连接起来,则a、b两点的横坐标或纵坐标必定相同,有了这个条件,我们判断 a、b两点是否只需要一条直接连接就简单了许多。其分析如下:1.“0折型”:水平消去或者垂直消去,如果两个点击的两个图片相同,并且它们在同一水平或垂直方向上,即返回h_line的画线类型,代码如下:if (row1 = row2 & (column1 = column2 + 1 | column1 =column2 - 1) | (row1 = row2 + 1 | row1 = row2 - 1) &(column1 = column2) / 判断是否相邻 remove();2.“一折型”,当点击的两个点相同,它们不在同一水平或垂直方向上,并且它们要用两条直线相连,就返回one_c_line,代码如:for (j = 0; j j) /第二个按钮在空按钮右边 for (i = column2 - 1; i = j; i-) /检测从第二个按钮横向左边到空格所在列为止是否全是空格 if (game_gridrow2i != 0) k = 0; break; else k = 1; if (k = 1) line_check();/进入第二次验证,也就是从第一个按钮到它同行的空格之间的空格判断 if (column2 j) / 第二个按钮在空按钮左边 for (i = column2 + 1; i = j; i+) /检测从第二个按钮横向右边到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论