毕业
-多功能拼图游戏软件
Java应用技术实训报告
题 目 多功能拼图游戏软件
起讫日期
所在院系
学生姓名 专 业
班 级 学 号
指导教师 职 称
所在单位
2008年 月 日
一(总体设计
本系统共包括11个java源文件和2文件。这是个功能比较齐全的拼图游戏~最关键的不用自己手动切割图片~再进行加载。而是应用类
在内存中进行图片切割和加载~方便了用户的使用。另外~该程序会根据图片的大小自动生成窗口大小~不会造成切割图片错误和切割错位。 程序最后以*.rc格式的文件来保存游戏记录。
1( 类之间的关系如图1所示。
MenuFrame
CardFrame
Puzzle
ShowImage GameOver Matrix Split Grades
point ButtonClick
2(java源文件及其功能如
1所示。
- 1 -
表1
序号 文件名 主要功能 备注
程序的主类~定义了各个组件的动作和包含主函数程1 Puzzle.java 为窗口设置图标 序的入口
游戏介绍界面 添加继续按钮 采用卡片布局 2 CardFrame.java
初始化游戏界面~创建并添加组件 声明了6个静3 MenuFrame.java 态方法
在游戏中显示完整图片来提供帮助 4 ShowImage.java
根据难度等级切割完整图片为拼图块 图块保存在内5 Split.java 存中
加载打乱的图块进行初始化游戏 6 Matrix.java
游戏记录和存档~游戏暂停的实现 存档文件格式7 Grades.java 为**.rc
游戏时间和步数的计算和游戏结束的 8 GameOver.java 判断
获得拼图的行数和列数~并向其他函 9 point.java 数传参。
实现鼠标动作。 10 ButtonClick.java
提供图片路径和成绩记录的路径 公用接口 11 Arg.java
二、详细设计
该拼图游戏结合了许多元素~可以图片切割~游戏拼图~游戏成功时和打破记录时的判断~同时还有游戏时间和步数的记录~并以文档形式进行保存。在拼图时首先把图片添加到background目录下~程序会自动获取该目录下的所有文件~并加载到游戏中~进行切割后~显示在拼图按钮上。在游戏开始后会更新“开始“菜单~增加“显示图片”菜单项。拼图结束时可以显示游戏成绩和记录的存档。
1(主类Puzzle
,1,成员变量见表2
表2
成员变量描述 变量类型 名称
开始状态 Boolean Start
- 2 -
窗口宽度 int fWidth
窗口高度 int fHeight
结束对象 gOver GameOver
焦点控制 boolean index ,2,方法见表2-1
表2-1
方法名 功能 备注
创建游戏窗口和设置图Puzzle() 标
开始游戏控制~更新开StartGame() 始菜单
endgame() 结束游戏控制 弹出结束窗口 FrameLoseFocus使窗口失去焦点事件 ()
FrameGetFocus 使窗口得到焦点事件 ()
menuNewClick() 进行切割图片 调用类 spite,, menuGradesClic实现分数记录和显示 调用类 Class Grades k()
menuShowClik() 在游戏中显示完整图片 调用类 class ShowImage
menuExit() 退出游戏 menuHelpClik() 实现帮助功能 以弹出式对话框设计 menuAboutClik(实现关于功能 介绍了相关信息和作者 )
,3,源代码见文件Puzzle.java
2(类CardFrame
,1,成员变量见表3
表3
成员变量描述 变量类型 名称 布局格式变量 CardLayout card
- 3 -
容器变量 Container con
面板数组 Jpanel Panel[] ,2,方法见表3-1
表3-1
方法名 功能 备注
创建窗口~布局游戏介CardFrame() 添加了焦点事件适配器 绍
nextCard() 转到一下张卡片 采用卡片布局 ,3,源代码见文件CardFrame.java
3(类MenuFrame
,1,成员变量见表4
表4
成员变量描述 变量类型 名称
难度等级变量 int type
文件路径 String filename
难度按钮组 ButtonGroup bgrp 图片选择按钮组 ButtonGroup frp
菜单更新控制 Boolean update
菜单项数组 JMenu Mm[] m[] ,2,方法见表4-1
表4-1
方法名 功能 备注
MenuFrame() 创建窗口 添加了焦点事件适配器
addMenu() 向菜单栏中添加菜单 以数组形式添加多个菜单 menuLevelClick实现等级选择 ()
menuBackground实现背景图片的选择 Clik()
- 4 -
getType() 返回一个难度等级 getFilename() 获取图片的名字 initMenuBegin(初始化开始按钮并设置同时给出了选择 菜单后的相应
) 快捷键 动作 initMenuBackgr初始化背景菜单 ound()
initMenuAbout(初始化关于菜单 )
initMenuOpitio初始化选择菜单 n()
initMenuLevel(初始化等级菜单 以选择框形式选择等级 )
updadeMenuBegi游戏开始后更新开始菜比原来增加了显示图片菜单项 n() 单
,3,源代码见文件MenuFrame.java
4类ShowImage
,1,成员变量见表5
表5
成员变量描述 变量类型 名称 无成员变量 ,2,方法见表5-1
表5-1
方法名 功能 备注 ShowImage() 创建显示图片的窗口 在游戏中提供帮助使用 ,3,源代码见文件ShowImage.java
5类Split
,1,成员变量见表6
表6
- 5 -
成员变量描述 变量类型 名称 难度等级 Int HARD NORML EASY 路径名称 string Filename path
,2,方法见表6-1
表6-1
方法名 功能 备注 Spilt() 创建 Spilt对象
Set() 创建存档文件
BufferedImag把背景图片切割成拼用到了awt.image. e[] divid 图块 BufferedImage里的系统类 get,, 获得Spilt对象
,3,源代码见文件Split.java
6类Matrix
,1,成员变量见表7
表7
成员变量描述 变量类型 名称
面板 Jpanel panel
拼图行数 int row
拼图列数 Int cal ,2,方法见表7-1
表7-1
方法名 功能 备注
创建图块所在的按
Matrix() 钮并加监听 且添加
到面板中
实现图块的随机排 Init() 打乱了图块的顺序 列
,3,源代码见文件Matrix.java
- 6 -
7(类Grades
,1,成员变量见表8
表8
成员变量描述 变量类型 名称
自定义类 Data Data[]
拼图步数 Int step
拼图计时 Int time ,2,方法见表8-1
表8-1
方法名 功能 备注
Grades() 构造函数
生成拼图记录的文 creatData() 件
readData() 读取已经存在的记录 以.rc格式保存记录的数据 Set() 记录游戏的数据 有打破记录的判断 Show() 显示记录
,3,源代码见文件CardFrame.java
8(类GameOver
,1,成员变量见表9
表9
成员变量描述 变量类型 名称
移动步数 int step
游戏时间 long counttime
开始时间 long now
控制变量 boolean Stop gameOver ,2,方法见表9-1
- 7 -
表9-1
方法名 功能 备注
GameOver() 构造函数创建对象
Start() 控制游戏开始
judge() 判断游戏是否结束
pause() 实现游戏的暂停
获取移动图块的步getStep() 数
getTime() 获取游戏时间
,3,源代码见文件GameOver.java
9(类point
,1,成员变量见表10
表10
成员变量描述 变量类型 名称
拼图行数 int row
拼图列数 int cal ,2,方法见表10-1
表10-1
方法名 功能 备注
getRow() 获取行数
getCal() 获取列数
Set() 设置拼图行和列
,3,源代码见文件point.java
- 8 -
10. 类ButtonClick
,1,成员变量见表11
表11
成员变量描述 变量类型 名称
按钮 JButton Button[][]
行数和列数 Int Row cal
结束标志 boolean end ,2,方法见表11-1
表11-1
方法名 功能 备注
ButtonClick( 获取各个
6个参数 )
实现相应的鼠标动actionPerfor 作 med()
,3,源代码见文件ButtonClick.java
11类Arg
,1,成员变量见表12
表12
成员变量描述 变量类型 名称
图片路径接 String path 口
记录文件接 String rc 口
,2,代码见文件Arg.java
- 9 -
三(运行效果
游戏启动后的初始界面 图1
图1
选择“关于”菜单下的 “帮助“ 菜单弹出如下对话框:图2
- 10 -
图2
选择“关于”菜单下的 “关于“ 菜单弹出如下对话框:图3
图3
- 11 -
选择 难度级别 –中级和背景图片~按开始后就可进
入游戏画面如图4
图4
在游戏过程中 可以按“开始”菜单下面的“显示图片”
来查看完整图片 如图5
图5
- 12 -
游戏成功后会显示你游戏所用时间和移动图块的步数 如图6
图6
如果你的游戏时间打破记录就会首先显示如下画面 如图7
图7
- 13 -
输入名字后 ~按确定就可以查看所有成绩排名了如图8
,也可以通过“开始”菜单下的“分数排名”来查看成绩,
图8
所有游戏截图完毕
四(工作
经过这段时间的学习我收获不小~总结起来有如下几点: 1 更进一步理解了JAVA编程的思想~体会到JAVA与其他编程语言的不同。对于这种面向对象的编程思想~使刚入门的人很快就能写出自己的程序。
2 锻炼了自己的动手和自学能力~在编程中有许多类和方法在课本中没有学到和提及到。都是通过自己查帮助文档~或通过网络进行学习和了解到的。和别人在一起交流是一件很快了的事。
3 体会到写程序最重要的是程序思想~而不是单纯的写代码。如何解决类之间的关联和继承关系~如何组织类是很关键的。此外对于接口和变量的私有还是公有~以及参数传递等方面也收获不小。
该程序需要改进的地方:
1 在变量的访问权限设置不到位~当时为了保证程序的运行通过~好多本来私有的变量都定义为公有~对于类的成员保护做的不够。 2如果在移动图块时~发出声音就会更完美。
3给程序添加背景音乐。
4程序界面风格设计还有待改进。
- 14 -