《连连看-JAVA课程设计报告.doc》由会员分享,可在线阅读,更多相关《连连看-JAVA课程设计报告.doc(16页珍藏版)》请在金锄头文库上搜索。
1、 课程设计2013 2014学年第二学期设计题目 连连看游戏程序 院(系) 专 业 软件工程 班 级 学号 学生姓名 设计时间 2014年6月24日2014年6月27日指导教师 提交日期 2014年6月27日 目录目录21. 课程设计的目的与要求31.1课程设计目的与要求31.2课程设计内容31.3课程设计的实验环境31.4课程设计的预备知识42.系统模块结构图42.1 模块设计52.1.1 菜单控制模块52.1.2 算法模块62.1.3 界面显示模块83.详细设计83.1总体算法思路83.2代码实现94.小结181. 课程设计的目的与要求1.1课程设计目的与要求1.掌握JAVA语言中面向对象
2、的概念,并能在程序中熟练运用。2. 了解面向对象程序设计(JAVA)的基本概念以及运用面向对象技术进行程序设计的基本思想。 3. 能正确编写和调试JAVA程序。4. 了解在JAVA环境下进行程序设计的基本思想和方法。1.2课程设计内容1.设计一个连连看的游戏程序。2.在JAVA环境下,将上述程序使用GUI、数据结构等内容完成3.设计思路:(1)界面设计1)初始测试界面可以考虑使用简单的按钮来代表连连看游戏中的图标。2)布局可以考虑使用GRID方式。3)设计菜单选择连连看难度等内容,具体可参照QQ连连看,也可自定义。4)考虑完善界面,例如动画等。(2)代码设计1)本设计的核心为练练看算法的设计,
3、可以考虑数据结构中的图的遍历章节,合理设计算法,将界面中各按钮的分布映射入数学矩阵进行路径规划。(可以上网搜索相关算法)。2)完成连连看游戏的图形、算法等代码的设计。4.实验步骤(包括操作方法、数据处理)(1)界面设计(2)算法设计(3)代码设计1.3课程设计的实验环境硬件要求能运行Windows xp/7操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境, ECLIPSE开发工具。1.4课程设计的预备知识熟悉JAVA语言及ECLIPSE开发工具。2.系统模块结构图根据对“连连看”游戏的分析,该游戏可分为三个模块:算法模块、界面显示模块、控制模块。如下图3-1所示: 连连看游戏界面显
4、示模块控制模块算法模块2.1 模块设计2.1.1控制模块(1). 开始游戏 (2). 游戏结束后重新开始 (3). 提示 (4). 不能操作后自动洗牌如下图3-5所示消图提示洗牌结束判断开始游戏2.1.2 算法模块在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。如图4-3所示分 3 种情况:从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了。 (1)、相邻 (2)、两个按钮分别横向延伸,如果有一条纵向线能将延伸区相连则可消
5、除(3)、若(2)失败两个按钮分别纵向延伸,如果有一条横向线能将延伸区相连则可消除若以上三步都失败,说明这两个按钮不可以消去。具体判断流程见下图(4)、图片成对加载并打乱将图片成对的显示在场景中,并打乱主要用的是Map类。在该类中,用了一个数组以数字标记的形式来记录加载的图片是哪种图片,在每次加载图片的时候是一张图片连续加载四次,以保证加载图片成两对。然后用数组的随机方法将数组打乱。 (5)、判断两图是否能够相连两图能相连的所有情况: 2.1.3 界面显示模块1、提示2、统计分数3、提示是否进行下一局或者退出3.详细设计3.1总体算法思路由两个确定的按钮。若这两个按钮的数字相等,就开始找它们相
6、连的路经。这个找路经 * 分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有 * 三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了) * 1.相邻 * * 2. 若不相邻的先在第一个按钮的同行找一个空按钮。1).找到后看第二个按钮横向到这个空按钮 * 所在的列是否有按钮。2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。3).没有的话,再从 * 与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。没有的话路经就通了,可以消了. * * 3.若2失败后,再在第一个按钮的同列
7、找一个空按钮。1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮。 * 2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。3).没有的话,再从与第一个按钮同列的 * 那个空按钮横向到与第二个按钮同列看是否有按钮。没有的话路经就通了,可以消了。 * * 若以上三步都失败,说明这两个按钮不可以消去。 *3.2代码实现1、MainFrame.javajbPrompt.addActionListener(new ActionListener()/提示按钮增加行为监听Overridepublic void actionPerformed(ActionEvent arg0) po
8、int sp = new point();point ep = new point();game.Tip(sp, ep);jlbsp.x-1sp.y-1.setBorder(BorderFactory.createLineBorder(Color.black);jlbep.x-1ep.y-1.setBorder(BorderFactory.createLineBorder(Color.black); /每提示一次减10分game.deleteScore(10); ); class event implements ActionListener/消除两个相同的图片,若相同,则分数加20分;若不同
9、,不作反应 Overridepublic void actionPerformed(ActionEvent arg0) /重写接口方法/获取点击位置myJButton jlbNext = (myJButton) arg0.getSource(); /输出坐标System.out.println(+jlbNext.xPoint+,+jlbNext.yPoint+); if(flag)if(game.linkOK(jlbFront.xPoint+1,jlbFront.yPoint+1,jlbNext.xPoint+1,jlbNext.yPoint+1)if(game.needRandom()gam
10、e.random(); /通过needRandom()调用,实现抖动,并且重置界面for(int i=0;i10;i+)for(int j=0;j10;j+)if(game.getMyMap()i+1j+1!=0)jlbij.setIcon(imageIcongame.getMyMap()i+1j+1-1); if(game.isWin()/赢的时候,提示按钮功能被屏蔽jbPrompt.setEnabled(false); int n =JOptionPane.showConfirmDialog(null, 你的分数是+game.getScore()+是否想再来一局?,提示,JOptionPa
11、ne.YES_NO_OPTION); /再来一局if(n = JOptionPane.YES_OPTION)MainFrame f = new MainFrame();f.setTitle(连连看);f.setVisible(true);f.setSize(800, 850); class myJButton extends JButton/实现按钮和图片的比例吻合的功能/* * */private static final long serialVersionUID = 1L;public int xPoint;public int yPoint;public myJButton(Scale
12、Icon imageIcon)super(imageIcon);public void setPoint(int x,int y)xPoint = x;yPoint = y;class ScaleIcon implements Icon/初始化图标的大小 /private BufferedImage i = null; private Icon icon = null; public ScaleIcon(Icon icon) this.icon = icon; Override public int getIconHeight() return icon.getIconHeight(); Override public int getIconWidth() return i