连连看JAVA课程设计报告.doc

上传人:laozhun 文档编号:3261886 上传时间:2023-03-12 格式:DOC 页数:16 大小:1.03MB
返回 下载 相关 举报
连连看JAVA课程设计报告.doc_第1页
第1页 / 共16页
连连看JAVA课程设计报告.doc_第2页
第2页 / 共16页
连连看JAVA课程设计报告.doc_第3页
第3页 / 共16页
连连看JAVA课程设计报告.doc_第4页
第4页 / 共16页
连连看JAVA课程设计报告.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《连连看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(); Ov

13、erride public int getIconWidth() return icon.getIconWidth(); public void paintIcon(Component c, Graphics g, int x, int y) float wid = c.getWidth(); float hei = c.getHeight(); int iconWid = icon.getIconWidth(); int iconHei = icon.getIconHeight(); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(

14、RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.scale(wid / iconWid, hei / iconHei); icon.paintIcon(c, g2d, 0, 0); 2、Game.javapublic boolean startGame()for(i=0;isizeX*sizeY;i+)int x = (int) (Math.random()*100);int a = savei;savei = savex;savex = a;/产生100张图片for(i=0

15、;isizeX*sizeY;i+)mapi = savei;/把图片的坐标信息放入map里for(i=1;i=sizeX;i+)for(j=1;j=sizeY;j+)myMapij=map(i-1)*sizeY+(j-1);/把图片的坐标信息放入map里return true;public boolean canLink(int startX,int startY,int endX,int endY,int step,int di)/判断能否消除int ss;for(int i=0;i4;i+) /横向搜索int x = startX + dir0i; /纵向搜索int y = startY

16、+ dir1i; /若没搜索到,则跳出if(xsizeX+1|ysizeY+1)continue;ss = step;if(i!=di)ss = step +1;if(ss =3)continue;if(x=endX&y=endY)return true;elseif(myMapxy = 0 & usedxy != true)usedxy = true;if(canLink(x,y,endX,endY,ss,i)return true;usedxy = false;elsecontinue;return false; public boolean linkOK(int startX,int s

17、tartY,int endX,int endY)/是否能消掉图片for(int i=0;iused.length;i+)for(int j=0;jusedi.length;j+)usedij=false;/初始时,定义所有图片都没用过usedstartXstartY = true;if(myMapstartXstartY!=myMapendXendY)return false;if(canLink(startX,startY,endX,endY,-1,-1)myMapstartXstartY = 0;myMapendXendY = 0;GameScore += 20;return true;e

18、lsereturn false; public boolean Tip(point sp,point ep)/实现提示功能for(sp.x=1;sp.xsizeX;sp.x+)for(sp.y=1;sp.y=sizeY;sp.y+)for(ep.x=1;ep.x=sizeX;ep.x+)for(ep.y=1;ep.y=sizeY;ep.y+)for(int i=0;iused.length;i+)for(int j=0;jusedi.length;j+)usedij=false;/初始时,定义所有图片都没用过usedsp.xsp.y = true;/改变图片的used属性,说明此图片已经消除掉

19、了if(myMapsp.xsp.y=0|myMapep.xep.y=0|(sp.x=ep.x&sp.y=ep.y)|myMapsp.xsp.y!=myMapep.xep.y)continue;/若地图里myMapsp.xsp.y或者myMapsp.xsp.y没有图片,则跳出当前循环if(canLink(sp.x,sp.y,ep.x,ep.y,-1,-1)return true;/如果能消除,则返回truereturn false;public void random()/实现抖动重置功能 for(int i=1;i=sizeX;i+) for(int j=1;jsizeY;j+) if (my

20、Mapij!=0) myMapij = save-k; public boolean needRandom()/判断是否需要抖动重置,如果无法通过提示功能消除图片,则就需要抖动重置/point startPoint = null;/point endPoint = null;if(Tip(new point(),new point()return false;return true; 3、Point.javapackage game;public class point public int x,y;4.小结以上介绍了连连看游戏的设计代码及代码实现,游戏任务不设定限定实际。所有的图标均采用数组的形式组织。由于时间有限,这个程序还有需要改进的地方,比如:添加声音,图案比较单一,并且还可以增加一些功能,例如:设定限定时间,暂停,重来一局,等。这次实训让我学到了许多东西,不仅在理论上对JAVA有了全新的认识,在实践方面也有了一定的提高。理论与实践相结合,真正做到学以致用,这次实训对我以后学习,找工作有重大意义。相信这些宝贵经验会成为我以后的重要基石。这次实训让我明白了团队合作的重要性,保证了效率和准确性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号