连连看_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 间一定可以通过三条直

java课程设计连连看_连连看_java课程设计报告相关推荐

  1. 网页成品——手表商城网站模板源码(17页) web期末作业设计网页_手表商城网页设计作业成品

    HTML5期末大作业:手表商城网站设计--手表商城网站模板源码(17页) web期末作业设计网页_手表商城网页设计作业成品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物 ...

  2. HTML5期末大作业:手表商城网站设计——手表商城网站模板源码(17页) web期末作业设计网页_手表商城网页设计作业成品

    HTML5期末大作业:手表商城网站设计--手表商城网站模板源码(17页) web期末作业设计网页_手表商城网页设计作业成品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物 ...

  3. 网页作业HTML+CSS+JS大作业——汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品

    HTML+CSS+JS大作业--汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. ...

  4. HTML+CSS+JS大作业——汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品

    HTML+CSS+JS大作业--汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. ...

  5. java课程设计报告连连看_连连看_java课程设计报告.doc

    连连看_java课程设计报告 <连连看> 项目设计报告 专 业: 软件工程 班 级: 07级2班 姓 名: 二00九 年 七 月 二十一 日 目 录 1.项目设计目的.意义-------- ...

  6. 学java还是平面设计好_平面设计师精品课程

    传统的设计,主要走的(UI培训)是视觉路子,这块儿东西挖得很深:讲究传达,把设计师想表达的东西.情感.境界通过设计的内容传达给用户:而现代设计,除了表达这些元素之外,更讲究"用户体验&quo ...

  7. java后台jd_2017春季_京东_Java后端研发岗面经

    纸上得来终觉浅,绝知此事要躬行 --2017春季Java后端研发工程师面试心得 收获offer:上海汉得+北京中科软+成都百词斩+成都诺基亚研发中心+清华大学计算机研究所等offer.阿里一面猝.京东 ...

  8. java 账本 创建数据库_小账本软件设计之数据库设计模式构建

    编写目的 该博客是小账本在前期开发阶段针对用户所进行的数据库设计,通过ER图,数据字典,数据流图来对该软件的数据库开发进行设计,并且附上部分源代码进行参考. 背景 待开发的软件名称为:小账本 作业名称 ...

  9. java 非侵入式_非侵入式设计 和侵入式设计 意思?

    非侵入式系介绍DI用语,我得理解是两个组件(类,接口)之间,比较独立,不深入到另一个类内部,哪位大虾能点拨一二? 关于"侵入式"和"非侵入式"设计 有读者讲&q ...

最新文章

  1. 解决问题 inner element must either be a resource reference or empty.
  2. Javassist 使用指南(一)
  3. 变更控制管理流程图_制度是最好的老板,流程就是最好的管理!流程建立法则(附案例)...
  4. wxPython中文教程 简单入门加实例
  5. 再谈“炼金术”:可以使用不严谨的方法,但拒绝不严谨的评估方法
  6. Spring Data 起步
  7. 数据集:102 flower、Cratech256、ImageNet数据集下载
  8. Python实现千图成像:从图片爬取到图片合成
  9. PayPal开发文档整理(2)- 开发者文档介绍
  10. 赴微软 软件开发测试工程师。
  11. 文件服务器mfs,MFS 分布式文件存储系统
  12. android穿山甲主题冲突,Flutter 接头条穿山甲广告 Android 总述篇
  13. std__vector介绍
  14. Java IO流学习总结(一)—— IO流分类和常用IO流汇总
  15. 如何用python画心形_利用python画一颗心的方法示例
  16. python基础(持续更新)
  17. 从自旋锁、睡眠锁、读写锁到 Linux RCU 机制讲解
  18. 2019智能手表推荐_2019年,这4款智能手表已经秒杀Apple Watch!
  19. 织梦DedeCMS添加百度分享代码的最简单方法
  20. 碳水循环饮食计算简介

热门文章

  1. C#基础知识---飞行棋小游戏
  2. 【Java基础】本地方法的理解(native方法)
  3. android拒绝服务教程,[转帖][转帖]通用型安卓拒绝服务漏洞报告检测工具
  4. Oracle数据库连接的账号密码过期的解决教程
  5. MS8006单片机开发IR红外遥控解码原理与程序实现(NEC)
  6. 建议收藏,SCI期刊实时影响因子的意义和算法
  7. 考研复试——通信原理专业课问答
  8. ASP+Access UTF-8 网页乱码问题解决办法
  9. SCAU高级语言程序设计--实验10 指针与结构体(1)
  10. 公开数据集集合MedMNIST和Chest x-rays14