1、Java程序设计与应用开发课程设计报告设计题目拼图大作战学生姓名 学生班级 学生学号指导教师 完成时间:2016 年 06 月 21 日目录一、项目说明.2二、设计思路与关键数据结构.4三、系统的类和结构.6四、核心算法描述和相关技术说明.8五、总结和体会.9六、源代码清单.10一 项目说明1、 项目介绍该游戏是由以图片为主体的拼图小游戏,这个游戏是一个益智休闲的小游戏。该类似的小游戏在我们成长的过程中,曾经疯狂的流行着,这是一个老少皆宜的小游戏,它开发人们的智力,加强我们的动手能力和我们的眼睛的洞察力。该游戏简单方便易操作是一个很好的小游戏,也是一个经久不衰的游戏,在我们这代人中,可谓每个人
2、都玩过这种类似的小游戏,简单易操作是其一直存在的原因之一。 游戏由简单的界面组成的,操作简单,该图像块是由12块小的小图像块构成的,其中有一个空白的小图像块,该图像块是来与别的图像块交换的,以此来实现大图像的拼凑。在java标准环境下运行,实现通过小的图像块的移动实现大的图像的拼凑。通过鼠标点击选取小的图像块,通过移动鼠标实现小图像的移动,使小图像块能够上下左右的移动从而完成大图像的拼凑的完成。2、 游戏展示与使用1.主体功能可以从多张图片中选择来进行拼图游戏通过移动鼠标实现小图像的移动,使小图像块能够上下左右的移动从而完成大图像的拼凑的完成。播放游戏音乐的功能统计游戏中走的步数游戏中体现友好
3、性,加了数字提示的功能和一个原图预览的区域完成后,有设置提示弹框显示,所用的步数和恭喜2.如何使用如下图:可以先选择喜欢的图片来进行游戏,点击喜欢的图片后,再点击Start按钮便可以开始游戏在游戏过程冲,可以使用数字提示的功能,数字提示会按照1,2,9的顺序给予提示,借此降低游戏难度,增加可玩性也可以控制游戏音乐的播放与否在完成拼图后,会提恭喜完成的信息。若再想继续游戏,则继续选择喜欢的图片,再点击Start按钮继续游戏若不想玩游戏,则点击右上角叉叉,即可退出游戏。3基于Java技术,在Ecilpse下进行编译使用,作者使用环境SUMSUNG电脑,WIN10 64位操作系统 二、设计的思路与关
4、键数据结构1、 设计思路主要是利用了Java中的Swing和Awt来实现界面上的静态显示和动态交互操作,播放音乐的技术使用到了Applet,在算法的实现上,利用了布局上的坐标方式,来计算每个小方格的坐标位置,进行小图片交换和判断是否复原拼图等操作。 2、实现思路 主要分为五个类来实现总体的功能在构思布局的过程中,想了3*4的布局,借此可以直接在面板上放置比较多的按钮来实现功能。在显示界面的思路上,分为四个方面,主界面,图片预览区,拼图区,小平图单元格。然后要有实现游戏总的一个类,启动类。所以总共五个类,利用UML时序图表示如下:3、关键算法 在决定做这个小游戏的时候,翻阅了书本,书本利用了坐标
5、来计算每个小方块的关系,进行计算。但是不完善,在这个基础上,上网查阅了博客和一些IT网站,最后完成了算法方面的问题。第一个,打乱小拼图,利用第一个左上角的小方块与周围的小方块进行比较,若原理左上角的四块小方格,则表示打乱成功。第二个,如何将点击的小方块和空方块来进行交换,将两个方块坐标进行互换即刻,在判断四个方向即刻。利用UML时序图表示如下:三、系统的类和结构类结构与关系:启动起类,负责调用空的构造方法,来启动整个游戏。 主界面类,进行界面的初始化操作,和添加组件。 预览图片类,负责绘制预览区,将图片载入预览区。 拼图图片类,关键类,实现了方格移动的算法。 拼图单元格类,关键类,实现了方格移
6、动的算法利用UML时序图,陈勋结构和练习,显示如下:2、 最初完成游戏界面效果如图:此时无功能,无监听事件3、 完成监听和播放音乐功能后完成一句游戏后效果如图所示四、核心算法描述和相关技术说明主要算法:/当前方格的移动的算法public void move(String direction)/上,下,左,右switch (direction) case UP:this.setLocation(this.getBounds().x, this.getBounds().y - 150);break;case DOWN:this.setLocation(this.getBounds().x, thi
7、s.getBounds().y + 150);break;case LEFT:this.setLocation(this.getBounds().x - 150, this.getBounds().y);break;case RIGHT:this.setLocation(this.getBounds().x + 150, this.getBounds().y);break;default:/其他情况,不做移动处理break;/随机产生一个方向,进行空方格与小方法的互换/产生0-3之间的随机数,对应空方格的上下左右移动int direction = (int)(Math.random()*4);
8、/0,1,2,3switch (direction) case 0:/空方格向左移动,与左边的方格进行互换位置,左侧方格要向右移动/nullX = nullX - 150;nullX -= 150;cellMove(nullX, nullY, RIGHT);break;case 1:/空方格向右移动,与右边的方格进行互换位置,右侧方格要向左移动nullX += 150;cellMove(nullX, nullY, LEFT);break;case 2:/空方格向上移动,与上边的方格进行互换位置,上侧方格要向下移动nullY -= 150;cellMove(nullX, nullY, DOWN)
9、;break;case 3:/空方格向下移动,与下边的方格进行互换位置,下侧方格要向上移动nullY += 150;cellMove(nullX, nullY, UP);break;五、总结和体会1、优缺点与自我评价(一)、这个游戏真的太过简单,游戏功能单一,日后要完善,学新的知识(二)、没和他人进行问题和知识上的学习交流(三)、自己没有充分利用好时间,课程设计匆匆完成(四)、图形交互界面不扎实,做的时候要看书,试来试去。算法方面,这次写的两个算法相对简单,但也耗费了大量脑力,以后要多思考,学习算法。(五)、这几天的精力都在做这个游戏中,破天荒给每行代码写好注释,以后要继续保持 2、课设与课程
10、总结在没上java这门课之前,我就知道java的强大,在我们生活中的重要性。在学期开始的时候,那时我已经接触了Java,后来因为对前端方向感兴趣,所以就没怎么关心过Java,后台用的PHP多。有空的时候放开书本,发现这本书讲了好多“复古”的内容,在日常中,我并不多见到这些知识。在一次次地上网查询,了解相关的知识,从这些经历中,我打心底里对java有了新的了解,新的认识,从而对java产生了浓厚的兴趣以及好奇心,发现我之前太轻视这门课了。此时Java课堂教学虽已经停止,但是我私下,今后会继续学期这门语言,认真对待,尝试自己在这个暑假就利用Java做后台。这个小游戏挺简单的,三天的时间,没有请教别
11、人,自己慢慢的就捣鼓出来了。我知道团结的重要性,团队的力量。以后做这方面的东西,开发,还是要多和他人讨论学习。对于XX老师,很感谢您的教学付出,您在我心中是一个很负责任的老师,认真严肃的同时还能这么关心学生,贴近学生,真的打心底里佩服。六、源代码清单package gamestart;import gameui.PictureMainFrame;/* * 启动器类 */public class MainApp public static void main(String args) /创建主界面PictureMainFrame frame = new PictureMainFrame();/显
12、示界面frame.setVisible(true);/* * 图片小方格类 */package gameui;import javax.swing.Icon;import javax.swing.JButton;/* * 图片小方格类 */public class Cell extends JButton /带有图片的小方格public Cell(Icon icon) super(icon);/设置小方格大小this.setSize(150, 150);/带有图片并且带有文字的小方格public Cell(String text, Icon icon) super(text, icon);/设
13、置小方格大小this.setSize(150, 150);this.setHorizontalTextPosition(CENTER);/文字水平居中显示this.setVerticalTextPosition(CENTER);/文字垂直居中显示/当前方格的移动public void move(String direction)/上,下,左,右switch (direction) case UP:this.setLocation(this.getBounds().x, this.getBounds().y - 150);break;case DOWN:this.setLocation(this.getBounds().x, this.getBounds().y + 150);break;case LEFT:this.setLocation(this.getBound
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1