2022年6月8日 15:42:05
# java拼图游戏
[toc]
## 使用方法
**备注**:
1. 可直接下载文件夹“代码”,然后执行“pintu.java”程序
2. 说明文档在README.md中
**安装与初始化**
1. 解压pintu.zip压缩包;
2. 点击进入子目录pintu;
3. 使用Sublime text运行pintu.java文件;
4. Sublime text配有Java环境(JDK和JRE)
**输入**
1. 鼠标选择游戏难度,分为简单、一般、困难和变态难度;
2. 游戏过程中鼠标+点击空白格周围图片进行格子图片交换;
3. 选择开始和返回。
**输入格式**
“I-Puzzle”通过鼠标点击指定范围的图片来输入,点击范围外则无响应。
**输入举例**
用户通过点击屏幕上的图片块来使其产生移动。
输出对每项输出作出说明
**输出格式**
图片在限定区域内的移动。
**播放音乐**
```
AudioClip sound = Applet.newAudioClip(new File("sounds/背景音乐.wav").toURL());
```
但是由于只支持wav格式的音乐,.wav这种格式是无损音乐。
**输出举例**
不同的图片块通过点击产生移动,若一个图片块周围都是与其紧密相连的图片块则点击时不会产生移动,至少有一个空位才可移动,其他图片自动补位,最终以一块完整的图片输出。
**出错处理和恢复**
1. 点击返回进行恢复;
2. 点击窗口右上角关闭窗口;
3. 打开任务管理器关闭此程序。
## 详细设计
Java拼图的设计思想:
### 用到的包:
a) Java.awt
b) Javax.swing
c) Java.awt.event
java.awt包提供了基本的java程序的GUI设计工具。主要包括下述三个概念:
- 组件--Component
- 容器--Container
- 布局管理器--LayoutManager
##### JLable类
`JLabel`类可以显示文本或图像。通过在显示区域中设置垂直和水平对齐来对齐标签的内容。默认情况下,标签在显示区域中垂直居中。默认情况下,纯文本标签前沿对齐; 默认情况下,仅图像标签水平居中。
##### 其他swing类
**类构造函数**
| 编号 | 构造函数 | 描述 |
| ---- | ------------------------------------------------------- | ------------------------------------------------ |
| 1 | JLabel() | 创建一个没有图像且标题为空字符串的`JLabel`实例。 |
| 2 | JLabel(Icon image) | 使用指定的图像创建`JLabel`实例。 |
| 3 | JLabel(Icon image, int horizontalAlignment) | 使用指定的图像和水平对齐创建`JLabel`实例。 |
| 4 | JLabel(String text) | 使用指定的文本创建`JLabel`实例。 |
| 5 | JLabel(String text, Icon icon, int horizontalAlignment) | 使用指定的文本,图像和水平对齐创建`JLabel`实例。 |
| 6 | JLabel(String text, int horizontalAlignment) | 使用指定的文本和水平对齐方式创建`JLabel`实例。 |
---
![img](README.assets/70.png)
> **java.awt有创建用户接口、绘图和图像的所有类。**用户接口对象,例如按钮或滚动条,
>
> 在AWT(Abstrat Window Toolkit)中被称为组件, Component类是所有AWT组件的根。
>
> 用户与组件交互操作时,一些组件会激发事件, AWTEvent类及其子类用于表达AWT组件能够激发的事件。
>
> 容器是一个可以含有组件和其他容器的组件,
>
> 容器还可以有一个布局管理器,用于控制组件在容器中的位置。
>
> AWT包含有几种布局管理器类和一个可以用来创建自己的布局管理器的接口。
>
> 在java.awt包中,又含有11个子包:
>
> 1)java.awt.color
>
> 该包提供了用于颜色的类。类中一个颜色空间的实现,
>
> 该实现基于国际颜色联盟(International Color
>
> Consortium,简称ICC)的格式规范(版本3.4)
>
> 2)Java.awt.datatransfer
>
> 该包提供了在应用程序之间或之中传送数据的接口和类。
>
> 该包定义了一个“可传递”对象的概念,“可传递”对象通过实现Transferable接口来标识自己为可传递。
>
> 另外,它还提供了一个剪切板机制,剪切板是一个临时含有一个可传递对象的对象,
>
> 通常用于复制和粘贴操作。尽管可以在应用程序中创建一个剪切板,
>
> 大多数应用程序一般都使用系统剪切板来确保数据能够在不同平台的应用程序之间传递。
>
> 3)Java.awt.dnd
>
> 拖放(drag-and-drop)出现在许多图形用户接口的系统中。
>
> 它用手势在逻辑上表示数据或对象在两个实体之间的传递。在Windows操作系统中经常使用到这种操作,非常直观明了。
>
> java.awt.dnd包提供了一些接口和类用于支持拖放(drag-and-drop)操作,
>
> 其定义了拖的源(drag-and-drop)和放的目标(drop-target)以及传递拖放数据的事件,
>
> 并对用户执行的操作给出可视的问馈。
>
> 4)java.awt.event
>
> 该包提供处理不同种类事件的接口和类,这些事件由AWT组件激发。
>
> 事件由事件源激发,事件监听者登记事件源,并接收事件源关于特定类型事件的通知。
>
> Java.awt.event包定义了事件、事件监听者和事件监听者适配器。使用事件监听者适配器,更加容易编写事件监听者。
>
> 5)java.awt.font
>
> 该包提供与字体(font)相关的类和接口。
>
> 6)java.awt.geom
>
> 该包提供Java
>
> 2D类,用于定义和执行与二维几何相关的对象上的操作。
>
> 7)java.awt.im
>
> 该包提供一些类和一个输入法框架接口。该框架使得所有的文本编辑组件能够接收日文、
>
> 中文和韩文的输入法的输入,输入法让用户使用键盘上有限的键输入成千上万个不同的字符,
>
> 文本编辑组件可以使用java.awt.geom包和java.awt.event中相关类支持不同语言的输入
>
> 法。同时,框架还支持其他语言的输入法或者其他输入方式,例如手写或语音识别。
>
> 8)java.awt.im.spi
>
> 该包提供一些接口,用于支持可以在任何Java运行时环境中使用的输入法的开发,
>
> 输入法是一个让用户输入文本的软件组件,通常用于输入日文、中文和韩文。同时,
>
> 还可以用于开发其他语言的输入法以及其他方式的输入,例如手写或语音识别。
>
> 9)java.awt.image
>
> 该包提供创建和修改图像的类。
>
> 10)java.awt.image.renderable
>
> 该包提供一些类和接口,用于生成与表现无关的图像。
>
> 11)java.awt.print
>
> java.awt.print提供一些类和接口,用干普通的打印API,该API包括
>
> 指定文档类型的能力。
>
> 页面设置和页面格式控制的机制。
>
> 管理任务控制对话框的能力。
##### 鼠标事件
### 总体思路:
### MyButton类:
该游戏主要通过按钮图片的转换进行,但是JButton本身不具有我们所需要的功能,所以创建一个�