java拼图游戏设计报告
Java课程设计拼图报告

Java应用技术实训报告题目多功能拼图游戏软件所在院系软件学院所在单位软件教研室一.总体设计本系统共包括11个java源文件和2文件。
这是个功能比较齐全的拼图游戏,最关键的不用自己手动切割图片,再进行加载。
而是应用类方法在内存中进行图片切割和加载,方便了用户的使用。
另外,该程序会根据图片的大小自动生成窗口大小,不会造成切割图片错误和切割错位。
程序最后以*.rc格式的文件来保存游戏记录。
1.类之间的关系如图1所示。
2.java源文件及其功能如表1所示。
二、详细设计该拼图游戏结合了许多元素,可以图片切割,游戏拼图,游戏成功时和打破记录时的判断,同时还有游戏时间和步数的记录,并以文档形式进行保存。
在拼图时首先把图片添加到background目录下,程序会自动获取该目录下的所有文件,并加载到游戏中,进行切割后,显示在拼图按钮上。
在游戏开始后会更新“开始“菜单,增加“显示图片”菜单项。
拼图结束时可以显示游戏成绩和记录的存档。
1.主类Puzzle(1)成员变量见表2(2)方法见表2-1表2-1(3)源代码见文件Puzzle.java2.类CardFrame(1)成员变量见表3(2)方法见表3-1(3)源代码见文件CardFrame.java3.类MenuFrame(1)成员变量见表4(2)方法见表4-1(3)源代码见文件MenuFrame.java4类ShowImage(1)成员变量见表5(2)方法见表5-1(3)源代码见文件ShowImage.java5类Split(1)成员变量见表6(2)方法见表6-1(3)源代码见文件Split.java6类Matrix (1)成员变量见表7(2)方法见表7-1(3)源代码见文件Matrix.java7.类Grades(1)成员变量见表8(2)方法见表8-1(3)源代码见文件CardFrame.java8.类GameOver(1)成员变量见表9(2)方法见表9-1(3)源代码见文件GameOver.java9.类point(1)成员变量见表10(2)方法见表10-1(3)源代码见文件point.java10. 类ButtonClick(1)成员变量见表11(2)方法见表11-1(3)源代码见文件ButtonClick.java11类Arg(1)成员变量见表12(2)代码见文件Arg.java三.运行效果游戏启动后的初始界面图1图1选择“关于”菜单下的“帮助“菜单弹出如下对话框:图2图2选择“关于”菜单下的“关于“菜单弹出如下对话框:图3图3选择难度级别–中级和背景图片,按开始后就可进入游戏画面如图4图4在游戏过程中可以按“开始”菜单下面的“显示图片”来查看完整图片如图5图5游戏成功后会显示你游戏所用时间和移动图块的步数如图6图6如果你的游戏时间打破记录就会首先显示如下画面如图7图7输入名字后,按确定就可以查看所有成绩排名了如图8(也可以通过“开始”菜单下的“分数排名”来查看成绩)图8所有游戏截图完毕四.工作总结经过这段时间的学习我收获不小,总结起来有如下几点:1 更进一步理解了JAVA编程的思想,体会到JAVA与其他编程语言的不同。
java拼图小游戏课程设计

java拼图小游戏课程设计一、课程目标知识目标:1. 学生能理解Java基本语法和面向对象编程的概念;2. 学生能掌握使用Java编写图形用户界面(GUI)的方法;3. 学生能了解数组的使用以及二维数组在拼图游戏中的应用;4. 学生能掌握基本的事件处理和逻辑判断方法。
技能目标:1. 学生能运用所学知识,设计并编写出一个简单的Java拼图小游戏;2. 学生能通过调试和优化代码,提高程序的稳定性和用户体验;3. 学生能在团队协作中发挥个人优势,共同完成项目任务。
情感态度价值观目标:1. 学生培养对编程的兴趣和热情,激发探究精神;2. 学生在项目实践中,树立自信心,勇于面对挑战;3. 学生通过团队协作,学会沟通、分享和承担责任;4. 学生在编程实践中,遵循道德规范,尊重他人成果。
本课程针对初中年级学生,结合Java编程语言的教学要求,注重培养学生的编程兴趣和实际动手能力。
课程以拼图小游戏为载体,让学生在实践过程中掌握Java编程基础和面向对象编程思想,提高解决问题的能力和团队协作精神。
通过本课程的学习,期望学生能够达到上述具体、可衡量的学习成果。
二、教学内容1. Java基本语法与面向对象编程:- 数据类型、变量、运算符- 控制结构:条件语句、循环语句- 面向对象:类、对象、构造方法、封装、继承、多态2. Java图形用户界面(GUI)设计:- Swing组件:窗口、标签、按钮、面板- 布局管理器:边界布局、流布局、网格布局- 事件处理:事件监听器、事件适配器3. 数组与二维数组:- 数组的声明、初始化、遍历- 二维数组的操作与应用4. 拼图游戏原理与实现:- 游戏逻辑设计- 图片切割与显示- 拼图移动与验证5. 程序调试与优化:- 代码调试技巧- 性能优化方法6. 团队协作与项目管理:- 项目任务分配- 团队沟通与协作- 项目进度管理本教学内容根据课程目标,结合教材相关章节,以科学性和系统性为原则进行组织。
puzzlejava课程设计报告

puzzlejava课程设计报告一、教学目标本课程旨在让学生掌握Puzzle Java的基本概念、语法以及编程技巧。
通过本课程的学习,学生将能够理解并运用面向对象编程的思想,熟练使用Java编写简单的小程序。
1.理解Java语言的基本语法和数据结构。
2.掌握面向对象编程的基本概念,如类、对象、封装、继承和多态。
3.熟悉Java的标准库和常用API。
4.能够使用Java编写简单的控制台应用程序。
5.能够使用Java编写图形用户界面应用程序。
6.能够进行基本的程序调试和性能优化。
情感态度价值观目标:1.培养学生的编程兴趣,提高他们对计算机科学的热爱。
2.培养学生的问题解决能力和创新思维。
3.培养学生团队合作和自主学习的精神。
二、教学内容本课程的教学内容主要包括Java语言的基本语法、数据结构、面向对象编程以及常用API。
1.Java语言的基本语法:变量、数据类型、运算符、控制结构等。
2.数据结构:数组、链表、栈、队列、树等。
3.面向对象编程:类、对象、封装、继承、多态等。
4.常用API:Java标准库、集合框架、多线程等。
三、教学方法本课程将采用讲授法、案例分析法和实验法进行教学。
1.讲授法:用于讲解基本概念、语法和编程技巧。
2.案例分析法:通过分析实际案例,让学生理解并掌握面向对象编程的思想。
3.实验法:让学生通过动手实践,巩固所学知识和技能。
四、教学资源1.教材:《Puzzle Java入门与应用》。
2.参考书:《Java核心技术》、《Effective Java》等。
3.多媒体资料:教学PPT、视频教程等。
4.实验设备:计算机、网络等。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,每个部分所占比例分别为30%、30%和40%。
1.平时表现:通过课堂参与、提问、小组讨论等方式评估学生的学习态度和理解程度。
2.作业:布置适量的编程作业,评估学生的编程能力和应用能力。
3.考试:包括期中考试和期末考试,主要评估学生对课程知识的掌握程度。
JAVA拼图游戏设计报告

五、功能说明
游戏功能图:
拼图游戏
开
查
选
始
看
择
游
图
图
戏
片
片
退 出 游 戏
本拼图游戏,运用了 Java2 中的图形处理技术和消息响应技术。通过图形技 术,实现图片的导入和分割。通过消息响应机制,使程序可以响应用户的鼠标操 作,进行拼图游戏的操作。
这个游戏主要分为四个模块,分别是游戏开始、查看图片、选择图片和退出 游戏。这四个摸块的功能各不一样,玩家如果在游戏过程中感觉拼图小块之间的 接合不明显,玩家可以点击“查看”按钮来浏览拼图完成的效果图,从而使得游 戏不会无从下手;玩家如果觉得当前拼图的画面不满意可以点击“选择”图片按 钮来更换图片,或者想更改拼图的画面,玩家可以进入游戏文件夹进行更换图片 文件,但是需要注意的是图片需要有格式,同时还需要将所要更改的图片切割成 大小相同的九个小块,具体就不详细说了,游戏文件夹中会给大家附一个.txt 文 件,供大家更换图片使用,从而提高玩家乐趣。
} } } public void breakRank() {//方格打乱重新排序 while (pane[0].getBounds().x <= 100 && pane[0].getBounds().y <= 100) {//当 第 一个方格距左上角近时
Java拼图游戏面向对象课程设计报告

图1、游戏初始界面图2、游戏运行界面} catch (IOException e) {//捕获自定义的异常e.printStackTrace();}initScreen(); //用此方法来初始化canvas,由于canvas 初始化较复杂,所以单独写一个方法buff = new BufferedImage(715, 381, BufferedImage.TYPE_INT_BGR);//Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片gb = buff.getGraphics();//存在于Image类中,存在于缓冲器中的图片,设置坐标sx = image.getWidth(this) / 3;//图片分割后每一个图片的宽度sy = image.getHeight(this) / 3;//图片分割后每一个图片的高度setLayout(new BorderLayout());//设置此布局方法,加入控件add(panel, BorderLayout.SOUTH);//布置容器的边框布局,它可以对容器组件进行安排,并调整其大小add(canvas, BorderLayout.CENTER);panel.setLayout(new GridLayout(1, 4));//把组件按指定的几行几列分开,添加其他组件时,会按添加的顺序挨个添加到该组件上panel.add(start);panel.add(show);panel.add(showStep);showStep.setEditable(false);//步骤默认false,使调用这个函数的控件不能被编辑showStep.setFont(new Font("黑体", Font.PLAIN, 16));//设置字体setSize(720, 425);setResizable(false);//表示生成的窗体大小,不可改变大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//执行关闭按钮,关闭窗体}//具体实现Canvas,进行初始化void initScreen(){canvas = new Canvas(){public void paint(Graphics g) { //覆写canvas的paint 方法gs = getGraphics(); //得到Canvas的Graphicsif (isRunning) {drawScreen();//运行,调用此方法} else {g.drawImage(image, 0, 0, this);//在指定的位置使用原始物理大小绘制指定的 Imageg.setColor(Color.gray);//设置前景颜色,变为灰色}}};canvas.addMouseListener(new MouseAdapter() {//添加鼠标事件监听器//覆写mousePressed 方法,实现鼠标点击时,图片移动public void mousePressed(MouseEvent me) {if (!isRunning) {});}//容器内游戏运行时图片的显示方法void initMap() {long time = System.nanoTime();//得到系统当前时间作为随机数种子java.util.Random rnd = new java.util.Random(time);int temp, x1, y1, x2, y2;//随机交换图片for (int i = 0; i < 100; i++) {x1 = rnd.nextInt(3);x2 = rnd.nextInt(3);y1 = rnd.nextInt(3);y2 = rnd.nextInt(3);temp = map[x1][y1];map[x1][y1] = map[x2][y2];map[x2][y2] = temp;}outer: //标记8号图片(即空白图片)for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (map[i][j] == 8) {point.setLocation(i, j);break outer;//跳转到带有空白标号的行}}}}//把整个canvas上的所有对象都绘制一遍void drawScreen() {int sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2;int t1, t2;gb.setColor(Color.white);gb.clearRect(0, 0, sx * 3, sy * 3);//清空整个缓冲区图片for (int x = 0; x < 3; x++){//图片在横行的显示for (int y = 0; y < 3; y++){//图片在列上的显示if(map[x][y] != 8) {// 目的地址dx1 = x * sx; dy1 = y * sy; // 移动的左上角坐标dx2 = dx1 + sx - 1; dy2 = dy1 + sy - 1; // 移动的右下角坐标// 源地址t1 = map[x][y] % 3 ; t2 = map[x][y] / 3 ;sx1 = t1 * sx; sy1 = t2 * sy; // 移动的左上角图标sx2 = sx1 + sx - 1; sy2 = sy1 + sy - 1; // 移动的右下角坐标gb.drawImage(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, Color.white, canvas);//绘制缓冲区图片}}}gs.drawImage(buff, 0, 0, canvas);//将缓冲区图片绘制到 canvas 上}//主方法,实现Jpgsaw类的使用,运行游戏public static void main(String[] args) {Jpgsaw pintu = new Jpgsaw("JpgsawGame");new Thread().start();//新建一个ThreadStart对象并传入一个方法给线程调用pintu.setVisible(true);//最后调用,避免组件不显示,利用线程设置组件可见}}/*播放背景音乐*/public class PlayMe {public static void playMe() {try {String file = "/JpgSaw/JpgsawGame/src/test.mp3"; //音乐文件路径FileInputStream fis = new FileInputStream(file); //路径设置BufferedInputStream bis = new BufferedInputStream(fis);//带有缓冲区的输入流new Player(bis).play(); //jar包中定义好的‘播放’方法}catch (Exception e){System.out.print("ERROR " + e);}}}6.上机调试及问题分析1、图片的存放位置出现错误,图片引用路径报错。
拼图游戏报告

南京邮电大学计算机学院2014/2015学年第1学期《JAVA语言》课程期末考核报告课题代号(单选)□课题1 □课题2 □课题3课题名称:拼图游戏小组成员人数(单选)□1人□2人□3人□4人小组成员名单(学号和姓名):(1)学号姓名(2)学号姓名(3)学号姓名(4)学号姓名课题实现采用的开发工具(如为其他,请填写具体工具名称)□NetBeans□Eclipse □JDK命令行□其他______________课题实现采用的操作系统(如为其他,请填写操作系统名称)□Microsoft Windows□Unix □ Linux □其他__________________课题实现形式(如为PC桌面应用程序之外的其他形式请填写)___________课题完成时间:_______2014年12月28日________________________对应提交的电子文档文件夹名称(准确填写):_______________________________________________________________===================以下部分为教师填写区,请勿填写======================= 评阅编号:()-()成绩评定:软件运行______软件基本功能_______软件提高功能______软件部分成绩________文档结构______文档理论___________文档撰写__________文档部分成绩________总成绩_____________备注____________________________________________________________________一、游戏要求①基本要求:在游戏界面显示一幅完整图片,点击游戏开始后该图片自动被分割为指定的M*N(其中M和N分别为图块矩阵的行和列,例如3x3=9块,4x5=20块)个图片小方块并随机散布在游戏界面中,使用鼠标拖动小方块进行拼接,正确归位的方块将被固定,直到全部图片还原,游戏结束。
java_课程设计报告_拼图游戏

目录一、题目介绍、、、、 (3)1、题目、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、32、任务、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、33、要求、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、3二、需求分析、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、3三、概要设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、41、功能分析、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、42、界面初始化、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、43、事件处理(1)鼠标事件、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、44、事件处理(2)键盘事件、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、55、状态判断、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、56、程序流程图、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、5四、详细设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、61、、html代码设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、62、、java代码设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、6五、调试结果、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、19第一个大图得拼图界面、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、19第一个拼图全图预览、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、19第二个大图得拼图界面、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、20第二个拼图全图预览、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、20第三个大图得拼图界面、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、21第三个拼图全图预览、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、21六、心得总结、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、22七、参考资料ﻩ、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、22一、题目介绍1、题目:拼图游戏设计2、任务:利用java得图形用户界面设计,设计一个拼图游戏界面,能够实现基本得游戏功能.3、要求:(1)游戏者可以选择不同得图片.(2)按完成得时间计算成绩。
java_课程设计报告_拼图游戏

目录一、题目介绍.... (3)1、题目......................................................... (3)2、任务......................................................... . (3)3、要求......................................................... .. (3)二、需求分析................................................. . (3)三、概要设计.................................................. . (4)1、功能分析......................................................... (4)2、界面初始化......................................................... .. (4)3、事件处理(1)鼠标事件......................................................... . (4)4、事件处理(2)键盘事件......................................................... . (5)5、状态判断......................................................... (5)6、程序流程图......................................................... .. (5)四、详细设计................................................. . (6)1、.html代码设计......................................................... . (6)2、.java代码设计......................................................... . (6)五、调试结果................................................. . (19)第一个大图的拼图界面......................................................... .. (19)第一个拼图全图预览......................................................... (19)第二个大图的拼图界面......................................................... .. (20)第二个拼图全图预览......................................................... (20)第三个大图的拼图界面......................................................... .. (21)第三个拼图全图预览......................................................... (21)六、心得总结................................................. . (22)七、参考资料 ................................................... (22)一、题目介绍1、题目:拼图游戏设计2、任务:利用java的图形用户界面设计,设计一个拼图游戏界面,能够实现基本的游戏功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《Web程序开发》课程大作业拼图游戏3011212046张杰2014.11一、题目说明拼图游戏不仅可以帮助人们打发时间,还可以用于锻炼儿童脑力,帮助少儿开发大脑思维,拼图游戏结合了许多元素,可以图片切割,游戏拼图,游戏成功时和打破记录时的判断,同时还有游戏时间和步数的记录,并以文档形式进行保存。
在拼图时首先把图片添加到background目录下,程序会自动获取该目录下的所有文件,并加载到游戏中,进行切割后,显示在拼图按钮上。
本游戏使用Java语言设计,开发平台为JDK。
开发工具Eclipse。
JDK是Sun Microsystems针对Java开发员的产品。
自从Java推出以来,JDK已经成为使用最广泛的Java SDK。
JDK 是整个Java的核心,包括了Java运行环境,Java 工具和Java基础的类库。
JDK是学好Java的第一步。
从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。
二、题意分析因为要制作拼图游戏,所以首先要实现图片的导入。
这是通过getImage()函数来实现的,该函数有两个参数,第一个参数指明图片的路径,第二个参数指明图片的名称。
然后,因为要实现图片摆放的随意性,所以要通过initgame()函数来实现。
Initgame()函数是自写函数,在函数体内,通过调用Math.random()函数产生随机数,用来达到图片位置摆放的随意性和随机性。
最后,因为要实现人机交互.,所以首先要通过一系列函数来实现对鼠标事件的监听和响应,这是通过函数addMouseListener(this) 和addMouseMotionListener(this)来完成的。
这样程序会区分用户对鼠标不同的操作,正确执行相应的功能。
游戏操作流程:三、设计目的本游戏的设计目的在于休闲娱乐,玩家可以在学习、编程等工作后用来休息放松,让集中的心态得到释放,对于小孩可以通过精美的卡通的图片来吸引孩子的兴趣,加强动脑动手能力。
本游戏适玩人群老少皆宜。
四、设计特点本游戏主要充分运用图形用户界面将一张图片切割成大小相同的九块小图,运用其中的八块,将小图的顺序和位置打乱,通过将图片移动到剩余的一格空白处而改变图片的位置,最终拼成原始图片。
五、功能说明游戏功能图:本拼图游戏,运用了Java2中的图形处理技术和消息响应技术。
通过图形技术,实现图片的导入和分割。
通过消息响应机制,使程序可以响应用户的鼠标操作,进行拼图游戏的操作。
这个游戏主要分为四个模块,分别是游戏开始、查看图片、选择图片和退出游戏。
这四个摸块的功能各不一样,玩家如果在游戏过程中感觉拼图小块之间的接合不明显,玩家可以点击“查看”按钮来浏览拼图完成的效果图,从而使得游戏不会无从下手;玩家如果觉得当前拼图的画面不满意可以点击“选择”图片按钮来更换图片,或者想更改拼图的画面,玩家可以进入游戏文件夹进行更换图片文件,但是需要注意的是图片需要有格式,同时还需要将所要更改的图片切割成大小相同的九个小块,具体就不详细说了,游戏文件夹中会给大家附一个.txt文件,供大家更换图片使用,从而提高玩家乐趣。
六、主要功能程序段import java.awt.Rectangle;//引入类import java.awt.event.*;import javax.swing.*;class PaneButton extends JButton {// 继承按钮类实现加图片的方格PaneButton(Icon icon) {//构造方法进行初始化,设置图标super(icon);this.setSize(100, 100);//设置每个方格的大小}public void move(String direction, int sleep) {//方格的移动if (direction == "UP") {//方格向上移动this.setLocation(this.getBounds().x, this.getBounds().y - 100);} else if (direction == "DOWN") {//方格向下移动this.setLocation(this.getBounds().x, this.getBounds().y + 100);} else if (direction == "LEFT") {//方格向左移动this.setLocation(this.getBounds().x - 100, this.getBounds().y);} else {//方格向右移动this.setLocation(this.getBounds().x + 100, this.getBounds().y);}}}public class PanelOfImage extends JPanel implements MouseListener {//图片面板加载方格对象boolean hasAddActionListener = false;//设置方格动作监听器的标识PaneButton pane[];//声明方格Rectangle nullPanel;//声明空方格,没有添图片public static int currentPID = 1;//当前选择的图片编号public PanelOfImage() {//构造方法进行初始化this.setLayout(null);//设置面板的布局为空this.setSize(400, 400);//设置面板的大小nullPanel = new Rectangle(200, 200, 100, 100);//设置空方格的位置pane = new PaneButton[9];//创建九个方格Icon icon;//声明图标for (int i = 0; i < 3; i++) {//循环为每个方格加载图片for (int j = 0; j < 3; j++) {//循环列icon = new ImageIcon("pictrue/pic_" + currentPID + "_"+ (i * 3 + j + 1) + ".jpg");//创建图标pane[i * 3 + j] = new PaneButton(icon);//创建方格在方格中加载图片pane[i * 3 + j].setLocation(j * 100, i * 100);//设置方格的位置this.add(pane[i * 3 + j]);//面板添加方格}}this.remove(pane[8]);// 移除多余的方格}public boolean isFinish() {//判断是否拼凑成功for (int i = 0; i < 8; i++) {int x = pane[i].getBounds().x;int y = pane[i].getBounds().y;if (y / 100 * 3 + x / 100 != i)return false;}return true;}public void reLoadPictrue() {//重新加载图片在重新选择图片时Icon icon;for (int i = 0; i < 3; i++) {//循环为每个方格加载图片for (int j = 0; j < 3; j++) {icon = new ImageIcon("pictrue/pic_" + currentPID + "_"+ (i * 3 + j + 1) + ".jpg");pane[i * 3 + j].setIcon(icon);}}}public void breakRank() {//方格打乱重新排序while (pane[0].getBounds().x <= 100 && pane[0].getBounds().y <= 100) {//当第一个方格距左上角近时int x = nullPanel.getBounds().x;int y = nullPanel.getBounds().y;int direction = (int) (Math.random() * 4);//随机产生一个数字对应空方格的上下左右移动if (direction == 0) {//空方格左移动,与左侧方格互换位置,左侧方格右移动x -= 100;//空主格左移if (test(x, y)) {for (int j = 0; j < 8; j++) {//循环寻打左侧的按钮if ((pane[j].getBounds().x == x)&& (pane[j].getBounds().y == y)) {//依次寻找左侧的按钮pane[j].move("RIGHT", 100);//方格向右移动一格nullPanel.setLocation(x, y);//重新设置空方格的位置break;//跳出循环}}}} else if (direction == 1) {//空方格右移动x += 100;if (test(x, y)) {for (int j = 0; j < 8; j++) {if ((pane[j].getBounds().x == x)&& (pane[j].getBounds().y == y)) {pane[j].move("LEFT", 100);//方格向左移动一格nullPanel.setLocation(x, y);break;}}}} else if (direction == 2) {//空方格上移动y -= 100;if (test(x, y)) {for (int j = 0; j < 8; j++) {if ((pane[j].getBounds().x == x)&& (pane[j].getBounds().y == y)) {pane[j].move("DOWN", 100);//方格向下移动一格nullPanel.setLocation(x, y);break;}}}} else {//空方格下移动y += 100;if (test(x, y)) {for (int j = 0; j < 8; j++) {if ((pane[j].getBounds().x == x)&& (pane[j].getBounds().y == y)) {pane[j].move("UP", 100);//方格向上移动一格nullPanel.setLocation(x, y);break;}}}}}if (!hasAddActionListener)//判断是否添加动作事件for (int i = 0; i < 8; i++){//循环为每个方格添加动作事件pane[i].addMouseListener(this);}hasAddActionListener = true;}private boolean test(int x, int y) {//检测方格是否在指定的范围内移动if ((x >= 0 && x <= 200) || (y >= 0 && y <= 200))return true;elsereturn false;}public void mouseClicked(MouseEvent arg0) {//鼠标点击时调用}public void mouseEntered(MouseEvent arg0) {//鼠标进入组件区域时调用}public void mouseExited(MouseEvent arg0) {//控制鼠标不能移动出面板的范围}public void mouseReleased(MouseEvent arg0) {//鼠标按键在组件上释放时调用}public void mousePressed(MouseEvent event) {//鼠标按下时调用PaneButton button = (PaneButton) event.getSource();//获得鼠标按的方格按钮int x1 = button.getBounds().x;//获得该方格按钮的横坐标int y1 = button.getBounds().y;//获得该方格按钮的纵坐标int nullDir_X = nullPanel.getBounds().x;//得到空方格的横坐标int nullDir_Y = nullPanel.getBounds().y;//得到空方格的纵坐标if (x1 == nullDir_X && y1 - nullDir_Y == 100)//进行比较果满足条件则交换button.move("UP", 100);//方格向上移动else if (x1 == nullDir_X && y1 - nullDir_Y == -100)button.move("DOWN", 100);//方格向下移动else if (x1 - nullDir_X == 100 & y1 == nullDir_Y)button.move("LEFT", 100);//方格向左移动else if (x1 - nullDir_X == -100 && y1 == nullDir_Y)button.move("RIGHT", 100);//方格向右移动elsereturn;nullPanel.setLocation(x1, y1);//重新设置空方格的位置this.repaint();//重新加载if (this.isFinish()) {//进行是否完成的判断JOptionPane.showMessageDialog(this, "恭喜你,完成拼图");for (int i = 0; i < 8; i++){//循环撤消鼠标事件pane[i].removeMouseListener(this);}hasAddActionListener = false;}}}import java.awt.*;//引入类import java.awt.event.*;import javax.swing.*;public class TextImagePieceTogether extends JFrame implements ActionListener {//操作实现拼图的游戏的类PanelOfImage imagePanel;//声明图片面板JPanel panelOfSouth, panelOfLook;////声明南侧面板和查看面板Button startButton;//声明开始按钮Button lookButton;//声明查看按钮Button chooseButton;//选择按钮Container container;// 容器,得到内容面板public TextImagePieceTogether() {//构造方法进行初始化container = this.getContentPane();//获得内容面板startButton = new Button("开始");//创建开始按钮startButton.addActionListener(this);//添加监听事件lookButton = new Button("查看");lookButton.addActionListener(this);chooseButton = new Button("选择");chooseButton.addActionListener(this);panelOfLook = new JPanel();//创建查看面板panelOfLook.setLayout(null);//设置布局Icon icon = new ImageIcon("pictrue/pic_" + PanelOfImage.currentPID+ ".jpg");//创建图标JLabel label = new JLabel(icon);//创建图标标签label.setBounds(0, 0, 300, 300);//设置标签的位置panelOfLook.add(label);//添加标签panelOfSouth = new JPanel();//创建南侧面板panelOfSouth.setBackground(Color.red);//设置背景颜色panelOfSouth.add(startButton);//添加开始按钮panelOfSouth.add(lookButton);//添加查看按钮panelOfSouth.add(chooseButton);//添加选择按钮imagePanel = new PanelOfImage();//创建图片面板container.add(imagePanel, BorderLayout.CENTER);container.add(panelOfSouth, BorderLayout.SOUTH);this.setTitle("拼图游戏");//设置标题this.setLocation(300, 200);//设置位置this.setSize(308, 365);//设置大小this.setResizable(false);//设置是否可以通过某个用户操作调整this.setVisible(true);//设置可视this.setDefaultCloseOperation(3);//设置默认关闭操作}public void actionPerformed(ActionEvent event) {//按钮触发的事件Button button = (Button) event.getSource();//获得事件按钮源if (button == startButton) {//如果是开始按钮imagePanel.breakRank();//调用图片方格打乱方法} else if (button == lookButton) {//如果是查看事件if (button.getLabel() == "查看") {//如果按钮标签为"查看"container.remove(imagePanel);//容器移除图片面板container.add(panelOfLook);//容器添加查看标签panelOfLook.updateUI();//不用调整大小就可以出现新增删的组件container.repaint();//重绘button.setLabel("返回");//设置按钮标签} else {container.remove(panelOfLook);//容器移除查看面板container.add(imagePanel);//容器添加图片面板container.repaint();//重绘button.setLabel("查看");}} else if (button == chooseButton) {//如果是选择按钮Choice choice = new Choice();//创建选择器choice.add("--小猫--");//添加列表项choice.add("--QQ--");int i = JOptionPane.showConfirmDialog(this, choice, "选择图片",JOptionPane.OK_CANCEL_OPTION);//弹出对话框if (i == JOptionPane.YES_OPTION) {//选择对话框的确定按钮PanelOfImage.currentPID = choice.getSelectedIndex() + 1;//获得列表项的编号imagePanel.reLoadPictrue();//图片重载Icon icon = new ImageIcon("pictrue/pic_"+ PanelOfImage.currentPID + ".jpg");//获得图片图标JLabel label = new JLabel(icon);//根据图标设置标签label.setBounds(0, 0, 300, 300);//设置标签的方位panelOfLook.removeAll();panelOfLook.add(label);panelOfLook.repaint();}}}public static void main(String[] args) {//java程序主入口处new TextImagePieceTogether();//实例化对象}}七、运行结果游戏界面:开始游戏:查看全图:更换图片:八、编程经验本练习制作拼图游戏的实例,运用了Java2中的图形处理技术和消息响应技术。