计算机科学与工程学院集中性实践教学计划书( 2013 — 2014学年第1学期)课程名称:专业实习姓名:专业:计算机科学与技术班级:计科103班课程负责人:云健指导教师:孟佳娜,张恒博教学起止周:第10至12教学周摘要近年来,Java作为一种新的编程语言,以其可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
本设计报告阐述了连连看游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。
连连看游戏有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。
这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。
连连看游戏采用JAVA语言开发,以MyEclipse为开发平台。
游戏主界面是基于SWING(图形用户界面)的开发,使得游戏界面简单清晰。
并调用了其中的一些函数,完成了事件的触发功能。
希望通过这次开发设计出的连连看小游戏,给大家的生活带来一点乐趣。
游戏通过定义动态的二维数组,根据一定的算法实现规定的路径判断。
关键词:连连看游戏;算法设计;路径判断;Java实习计划:第十一周编程编程编程调试,总结一周的工作撰写实习报告验收,答辩第十二周修改完善,检查可能存在的BUG目录摘要 (2)一、绪论 (1)2.1 技术可行性 (1)2.2 经济可行性 (2)2.3 操作可行性 (2)三、课程设计题目任务描述和要求 (2)3.1 任务描述 (2)3.1.1 界面 (2)3.1.2程序 (3)3.2 设计要求及目的 (4)四、需求分析 (4)4.1 方案选择 (4)在概要设计阶段,主要有两中方案可供选择: (4)4.2功能描述 (5)4.3 功能需求 (5)4.4 功能模块及思路 (5)4.5 系统需求分析总结 (7)五、设计方案 (8)5.1 总体设计 (8)5.2 详细设计 (9)5.2.1 游戏界面设计 (9)5.2.2鼠标点击控制 (9)5.2.3 路径判断的设计 (9)六、实现 (10)6.1 游戏界面 (10)6.2 游戏各功能及代码 (12)一、绪论目前中国国内网络游戏市场正在日趋成熟,随着市场的逐步完善,各种形式的电子游戏也争相登场,成功游戏不断涌现。
比较成熟的项目主要有:反恐精英(CS)、星际争霸、魔兽争霸2、FIFA2003、帝国时代、FIFA2004等等。
这时也出现了越来越多的网络小游戏,休闲类项目包括网络围棋、中国象棋、四国军棋、桥牌、麻将、拱猪、斗地主、拖拉机、连连看等。
游戏“连连看”顾名思义就是找出相关联的东西,这个连连看在网上基本是用在小游戏中,就是找出相同的两样东西,在一定的规则之内可以作为相关联处理。
“连连看”的发展经历了从桌面游戏、在线游戏、社交游戏三个过程。
游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发多种版本的的“连连看”。
随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”,如“水晶连连看”“果蔬连连看”等等。
2008年,随着社交网络的普及和开放平台的兴起,“连连看”被引入了社交网络。
“连连看”与个人空间相结合,被快速的传播,成为一款热门的社交游戏。
二、可行性分析2.1 技术可行性此次编写的连连看游戏是建立在MyEclipse8.5开发环境下,Java中swing为连连看游戏的设计提供了便利,此次设计主要是运用的Java 语言编程与实现的。
在此开发环境中是完全可行的。
连连看游戏是涉及到图形界面处理的,其中图片的导入可以通过开发软件的图片导入控件直接导入,但是相应的操作需要对界面进行重绘,图1.1是界面控制处理的流程图:图2.1 图形界面控制2.2 经济可行性一个游戏的实现,需要考虑玩家花费的人力物力,不计算能够回收多少资金就不是一个好的项目负责人。
一个新想法如果不经过项目负责人的决策是不可能立项的。
所以,在进行游戏设计的过程中,一定要把项目的规模和市场效果考虑进去,否则游戏再好,如果不适合市场的需要也是徒劳。
通过花费、时间和人力的综合考虑,连连看游戏的设计只需要一台装有开发软件Java的计算机和一个具有相关知识的开发者,是有经济可行性的。
2.3 操作可行性从技术上来考虑,这是可以实现的。
需要你熟悉C#与 以及SQL SERVER 2008并能够简单的应用,那样留言簿就能够实现了。
但对于用户来说他要的仅仅是能够与大家交流,分享心情的平台。
他并不会在乎你用什么技术去实现以及你花费多少精力去完成的。
因此在操作上必须简单,这是完全能够去实现的。
因此在操作上是完全可行的。
此次课程设计的连连看游戏是基于MyEclipse8.5之上的,只要你的电脑安装了此软件就可以玩连连看游戏了.三、课程设计题目任务描述和要求3.1任务描述3.1.1 界面其界面如下(图3.1.1):图3.1.13.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.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就可以经过有两个转角的路径连通。