实训报告书Word文件下载.docx
《实训报告书Word文件下载.docx》由会员分享,可在线阅读,更多相关《实训报告书Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
实训日期
2015.12.6至2015.12.11
实训成绩
指导教师评语
指导教师签名:
______________
_______年____月____日
……………………………装……………………………………订…………………………………线……………………………
目录
1实训目的1
2扫雷游戏系统的分析与设计1
2.1系统功能描述1
2.2系统模块设计1
3主要代码清单3
4程序运行与测试11
5实训总结13
扫雷游戏系统的设计与实现
1实训目的
随着社会的不断进步,人们所承受的压力不断上升,在游戏层出不穷的时刻,扫雷游戏仍受到不少人的青睐,其本身的性质,决定了人们对它的喜爱程度,不需要特殊的技巧,不需要不断地升级,不需要太多的时间进行初步的熟悉,简简单单却乐趣无穷。
2扫雷游戏系统的分析与设计
2.1系统功能描述
(1)该游戏具有计时功能,即扫完全部地雷所花费的时间。
(2)用户可以选择是否有音效。
(3)用户可以自定义级别,还可以输入任意地雷数。
(4)自动保存扫雷排行榜。
2.2系统模块设计
系统的整体布局为:
CardLayout布局,采用菜单、按钮、面板„„等组件,菜单项主要有开始,选择级别,自定义,标记,声音,扫雷排行榜,退出,按钮的功能是重新开始游戏(可以选择游戏菜单里的开局,也可以点击企鹅图标重新开始游戏)。
2.3数据库结构设计
系统结构图
系统流程图
3主要代码清单
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassFrame
extendsJFrame{
JTextFieldtext;
JLabelnowBomb,setBomb;
intBombNum,BlockNum;
//当前雷数,当前方块数
intrightBomb,restBomb,restBlock;
//找到的地雷数,剩余雷数,剩余方块
JButtonstart=newJButton("
开始"
);
JPanelMenuPamel=newJPanel();
JPanelbombPanel=newJPanel();
Bomb[][]bombButton;
JPanelc;
BorderLayoutborderLayout1=newBorderLayout();
GridLayoutgridLayout1=newGridLayout();
publicFrame(){
try{
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
}
catch(Exceptionexception){
exception.printStackTrace();
}}
privatevoidjbInit()throwsException{
c=(JPanel)getContentPane();
setTitle("
扫雷"
c.setBackground(Color.WHITE);
MenuPamel.setBackground(Color.GRAY);
c.setLayout(borderLayout1);
setSize(newDimension(600,600));
setResizable(false);
BlockNum=144;
BombNum=10;
text=newJTextField("
10"
3);
nowBomb=newJLabel("
当前雷数"
+"
:
"
+BombNum);
setBomb=newJLabel("
设置地雷数"
start.addActionListener(newFrame1_start_actionAdapter(this));
MenuPamel.add(setBomb);
MenuPamel.add(text);
MenuPamel.add(start);
MenuPamel.add(nowBomb);
c.add(MenuPamel,java.awt.BorderLayout.SOUTH);
bombPanel.setLayout(gridLayout1);
gridLayout1.setColumns((int)Math.sqrt(BlockNum));
gridLayout1.setRows((int)Math.sqrt(BlockNum));
bombButton=newBomb[(int)Math.sqrt(BlockNum)][(int)Math.sqrt(BlockNum)];
for(inti=0;
i<
(int)Math.sqrt(BlockNum);
i++){
for(intj=0;
j<
j++){
bombButton[i][j]=newBomb(i,j);
//bombButton[i][j].setSize(10,10);
bombButton[i][j].setFont(newFont("
Font.PLAIN,14));
//设置字体
bombButton[i][j].setForeground(Color.white);
bombButton[i][j].addMouseListener(newBomb_mouseAdapter(this));
bombButton[i][j].addActionListener(newBomb_actionAdapter(this));
bombPanel.add(bombButton[i][j]);
c.add(bombPanel,java.awt.BorderLayout.CENTER);
startBomb();
}/*开始按钮*/
publicvoidstart_actionPerformed(ActionEvente){
intnum=Integer.parseInt(text.getText().trim());
if(num>
=5&
&
num<
50){
BombNum=num;
elseif(num<
5){
JOptionPane.showMessageDialog(null,"
您设置的地雷数太少了,请重设!
"
错误"
JOptionPane.ERROR_MESSAGE);
num=10;
else{
您设置的地雷数太多了,请重设!
BombNum=num;
}}/*开始,布雷*/
publicvoidstartBomb(){
nowBomb.setText("
:
bombButton[i][j].isBomb=false;
bombButton[i][j].isClicked=false;
bombButton[i][j].isRight=false;
bombButton[i][j].BombFlag=0;
bombButton[i][j].BombRoundCount=9;
bombButton[i][j].setEnabled(true);
bombButton[i][j].setText("
//设置字体bombButton[i][j].setForeground(Color.BLUE);
rightBomb=0;
restBomb=BombNum;
restBlock=BlockNum-BombNum;
BombNum;
){
intx=(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));
inty=(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));
if(bombButton[x][y].isBomb!
=true){
bombButton[x][y].isBomb=true;
i++;
}
CountRoundBomb();
}/*计算方块周围雷数*
publicvoidCountRoundBomb(){
intcount=0;
//当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数
if(bombButton[i][j].isBomb!
for(intx=i-1;
x<
i+2;
x++){
for(inty=j-1;
y<
j+2;
y++){
if((x>
=0)&
(y>
=0)
&
(x<
((int)Math.sqrt(BlockNum)))
(y<
((int)Math.sqrt(BlockNum)))){
if(bombButton[x][y].isBomb==true){
count}
bombButton[i][j].BombRoundCount=co}}
/*是否挖完了所有的雷*/
publicvoidisWin(){
if(bombButton[i][j].isClicked==true){
restBlock--;
}}