Java扫雷游戏
- 格式:pptx
- 大小:1.22 MB
- 文档页数:14


合肥学院
计算机科学与技术系
课程设计报告
2009~2010学年第二学期
课程 Java语言与应用
课程设计名称 扫雷游戏
学生姓名 胡远远
学号 0604031005
专业班级 07网络工程一班
指导教师 许强 张贯虹
2010年 09月
1.设计内容及要求
1.1 扫雷游戏的基本要求
Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下:
(1)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。
(2)用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(3) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(4)扫雷胜利后,显示游戏胜利。
(5) 用户可以右击空格,可以选择标记为“旗帜”、“问号”或者返回成空格。
1.2 需实现的主要功能
(1)用户点击笑脸实现复位操作。
调用repaint()和validate()函数对界面进行重置以及刷新操作
(2)可以显示用户完全扫雷成功所花时间。
文本框TF记录扫雷成功所花的时间
(3)在失败和胜利后跳出失败或胜利的文本框
JoptionPane 该类用来调出对话框并提示胜利
2.需求分析
2.1 扫雷棋盘的布局设计
系统的整体布局为:CardLayout布局, 采用了文本框、按钮、面板、框架…等组件,菜单主要有run按钮笑脸和哭脸,按钮的功能是重新开始新的游戏。
2.2 雷区的设计
MineArea类是javax.swing包中Jpanel容器的子类,实现了ActionListener和MouseListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。标明MineArea类的主要成员变量、方法以及和MineGame类之间组合关系的UML图如下图所示。
实验题目实验1:扫雷游戏
实验时间14年11月1日实验地点A主410
实验成绩实验性质□验证性√设计性□综合性
教师评价:
□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;
□实验结果正确;□语法、语义正确;□报告规范;
其他:
评价教师签名:
一、实验目的
1.掌握选择结构;2.掌握循环结构;3.掌握循环的嵌套;4.掌握方法的地柜调用;5.掌握数组的使用;6.掌握图形的绘制
二、实验项目内容(实验题目)
编写程序实现扫雷游戏:
1)可以进行随机布雷;
2)可以对无雷各自统计其邻居所拥有的地雷数;
3)可以进行显示;
4)可以进行完整的扫雷游戏;
5)可以实现图形化的扫了程序
三、源程序(实验过程或算法)
importjava.util.Scanner;
publicclassMines{
privatestaticfinalintNUM=10;//这个NUM是雷数,可以编写一个程序来改变
privatestaticfinalintSNUM=9;//这个SNUM是扫雷的格数,可
以编写一个程序来改变
publicstaticchar[][]setMines(){
char[][]mines=newchar[SNUM][SNUM];
intcount=0;
while(count
inti=(int)(Math.random()*mines.length);//hang
intj=(int)(Math.random()*mines[0].length);//lie
if(mines[i][j]!='*'){
mines[i][j]='*';
count++;
}
}
returnmines;//布雷,到countMines里该数组被修正
}
publicstaticchar[][]countMines(char[][]mines){
for(inti=0;i
for(intj=0;j
if(mines[i][j]!='*'){
intcount=0;
for(intn=i-1;n<=i+1;n++){
目 录
一、可行性分析 ........................................................................................................... 5
1.引言 ......................................................................................................................... 5
1.1编写目的.......................................................................................................... 5
1.2项目背景.......................................................................................................... 5
1.3定义.................................................................................. 错误!未定义书签。
1.4参考资料.......................................................................................................... 6
2. 可行性研究的前提 ............................................................... 错误!未定义书签。
2.1要求.................................................................................. 错误!未定义书签。
教你怎么⽤Java开发扫雷游戏⽬录⼀、效果图⼆、实现思路三、代码实现
3.1 设置头部
3.2 设置游戏区域按钮
3.3 设置雷
3.4 计算周围雷的数量并显⽰
3.5 添加点击事件
3.6 打开指定按钮
3.7 触雷爆炸
3.8 递归打开周围
3.9 ⿏标右键事件四、胜利判定⼀、效果图
⼆、实现思路
1.界⾯上可以点开的各种实际都是按钮,创建9⾏9列的⼆维数组,然后根据这个数组来创建JButton。
2.对应创建⼆维数组data,⽤来存取数据,0表⽰周围⽆雷,-1表⽰当前是雷,其他数字表⽰周围雷的数量。
3.对应创建⼆维数组state,⽤来存取按钮状态,0未打开,1 打开 2旗⼦ 3 未知(控制显⽰对应的图标)
4.设置雷:随机⾏数 i 和列数 j,根据随机到 i、j 从⼆维数组data中取出对应的元素值,若值不为-1(不是雷),则将此元素
data[i][j]设置为-1,若值是-1(已经是雷了),则跳过,不管是否跳过都进⾏递归,直到雷的数量达到设定的最⼤数量,跳出
递归。
5.设置周围雷的数量:计算每个元素周围的雷数量(周围指的是 左上、上、右上、右、右下、下、左下、左 这8个位置),循
环⼆维数组data,判断当前值不是-1,则需要计算周围雷的数量,等会细说。
6.有任⼀格⼦被揭开,则游戏开始并且计时,当格⼦被揭开的时候分3种情况
(1)格⼦是雷,执⾏爆炸动画,游戏结束。
(2)当前格⼦周围有雷,则仅仅打开此格⼦,对应显⽰周围雷数量的数字图⽚。
(3)当前格⼦不是雷且周围没有雷(data取到的元素值为0),则依次打开周围,并且被打开的周围元素也没有雷的情况
下,继续打开(递归)。
7.右键可以进⾏插⼩旗、打问号等操作(对数组state进⾏的操作)。
三、代码实现
3.1 设置头部
//设置头部
private void setHeader() {
Container container = new Container();
container.setLayout(new GridLayout(1, 3));