java课程设计连连看_连连看_java课程设计报告

41528d3028836879cd698677c3999917.gif连连看_java课程设计报告

《连连看》 项目设计报告 专 业: 软件工程 班 级: 07级2班 姓 名: 二00九 年 七 月 二十一 日 目 录 1.项目设计目的、意义………………………………………… 3 2.项目设计概况………………………………………………… 3 3.设计方案及内容………………………………………………4 4.结论………………………………………………………… 7 5.小组成员分工………………………………………………… 7 (要求:给出一级目录,宋体加粗,四号字,1.5倍行距。) (报告正文部分): (要求:正文部分一律用小四号字,宋体,1.5倍行距。一级大标题靠左,加粗。二级大标题靠左,不加粗。) 一、 项目设计目的、意义 综合运用所学Java以及面向对象的知识,设计出实用性,可操作性的连连看游戏程序。通过设计此项目,巩固这两年来学的知识,提高面向对象的编程能力,锻炼了逻辑思维能力,提高动手实验能力,也提高了团队合作项目开发的能力。这些项目设计带来的一些经验为将来我们的实际工作打下一定的基础。 二、项目设计概况 1、项目设计前的准备。主要包括:首先,确定项目的主题方案。看看别人写的游戏程序。我们是参考了QQ游戏的连连看,以它为模板来写这个程序的。QQ的连连看是网络版的,由于人力有限,我们就去掉了网络功能,做成单机版的游戏。然后,分析游戏规则确定大致的游戏算法。最后确定程序所需要的模块,大致分为三个主要的模块,游戏显示 ,游戏控制 ,游戏核心算法。其他模块在开发设计的过程中可以再添加。 2、编写代码实现游戏的算法。首先设计游戏界面,找要使用的图片。然后编写其中的算法,算法包括将游戏地图转化为数组来描述,初始化游戏地图,对数组中两个元素是否可以消除的判断,两个可消除的元素以何种方式连接,自动寻找匹配的点等等。 3、将界面和算法结合起来,并为界面添加功能。如开始游戏,刷新,演示等等。 4、测试,完善一些功能,美化界面。 5、本项目中使用数组实现核心的算法,使用线程在同一时间做更多的事情 ,使用使用文件来保存用户的配置信息 ,使用布局和图片按钮等实现操作。 三、设计方案及内容 1、 show包里的MainFrame类,是实现用户界面的设计及项目测试。整个界面是用BorderLayout布局,其界面包括setPanel,showPanel,toolPanel和gamePanel(另一个类)。其中设置块setPanel用的是FlowLayout,里面有btnAbout,和cboLevel。btnAbout是描述该项目的设计者。cboLevel设置的各个等级,用户可以根据喜好选择等级来游戏。showPanel里有显示用户所用时间,历史记录,所剩余块数等信息。toolPanel里的布局方式是FlowLayout。包括开始刷新,提示,演示等功能。这个类继承了Observer类。这样,当一个对象的状态发生变化时,能够自动通知其他关联对象,调用update()函数自动刷新对象状态。更好地实现了面向对象的操作。在这个函数中,还对每个功能键的按钮CommandName 属性赋一个值。 Show包里的gamePanel实现了在面板里绘制已初始化的连连看游戏的图片,以及显示当消去图片的动画效果。其中,matrixToRect()函数是将得到的数组坐标转换为子图块。这样在算法的实现上比较方便。在显示消去图片的路径效果时,使用了线程来实现。当observer发现ArrayList状态变化,即为点击了图片这个操作,将所得到的object对象obj(即点击图片所得到的在数组picture中的坐标)保存在Point集合points中。这样集合points中保存的就是点击图片得到(在未消去图片前)的坐标(包括拐点,即空白点)集合。由这些坐标集合可利用matrixToRect()函数在新建的集合shapes中加入起始矩阵和终止矩阵,以及要消去这两个矩阵所经过的路径。为了能实现动画效果,在第一个for循环中加了Thread.sleep(10);让线程暂停一会。并在每点一次图片,产生鼠标事件后,调用refresh()函数。Refresh()函数就是在每隔一秒后刷新gamePanel。这样就实现了消去图片时的动画效果。 Show包里的ImageLoader主要是实现将外部图片转化为程序中能使用的图片。 2、 model模块里的Model类实现的设置地图的大小,图片块的个数。初始化游戏界面的地图,判断两个图片可以消除的条件,消除两个图片,两个可消除的图片以何种方式连接,以及主面板上的功能等的算法。 在初始化地图时,根据不同的等级产生不同个数的随机图片来填充地图。并且数组中具有相同值的元素(即相同图片)只能出现 4 次。NumberSelector(min,max,count)函数就是在min和max范围内随机选择count个图片。其中设min为1,max为图片的总数,count根据等级的不同来设置。设置个Integer的ArrayList。将min-max之间的数添加其中。再由list.remove(new Random().nextInt(list.size()));从list中随机取出数。并返回个一元数组。一维数组中的元素已经被打乱了,然后限定相同的图片出现四次,填充回二维数组中。为了实现这些图片在地图上的随机分布,在randomSort()函数中,将二维数组picture按顺序添到ArraryList中的list中,再由picture[i][j]=list.remove(new Random().nextInt(list.size()));将二位数组从list中随机的取出来。这样基本实现了地图的初始化。 根据游戏规则,如果两个点的picture值相同,且两者之间可以用不超过 3 条直线(即不超过两个拐点)连接起来,这两点就可以消除。这也是游戏的核心算法。判断两点之间只需要一条直线连接(即没有拐点的情况),则这两点的横坐标或纵坐标必定相同。 两点之间有两条直线,如下图 则在A的所有横向(纵向)无图片的坐标中,必定存在这样的点,它的纵向(横向)无图片的坐标与B点相同。算法实现如函数oneCorner(Point p1,Point p2)。 两点之间有三条线(即两个拐点),如下图 我们先扫描出A,B所有的无图片的线,并且我们发现,如果在 A 、 B 构成的区域中存在两个点能构成直线,那么,这条直线就 有可能 是我们需要的直线,我们称此线为符合线,如果符合线的两端( C 、 D 两点)与 A 、 B 两点分别能 AC 、 CD 、 DB 能构成直线的原则,则 AB 间一定可以通过三条直

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值