Jagsaw文档
课题分析
需求分析
基本要求
- 在游戏界面显示一幅完整图片
- 开始后被分割为指定M*N图块、
- 图块随机散步
- 使用鼠标操作小方块移动
- 拼图还原判定
提高要求
- 多张图片可供选择
- 游戏提示
- 计时功能
- 游戏者可自行添加图片
架构设计
- 图形界面使用swing和awt开发完成,包含四块区域
- 预览区。
- 拼图游戏区。
- 游戏状态区,显示步数、当前图片、已用时长。
- 按钮区,包括开始按钮、图片选择选项卡和提示开关选择。
游戏逻辑依靠一维数组对图块位置标记
- 计时计步设置全局变量进行记录
开发平台
- 使用类unix平台开发
- 文件编码utf-8
- 可跨平台运行,适配文件目录。
软件架构
├─Picture
├─readme.md
└─Jagsaw.jar
算法分析
- 图块随机算法
- 使用0~3的随机数代表上下左右四个方向,确定方向后移位。
- 图片切片算法
- 读取源图像的宽度和高度,默认图片必须是375*500,方块大小为125*125,自动计算可划分的方格后,一次按照picname_nember.jpg的命名格式命名。
代码分析
项目目录结构
├─.settings
├─bin
│ └─com
│ └─neo0
│ └─Jagsaw
│ ├─app
│ ├─pic
│ └─ui
├─Picture
└─src
└─com
└─neo0
└─Jagsaw
├─app
├─pic
└─ui
- Picture目录内存放图片资源,包括源图片和切分后的图片。
- Picture内文件命名规则为,源图片按序号编号,图片对应的切分小格为”编号_图格编号.jpg”.
- 代码包括三个package
- com.neo0.Jagsaw.app
- Main.class程序入口
- com.neo0.Jagsaw.pic
- Cut.class用于切割图片,默认要求输入图片 375×500 ,切割后小格 125∗125 。
- com.neo0.Jagsaw.ui
- Cell.class定义小方格对象,继承自JButton,构造大小为 125×125 的Button,构造内容为指定已划分好的图片小格,定义move方法。
- JagsawMainFrame.class,定义图形界面主框架,包含四块区域
- setBorder 拼图游戏区pictureCanvas
- setBorder 图片预览区picturePreview
- JPanel 游戏设置按钮区的面板 leftPanel
- setBorder 游戏提示按钮
- ButtonGroup 图片选择选项卡,和开始按钮
- JPanel 游戏状态区的面板 rightPanel
- JTextField 图片名 name
- JTextField 步数 steps
- JTextField 用时 time
- PictureCanvas.class,定义游戏主逻辑
sequence
├─PictureCanvas()
├─reLoadPictureAndNum()
├─reLoadPictureAndClear()
├─start()
├─cellMove()
├─mousePressed()
└─isFinish()
- PictureCanvas()创建方格
- reLoadPictureAndNum()重新加载图片并加载数组信息
- reLoadPictureAndClear()重新加载图片并清空提示
- start()游戏逻辑入口,打乱方格,计时开始
- cellMove()移动方格
- mousePressed()监听事件控制空格移动的方向,并计步
- isFinish()根据预编号判断游戏是否完成
- PicturePreview.class,显示源图片
- com.neo0.Jagsaw.app