拼图游戏jigsaw.doc_第1页
拼图游戏jigsaw.doc_第2页
拼图游戏jigsaw.doc_第3页
拼图游戏jigsaw.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

拼图游戏(jigsaw)项目文档一、项目功能本游戏为拼图游戏,玩法类似华容道,游戏界面为一被分割为许多小块的完整图片(右下角缺少一块),具体玩法为:打乱小块图片顺序后,通过交换空白方块与其周围的小块图片进行拼图,最终拼成原图片(右下角缺少一块)即为游戏胜利。本游戏具体实现了以下功能:1、运行程序后,出现初始界面,在其最上方有四个按钮(“开始游戏”按钮、“预览全图”按钮、“选择图片”按钮和“选择难度”按钮)的面板对象,在其下方出现主面板对象(游戏的主界面即右下角缺少一块的完整图片),在界面标题栏左侧出现“拼图游戏”,右侧有最小化和关闭按钮。2、单击“开始游戏”后,小块图片顺序被打乱,游戏开始,通过鼠标点击空白方块周围的小块图片,将其移至空白方块处,从而进行拼图。3、单击“预览全图”后,界面显示完整的图片,对玩家进行提示,同时“预览全图”按钮变为“返回游戏”。单击“返回游戏”,界面变回此前的游戏界面,同时“返回游戏”按钮变为“预览全图”。4、单击“选择图片”后,可通过下拉菜单进行图片选择,从五幅图片中选择一个进行拼图游戏。5、单击“选择难度”后,可通过下拉菜单选择游戏难度,“初级”为3*3块拼图,“高级”为4*4块拼图。6、当玩家完成拼图,游戏弹出“恭喜!拼图完成! 共用n步”对话框,告知玩家完成游戏所用的步数。7、当游戏运行,自动循环播放背景音乐。二、主要技术本游戏使用的主要技术有:Java语言、事件机制、布局机制、异常处理机制、线程同步、Swing组件的运用以及GUI(图形用户界面)开发的综合应用。1、Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing组件,作为JFC类库的一部分,Swing提供了40多个组件,是AWT的4倍。本游戏中运用了Swing组件中的窗口类JFrame、面板容器JPanel、显示信息的面板类JLabel、按钮类JButton、提示框类JOptionPane等。2、图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。 本项目包含了Java GUI开发中的动作类事件(ActionEvent、TextEvent、AdjustmentEvent、ItemEvent)处理机制、布局机制以及异常处理机制。三、项目结构本项目由四个类组成,即基本按钮类(Cell)、背景音乐类(BackgroundMusic)、主面板类(MyCanvas)以及主类主框架类(MyMainFrame),分别实现如下功能:1、基本按钮类(Cell)负责控制基本小块图片的规格控制和实现它的移动功能。它继承了JButton类(按钮类)。其中int型类成员size为控制小块图片的规格(75*75(用于4*4拼图)或100*100(用于3*3拼图);而方法move(String direction , int sleep)负责根据direction(可取up、down、left、right)实现小块图片的移动功能。2、背景音乐类(BackgroundMusic)负责实现背景音乐的播放、停止、循环及音量控制。其中boolean型类成员stop负责控制音频文件的播放与停止;Play (String fileurl)方法通过文件输入流来实现音频文件(wav文件)的播放和循环,并通过value的值来设置音量。此外,该类中增添了异常处理机制,防止了无效的音频文件对程序运行的影响。3、主面板类(MyCanvas)负责实现游戏部分的界面及拼图游戏的主要功能。它是一个自定义的面板,继承了JPanel类并实行动作监听器MouseListener。其中boolean型类成员 hasAddActionListener为动作监听器的标志位,TRUE为已经添加的动作事件,FALSE为尚未添加的动作事件;类成员cell为按钮数组;Rectangle型类成员cellNull为空白方块区域数组;静态int型成员 pictureID为当前选择图片的代号,负责控制主面板和预览面板显示的图片。构造函数MyCanvas()负责进行主面板的初始化,包括设置布局管理器、设置面板大小(300*300)、设置空白方块位置、为按钮数组赋值并为每个按钮加载图片、初始化按钮的位置坐标。Start()方法负责对方块进行重新排列、打乱顺序,通过java.long.Math类的Math.random()方法获取0-4之间的随机数,控制方块的上下左右移动,进而打乱顺序。最后为所有方块(除右下角的方块外)添加动作事件,监听其动作。reLoadPicture()方法负责当选择其他图片进行拼图时,重新加载新图片,创建新的Icon对象,重新设置的每个按钮的icon对象,显示新的图片。reDividePicture()方法负责当选择其他难度进行游戏时,重新分割图片,例如当难度由初级变为高级时,增加基本按钮至16个,并重新设置每个按钮的icon对象,使其组成4*4的完整图片,反之亦然。isFinish()方法负责判断拼图是否完成(根据游戏难度不同即方块数目不同分别进行判断)。mousePressed(MouseEvent)方法负责获取事件源及事件源的坐标,判断方块应该移动的方向,并调用Cell的move方法,实现方块的移动,并在此过程中统计移动次数。之后通过调用isFinish判断拼图是否完成,若完成则撤销鼠标事件,鼠标单击方块不再起作用。4、主框架类(MyMainFrame)负责实现游戏的整个主界面极其相应功能。它是一个自定义的窗口类,继承了JFrame类,并实行动作监听器ActionListener。其中类成员myCanvas为主面板对象,JPanel对象panelNorth、panelPreview分别为上方面板和预览全图所需的面板,Button对象start、preview、set、level分别为开始游戏、预览全图、选择图片、选择难度按钮、container为窗口的子对象容器。构造函数MyMainFrame()负责为对象container赋值、为按钮赋值并设置事件、为预览全图面板赋值并进行设置、为上方面板赋值并进行设置、调用BackgroundMusic类中的Play()方法实现背景音乐的循环播放。actionPerformed(ActionEvent)方法负责实现对三个按钮的事件处理,首先获取事件源,根据事件不同分别通过调用MyCanvas类中的start()、reLoadPicture()、reDividePicture()方法来实现开始游戏、选择图片、选择难度,或实现预览全图的功能。四、运行环境JavaVirtualMachine (JVM) Java JDK 6.0 (1.6.0)五、学习感想对Java的学习,使这个漫长的暑假过得格外充实。通过参考Java典型模块与项目实践大全,我开始接触Java,并感受到其强大的吸引力。由于有了一定的c+基础,对Java的学习其实不难上手,同时也令我感受到打好基础对于以后学习其它语言和技术的重要性。Java是可以撰写跨平台应用软件的程序设计语言,而且是开源的,所以能很顺利的找到学习所需的资料,再配合参考书和视频教程,加之c+学习的基础和学习方法,最初的起步过程非常顺利。参考书中的简单实例,可以比较轻松的完成一定的程序设计,实现简单的功能。这个过程让我收获了极大的成就感,并且很大程度上增强了学好Java的信心。不过随着项目难度的增大,接触到的Java新特性更多,我深刻感受到Java的强大,也预感到前方将有很多困难。在接下来的学习中,尤其是自己尝试制作项目的过程中,我遇到了很多书本上没有答案问题。想解决这些问题,必须通过自己的努力查找资料,不断尝试。例如我遇到的背景音乐的音频文件无法播放和打包成Jar文件后加载图片找不到图片路径的问题,就是通过在网上搜索资料,不断试验,排除无效的方法,最终得以解决。在解决问题的过程中,虽然困难重重,但是我的收获格外多,也锻炼了自己动手解决问题的能力,对以后的学习大有裨益。在遇到众多难题之后,我改变了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论