Jagsaw文档

Jagsaw文档


课题分析

需求分析

基本要求

  • 在游戏界面显示一幅完整图片
  • 开始后被分割为指定M*N图块、
  • 图块随机散步
  • 使用鼠标操作小方块移动
  • 拼图还原判定

提高要求

  • 多张图片可供选择
  • 游戏提示
  • 计时功能
  • 游戏者可自行添加图片

架构设计

Created with Raphaël 2.1.0 图形界面 图形界面 游戏逻辑 游戏逻辑 游戏操作 计时计步 改变图块
  • 图形界面使用swing和awt开发完成,包含四块区域
    • 预览区。
    • 拼图游戏区。
    • 游戏状态区,显示步数、当前图片、已用时长。
    • 按钮区,包括开始按钮、图片选择选项卡和提示开关选择。
  • 游戏逻辑依靠一维数组对图块位置标记

    Created with Raphaël 2.1.0 开始 打乱方格 监听鼠标 移动方格 isFinsh? 恭喜游戏完成 结束 计步 yes no
  • 计时计步设置全局变量进行记录

开发平台

  • 使用类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 ,切割后小格 125125
    • 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,显示源图片

你可能感兴趣的:(南邮-JAVA课程大,java,游戏,界面)