广西师范大学漓江学院理学系
《JAVA程序设计》课程设计报告
设计题目: 基于JAVA扫雷游戏的设计
组 长:
组 员:
指导教师: 陈意山讲师
设计时间: 2011年12月25日
评阅意见: 指导老师签名: 年 月 日 | |||
设计报告成绩 java程序设计主要内容(50分) | 演示答辩成绩 (30分) | 过程考核成绩 (20分) | 总分 |
基于JAVA扫雷游戏的设计
1 开发背景及意义
扫雷游戏是Windows系统自带的一个益智类的小游戏,它通过点击方格并以出现的数字来判断附近地雷的数量,将全部地雷做上标记即可胜利。经过这么多年,Windows操作系统也经过了多次的更新换代,很多的功能得到了完善 系统也越来越精致复杂。但是操作系统自带的这款扫雷小游戏还是维持着原来的样子和功能,并没有因为时间的推移而被遗忘。这说明了扫雷游戏得到了很多人的喜爱和支持,才能一直存在到现在。
扫雷游戏是一个益智类的小游戏,通过这个游戏我们可以提高鼠标的操作能力,还可以锻炼我们的思维能力,是一个很好的小游戏。大学里我们学到了很多相关的理论知识,但是光有理论知识是不够的,最重要的还是要有实践的能力,所以本课程设计我选择了扫雷游戏的开发与设计这个项目。此游戏的功能类似于Windows系统自带的扫雷游戏,而且在自定义雷区模块用户可以选择级别,从而提高了游戏的趣味性。
2 需求分析
扫雷游戏的用户很广泛,老少皆宜。当他们在繁忙的工作学习后,可以通过这个小游戏放松心情来调节一下氛围。因此本系统的设计简单容易操作,更能吸引广大用户的注意。
扫雷游戏有三个级别难度,随着级别的增高,地雷数目就越多。当游戏初始化时,系统就随机布置地雷;用户开始游戏时,计时器开始计时;游戏胜利或者失败后,弹出提示对话框,计时器停止计时;在自定义模块里,用户可以选择游戏的级别,然后设置地雷的数目。
3 总体设计
3.1 类关系图
在本系统中共使用到7个Java源文件,其关系如下:
文件 | 内容 | 备注 |
AboutFrame.java | 程序“关于”对话框。 | |
JCounter.java | 计数器类。 | |
JMine.java | 主程序类 | |
JMineArth.java | 地雷分布图算法类 | |
JMineButton.java | Jbutton的扩展类有行号、列号、标记标志和单击标志 | |
StartJMine.java | 程序入口点 | |
WinFrame.java | 胜利对话框,有易中难三个启动选项 | |
StartJMine.bat | 运行程序的批处理文件 | |
3.2 程序界面
程序界面 | 胜利对话框 |
3.3 程序基本流程图
3.4 JMine类是本程序的基础类。它实现的左右有:打开难度设置窗口类、About窗口类、初始化地图、运行JMineArth类以按照设定单独进行地雷埋设、自动检测挖雷、判定胜利等等。
3.5 JMineArth主类其中一个最重要的作用,是负责在雷区中(10*10)矩阵中埋设地雷,通过难度设置中确定的地雷个数进行循环,每循环设置一个雷,将通过获取两个随机数以确定矩阵的行和列。
3.6 JCounter类是进行地雷个数的计算,方便用户使用时了解雷区地雷个数,以及已标记的地雷个数。
3.7 JMinebutton类是程序窗口雷区的按钮,用于表示该地点的各种状态:未标记雷、标记有雷、显示类、显示该区域周围雷的个数等。
3.8 WinFrame类设定有3个难易级别,三个难易级别依次是12、24、36个雷。
4 编码和实现
4.1 扫雷难易级别设置(WinFrame类)
private int level; //难度级别
public int getMineNum() {
return(level*12); //设置地雷个数分别为1*12、2*12、3*12
}
public void mouseClicked(MouseEvent e) {
//System.out.println("Jerry Click");
Source() == easy) {
level = 1; //easy级别
}
Source() == middle) {
level = 2; //middle级别
}
Source() == hard) {
level = 3; //hard级别
}
isOk = true;
}
4.2 埋设地雷(JMineArth类)
负责在雷区中(10*10)矩阵中埋设地雷,通过难度设置中确定的地雷个数进行循环,每循环设置一个雷,将通过获取两个随机数以确定矩阵的行和列。
public int [][] mine; //雷区矩阵
private void setMine(int mineNum, int Outrow, int Outcol) {
int col=0, row = 0, i=0;
//Math.srand(now);
while (i < mineNum) { //循环
col = (int)(Math.random()*100)%10; //取0-9之间的随机数为行号
row = (int)(Math.random()*100)%10; //取0-9之间的随机数为列号
if (mine[col][row]==0 && (row!=Outrow || col!=Outcol || Outrow==10 )) {
mine[row][col]=9; //如果未埋雷,则设定此位置有雷。
i++;
}
}
}
4.3 挖雷(JMine类)
即用户点击雷区按钮,如果有雷即触雷;否则进行递归嵌套循环操作,以读取此处周围的地雷数量,或者自动挖雷。
void checkMine(int row, int col) {
if (mine.mine[i][j] == 9) { //判断此处是否有雷
bomb(i,j); //触雷,程序结束,打开触雷程序。
}
else if (mine.mine[i][j] == 0 && mineButton[i][j].getClickFlag() == false) {
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论