目录1开发环境及相关技术的介绍.......................................11.1开发环境.........................................11.2Java语言特点.....................................12游戏实现功能解析及界面..........................................12.1游戏规则介绍.......................................12.2游戏实现功能.......................................22.2.1主窗口界面....................................22.2.2主窗口菜单....................................32.2.3游戏过程中的出现的相关窗体...................63游戏程序实现......................................................83.1程序类主要功能介绍................................83.2程序源代码........................................94小结...............................................................271基于Java的拼图游戏设计1开发环境及相关技术的介绍1.1开发环境操作系统:MicrosoftWindowsXP程序语言:Java开发环境:JDK-6u6-windows-i586-P1.2Java语言特点1).平台无关性Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。Java的数据类型与机器无关。2).安全性Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。3).面向对象Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。4).分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。5).健壮性Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。2游戏实现功能解析及界面2.1游戏规则介绍1)本游戏是一个Java语言的拼图游戏,有一个格子是空的,其他格子内随2机放置由要拿来拼图的图片切割成的若干个小图片,图片的切割按照一定的公式计算,因为,该通过单击任意一个与空格子相邻的方块可以把该方游戏中设有拼图游戏的等级,根据不同的等级,按照公式会切割成不同的小图片块数。2)在开始游戏之前,可以选择游戏等级后再点击“开始”菜单里的“新游戏”,进行拼图游戏,通过将空格旁边的小图片移入空格子内(不断的移动方块),来实现拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。3)游戏拼完后,会弹出一个“信息”框,显示你玩游戏所用的步数与时间,点击“确定”后,会弹出一个“输入”框,可以在里面输入游戏者的姓名,单击“确定”后会弹出游戏的记录框。4)游戏的简单规则在游戏界面的“关于”菜单内的“帮助”信息框内已经简单介绍了。游戏前可以先预览看看。2.2游戏实现功能2.2.1主窗口界面1)游戏初始状态当游戏刚运行时,会出现如下界面,本游戏中已经存在了三张图片,如过游戏者想拼自己感兴趣的图片的话,可以将自己的图片放入到“background”(背景图片)文件夹中,再进行“选择”-“背景图片”中选择你自己的图片,然后选择“等级”-“困难”或“普通”或“简单”,进行等级选择,最后选择“开始”-“新游戏”就可以拼自己想拼的图了。初始窗口如图1所示:图1游戏初始窗口2)游戏进行状态当游戏者选择好图片与等级后,就可以进行拼图游戏了及进入游戏的进行状态。其游戏进行状态如图2所示:3图2游戏进行状态3)游戏暂停状态当游戏者,在游戏过程中半途暂停游戏的话,将出现如图3所示的游戏暂停状态的界面。当游戏者又想继续游戏时,直接单击界面上的“继续”字样,就可以继续游戏了。图3游戏暂停状态2.2.2主窗口菜单在游戏的主窗口菜单中包括如下几个菜单:(1)“开始”菜单。包括了,“新游戏”、“成绩记录”、“图片预览”、“退出游戏”。如图4所示。“新游戏”:单击可以开始游戏,如图2所示游戏进行状态。“成绩记录”:单击可以查看游戏者的游戏成绩记录。如图5所示。初始的成绩记录。“图片预览”:在游戏过程中可以单击预览图片,对照着拼,如图6所示。“退出游戏”:游戏者要结束游戏可直接单击退出游戏。4图4开始菜单图5初始成绩记录图6图片预览(2)“选择”菜单。包括了,“等级”、“背景图片”。如图7所示。当运行游戏时,如果没有把“background”这个文件夹放入主程序的目录下,在运行游戏选择背景图片时,将没有图片可选,界面如图8所示,这是可以按照“初始状态”界面上的提示进行操作。若正常的有“background”在主程序路径下的话,运行游戏选择背景图片的话,就可以选择图片了,界面如图9所示。“等级”:在游戏者开始游戏之前,要进行游戏等级选择,共有困难、普通、简单三种选择。其图片的切割块数,会根据选择的等级不同,而有所不同。简单的是一共8个小图片。“背景图片”:这里保存了所要拼的所有图片。在游戏前要进行选择。5图7图8图9(3)“关于”菜单。包括了“帮助”、“关于”两个下拉菜单。如图10所示。图10“关于”菜单6“帮助”:在游戏时,可以单击查看游戏的简单规则,界面如图11所示。“关于”:可查看该游戏的版本、作者、与作者的Email的相关信息,界面如图12所示。图11“帮助”信息框图12下拉单“关于”的消息框2.2.3游戏过程中的出现的相关窗体(1)提示信息窗口当游戏者运行游戏时,如果没有把“background”这个文件夹放入主程序的目录下,在运行游戏选择背景图片时,将没有图片可选,若此时直接“开始”-“新游戏”,将会弹出如下提示信息框。如图13所示。图13提示信息框(2)拼图成功界面若选择abc.jpg图片拼图时,若拼图成功,界面如图14所示。7图14拼图成功(3)成绩记录输入框当游戏者完成拼图游戏后,将出现一个成绩记录框(“输入”框),输入游戏者的姓名。如图15所示。输入后单击确定按钮,将弹出总的成绩记录框。如图16所示。图15(a)输入前图15(b)输入后8图16成绩记录框3游戏程序实现3.1程序类主要功能介绍该游戏程序中包括11个类。包括:ButtonClick.class、CardFrame.class、GameOver.class、Data.class、Grades.class、Matrix.class、MenuFrame.class、point.class、Puzzle.class、ShowImage.class、Split.class。其中主要的类实现的功能如下:1)ButtonClick.class该类主要是实现鼠标事件,让玩家在用鼠标点击能够移动拼图的小图片,移动到周围空格的地方2)CardFrame.class该类主要实现,初始界面的相关提示信息。3)GameOver.class该类主要实现游戏过程中的计时、暂停、结束等功能,游戏结束时的信息。4)Data.class该类主要实现保存游戏者的游戏成绩记录的相关数据。5)Grades.class该类主要实现成绩记录的初始化,在拼图成功后可记录游戏者姓名的功能,并直接提取等级、步数与时间等信息的功能。保存成绩记录信息,以便游戏者查看。6)MenuFrame.class该类主要实现有主菜单与子菜单的功能。并设置相关的快捷键功能。7)Puzzle.class该类是该游戏程序的主程序,从游戏界面大小到游戏过程中出现的所有信息框等相关功能都都到了实现,调用相关类实现其功能。8)ShowImage.class9该类主要实现图片的提取与切割的功能。3.2程序源代码1)Arg.javapublicinterfaceArg{publicstaticfinalStringpath=background;publicstaticfinalStringrc=Game.rc;}2)ButtonClick.javaimportjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JOptionPane;publicclassButtonClickimplementsActionListener{privateJButton[][]button;privatepointpint;privateintrow;privateintcal;privateint[][]matrix;privateGameOvergOver;privatebooleanend;publicButtonClick(JButton[][]b,pointp,int[][]m,intr,intc,GameOverg){button=b;pint=p;matrix=m;row=r;cal=c;gOver=g;end=false;}publicvoidactionPerformed(ActionEvente){if(end||!pint.neighbor(row,cal))return;intr=pint.getRow();intc=pint.getCal();button[r][c].setIcon(button[row][cal].getIcon());button[row][cal].setIcon(null);pint.set(row,cal);intt=matrix[r][c];10matrix[r][c]=matrix[row][cal];matrix[row][cal]=t;end=gOver.judge();}}3)CardFrame.javaimportjava.awt.BorderLayout;importjava.awt.CardLayout;importjava.awt.Container;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowEvent;importjava.awt.event.WindowAdapter;importjavax.swing.JButton;importjavax.swing.JLabel;importjavax.swing.JPanel;publicabstractclassCardFrameextendsMenuFrame{privateCardLayoutcard;privateContainercon;protectedJPanel[]panel={newJPanel(),newJPanel()};publicCardFrame(){con=this.getContentPane();card=newCardLayout();con.setLayout(card);panel[0].setLayout(null);JLabellabel;label=newJLabel(请输入你的图片到);label.setBounds(10,15