文档库 最新最全的文档下载
当前位置:文档库 › Java 课程设计报告 扫雷游戏

Java 课程设计报告 扫雷游戏

Java 课程设计题目:扫雷游戏

姓名:学号:

指导老师 : 黄国辉

设计时间:2012年4月

摘要

在今天,游戏日益快速更新的情况下,相信大家对Windows 2000/XP系统提供的扫雷游戏或多或少都有所了解。闲暇时刻,玩玩扫雷游戏,不但有利于提高自己快速反应的能力,还有助于减舒缓压力,它是一款简单而有趣的游戏,本次课程设计就是要完成由Java设计的一个简单扫雷游戏。

Abstract:

Nowadays,the game has been undated quickly, believer that everyone know more or less about the Windows 2000/XP system provides the MineSweeper game . Leisure time, play the game, not only help us to improve our own rapid of reaction capability, and helps reduce stress, it is a simple and interesting games, the curriculum design is to be completed by the java design of a simple game of mine clearance.

目录

一需求分析 (4)

1.1设计背景 (4)

1.2可行性分析 (4)

1.3功能分析 (4)

二总体设计 (5)

2.1 系统结构分析 (5)

2.2 系统流程分析 (5)

2.2.1 系统流程描述 (5)

2.2.2 系统流程图 (5)

2.3 系统模块设计 (6)

2.3.1 模块一:随机布雷与初始化界面 (6)

2.3.2 模块二:游戏各级别的选择与设计 (10)

2.3.3 模块三:判断所点击的是否为雷 (13)

3. 小结 (18)

东华理工学院长江学院课程设计评分表 (19)

一需求分析

1.1设计背景

随着社会的不断进步,人们所承受的压力不断上升,在游戏层出不穷的时刻,扫雷游戏仍受到不少人的青睐,其本身的性质,决定了人们对它的喜爱程度,不需要特殊的技巧,不需要不断地升级,不需要太多的时间进行初步的熟悉,简简单单却乐趣无穷。

1.2可行性分析

◆适用于各种群体,学生、老师、白领......

◆简单却有效地舒缓压力,消磨闲暇时光

◆一局所需的时间很短,低级的只需十多秒

1.3功能分析

◆随机布雷

◆可以选择相应的等级

◆显示一局完成的时间

◆判断错误时,待游戏结束时会有不同标记

二 总体设计

2.1 系统结构分析

根据系统的功能分析,可得系统系统总体的功能结构图,如下:

扫雷游戏主界面

游戏开始帮助

高级

中级初级

图2.1-1系统结构图

2.2 系统流程分析

2.2.1 系统流程描述

◆ 游戏初始页面为初级的游戏界面 ◆ 点击开始便可开始扫雷

◆ 点击方块,系统判断是否点中了雷 ◆ 点击开始可重新开始游戏

◆ 菜单中有“初级”、“中级”、“高级”三个级别可供选择

2.2.2 系统流程图

系统流程图如下:

开始

结束

定义并初始化个按

钮,菜单等

游戏

按钮

事件处理初级中级高级

重新开始

方块

是否点中雷

出现相应级别的几面

菜单按钮

N

Y

图2.2-1系统流程图

2.3 系统模块设计

2.3.1 模块一:随机布雷与初始化界面

模块负责人 姓名: 学号:

1. 模块的主要任务

◆ 利用产生随机数的方法完成游戏中随机布雷的要求 ◆ 初始化菜单,包括了游戏的三个不同级别

2. 界面的截图部分源代码

游戏的初始界面截图如下:

图 2.3.1-1 初始界面页面初始化的源代码:

//产生随机数

for(int i=0;i

{ int p=1;

int m=(int)(Math.random()*row*col);

while(p==1)

{ int l=1, int j;

for( j=0;j

{ if(a1[j]==m)

{ m=(int)(Math.random()*row*col);

l=0;

}

}

if(j==i)

{ a1[i]=m;

p=0;

}

}

}

b1.setText(bon+"");

b2.setText("0");

//布雷

for(int i=0;i

{ int x=(a1[i]/col+1);

int y=(a1[i]%col+1);

a[x][y]=100;

}

for(int i=0;i

{ for(int j=0;j

{ if(i==0||j==0||i==row+1||j==col+1)

{ a[i][j]=0;

}

}

}

for(int i=1;i<=row;i++)

{ for(int j=1;j<=col;j++)

{ if(a[i][j]!=100)

{ for(int l=j-1;l<=j+1;l++)

{ if(a[i-1][l]==100)

{ a[i][j]++;

}

if(a[i+1][l]==100)

{ a[i][j]++;

}

}

if(a[i][j-1]==100)

{ a[i][j]++;

}

if(a[i][j+1]==100)

{ a[i][j]++;

}

}

}

}

游戏的菜单界面截图如下:

图2.3.1-2 游戏菜单界面

菜单页面设置部分代码:

public void initGUI()

{ p3=new JPanel();

b=bon;

JMenuBar menuBar=new JMenuBar();

JMenu menu1=new JMenu("游戏");

JMenu menu2=new JMenu("帮助");

JMenuItem mi1=new JMenuItem("初级");

JMenuItem mi2 = new JMenuItem("中级");

JMenuItem mi3 =new JMenuItem("高级");

mi1.addActionListener(this);

menu1.add(mi1);

mi2.addActionListener(this);

menu1.add(mi2);

mi3.addActionListener(this);

menu1.add(mi3);

menuBar.add(menu1);

menuBar.add(menu2);

p3.add(menuBar);

b1=new JLabel(bon+"");

a1=new int[bon];

btn =new JButton("开始");

btn.addActionListener(this);

b2=new JLabel("0");

b3=new JLabel("");

btns=new JButton[row*col];

p=new JPanel();

p.setLayout(new BorderLayout());

contentPane.add(p);

p.add(p3,BorderLayout.NORTH);

p1=new JPanel();

p1.add(b1);

p1.add(btn);

p1.add(b2);

p1.add(b3);

p.add(p3,BorderLayout.NORTH);

p.add(p1,BorderLayout.CENTER);

p2=new JPanel();

p2.setLayout(new GridLayout(row,col,0,0));

for(int i=0;i

{ btns[i]=new JButton("");

btns[i].setMargin(new Insets(0,0,0,0));

btns[i].setFont(new Font(null,Font.BOLD,25));

btns[i].addActionListener(this);

btns[i].addMouseListener(new NormoreMouseEvent());

p2.add(btns[i]);

}

contentPane.add(p,BorderLayout.NORTH);

contentPane.add(p2,BorderLayout.CENTER);

}

2.3.2 模块二:游戏各级别的选择与设计

模块负责人姓名:学号:

1.模块主要任务

◆选择相应级别候,出现相应雷数的游戏界面

◆多各个界别的方块大小,界面大小进行设置

2.界面的截图和部分源代码

初级游戏界面截图如下:

图2.3.2-1 初级游戏界面

中极游戏界面截图如下:

图2.3.2-2 中级游戏界面高级游戏界面截图如下:

图2.3.2-3 高级游戏界面

各级别游戏界面设计的源代码:

if(e.getActionCommand()=="初级")

{ row=9;

col=9;

bon=10;

a1=new int[bon];

b=bon;

a = new int[row+2][col+2];

this.remove(p2);

timer.stop();

b1.setText("10");

b2.setText("0");

b3.setText("");

btns=new JButton[row*col];

p2=new JPanel();

p2.setLayout(new GridLayout(row,col,0,0));

for(int i=0;i

{ btns[i]=new JButton(" ");

btns[i].setMargin(new Insets(0,0,0,0));

btns[i].setFont(new Font(null,Font.BOLD,25));

btns[i].addActionListener(this);

btns[i].addMouseListener(new NormoreMouseEvent());

p2.add(btns[i]);

}

}

else if(e.getActionCommand()=="中级")

{ row=16;

col=16;

bon=40;

a1=new int[bon];

a = new int[row+2][col+2];

b=bon;

this.remove(p2);

timer.stop();

b1.setText("40");

b2.setText("0");

b3.setText("");

btns=new JButton[row*col];

p2=new JPanel();

p2.setLayout(new GridLayout(row,col,0,0));

for(int i=0;i

{ btns[i]=new JButton(" ");

btns[i].setMargin(new Insets(0,0,0,0));

btns[i].setFont(new Font(null,Font.BOLD,25));

btns[i].addActionListener(this);

btns[i].addMouseListener(new NormoreMouseEvent());

p2.add(btns[i]);

}

}

else if(e.getActionCommand()=="高级")

{ row=16;

col=32;

bon=99;

setSize(33*col,33*row+80);

a1=new int[bon];

a = new int[row+2][col+2];

b=bon;

this.remove(p2);

timer.stop();

b1.setText("99");

b2.setText("0");

b3.setText("");

btns=new JButton[row*col];

p2=new JPanel();

p2.setLayout(new GridLayout(row,col,0,0));

for(int i=0;i

{ btns[i]=new JButton(" ");

btns[i].setMargin(new Insets(0,0,0,0));

btns[i].setFont(new Font(null,Font.BOLD,25));

btns[i].addActionListener(this);

btns[i].addMouseListener(new NormoreMouseEvent());

p2.add(btns[i]);

}

2.3.3 模块三:判断所点击的是否为雷

模块负责人姓名:学号:

1.模块任务

◆对雷的形状颜色进行设定

◆判断是否点击到雷,游戏胜利或输了的情况设置

2.游戏中的截图和源代码

中级游戏胜利后的截图,有红色圆圈标记的方块为雷区,在开始按钮的作则的数字“0”表示剩下雷的数目为0,其右侧的数据“111”表示游戏者在完成该局游戏所花的时间为111秒,在时间的旁边的文本框内显示的信息是游戏者的输赢情况。

截图如下:

图2.3.3-1 中级游戏胜利的截图

“*o*”符号表示你标错雷的位置,初级游戏失败后的截图如下:

图2.3.3-2 游戏截图

程序部分代码:

for(int i=0;i

{ if(btns[i].getText()!="●")

{ btns[i].setForeground(Color.red);

int x=i/col+1;

int y=i%col+1;

if(e.getSource()==btns[i]&&a[x][y]==100)

{ btns[i].setText("●");

btns[i].setEnabled(false);

a[x][y]=10;

for(int k=0;k

{ int m1=k/col+1;

int n1=k%col+1;

if(a[m1][n1]!=10&&btns[k].getText()=="●")

{ btns[k].setText("*o*");

}

}

for(int j=0;j

{ int m=j/col+1;

int n=j%col+1;

if(a[m][n]==100)

{ btns[j].setText("●");

btns[j].setEnabled(false);

b3.setText("你输了!!");

}

btns[j].setEnabled(false);

a[m][n]=10;

}

timer.stop();

}

else if(e.getSource()==btns[i])

{ if(a[x][y]==0)

{ out(a,btns,e,i,x,y);

a[x][y]=10;

btns[i].setEnabled(false);

}

if(a[x][y]!=0&&a[x][y]!=10)

{ btns[i].setText(a[x][y]+"");

btns[i].setEnabled(false);

a[x][y]=10;

}

}

}

class NormoreMouseEvent extends MouseAdapter

{ public void mouseClicked(MouseEvent e)

{ System.out.println(b);

for(int i=0;i

{ int x1=i/col+1;

int y1=i%col+1;

if(e.getSource()==btns[i]&&btns[i].getText()!="●"&&a[x1][y1]!=10)

{ if(e.getButton()==MouseEvent.BUTTON3)

{ btns[i].setText("●");

b--;

if(b==0)

{ int flag=0;

for(int j=0;j

{ int x=j/col+1;

int y=j%col+1;

if(a[x][y]==100&&btns[j].getText()=="●")

{ flag++;

}

}

}

if(flag==bon)

{ timer.stop();

b3.setText("你赢了!");

}

}

b1.setText(b+"");

}

}

else if(e.g etSource()==btns[i]&&btns[i].getText()=="●"&&a[x1][y1]!=-1) { if(e.getButton()==MouseEvent.BUTTON3)

{ btns[i].setText("");

b++;

if(b>bon)

{ b1.setText(bon+"");

}

else

{ b1.setText(b+"");

}

btns[i].setEnabled(true);

}

}

3. 小结

这个扫雷游戏大大简化了微软系统自带的扫雷游戏的功能,所以难度是比较小,经过编写这个扫雷游戏,我们认识到应该注意细节问题,从小问的修改发现中,提高自己编程的能力,而且还可以培养自己编程的严谨性,同时还可以为以后的编程积累经验。

编写完这个扫雷游戏,我们发现自己有很多的不足,所以小组的形式给我们的编程带来了很大的帮助,这样发现问题的时候大家一起想办法,解决问题的速达大大提高了,这让我们认识到了团结协作的重要性。

东华理工学院长江学院

课程设计评分表

课程设计题目:扫雷游戏

项目内容满分实评

选题

能结合所学课程知识、有一定的能力训练。符

合选题要求(5人一题)

10

工作量适中,难易度合理10

能力水平

能熟练应用所学知识,有一定查阅文献及运用

文献资料能力

10

理论依据充分,数据准确,公式推导正确10 能应用计算机软件进行编程、资料搜集录入、

加工、排版、制图等

10

能体现创造性思维,或有独特见解10

成果质量

总体设计正确、合理,各项技术指标符合要求。10 说明书综述简练完整,概念清楚、立论正确、

技术用语准确、结论严谨合理;分析处理科学、条

理分明、语言流畅、结构严谨、版面清晰

10

设计说明书栏目齐全、合理,符号统一、编号

齐全。格式、绘图、表格、插图等规范准确,符

合国家标准

10

有一定篇幅,字符数不少于5000 10

总分

10

指导老师签名:

年月日

相关文档