admin 管理员组文章数量: 887021
2024年2月28日发(作者:mips汇编语言入门)
Java应用技术实训报告
一.总体设计
本系统共包括3个java源文件和4个图像文件。
1•类之间的关系如图1.1所示。
图1.1类之的关系
源文件及其功能如表1所示。
表1源文件及其功能
序号
1
2
文件名
主要功能
生成的类负责创建程序窗口,含有main方法,游戏从 该类开始执行。
为主类创建整个挖雷游戏的对象,包括窗口,布雷,判 断等等。
负责创建游戏所需要的按钮。
3
3.图像文件
:地雷方块上的图标。
:疑惑探雷是否正确。
bomb_:触雷时方块上的图标。
:探雷标记。
二、详细设计
1 .主类Main
(1)成员变量(见表2)
表2
成员变量描述
游戏运行
变量类型
MainBomb
备注
临时变量
(2)成员变量(见表3)
表3
名称
main
功能
备注
游戏开始
(3)源代码见文件
import .*;
import .*;
import .*;
/*主类*/
public class Main
(
public static void main(String args[])
(
(new MainBomb()).show();
)
)
2 .挖雷游戏MainBomb
(1)成员变量(见表4)
表4
成员变量描述
雷数设置
当前方块数
当前雷数
开始
踩雷
踩雷标记
雷标记
疑惑是否有雷
目录面板
变量类型
JTextField
int
int
JButton
Icon
Icon
Icon
Icon
Panel
Panel
名称
text
BlockNum
BombNum
start
icon_bomb
icon_bomb_big
icon_flag
icon_question
MenuPamel
mainPanel 主面板
雷
该方块是否有雷
方块周围的雷数
方块上的雷标记
显示方块信息
方块在雷区的位置
布雷
判断标记是否正确
是否获得胜利
雷标数目
Bomb[][]
boolean
int
int
JLabel
Point
RandomSet
Determine
Winner
int
int
bombButton
周围无雷
周围的雷数
探雷标记
Label
P
set
Determine
Win
count
count1 周围方块的雷数
(2)方法见(表5)
表5
方法名
Game
newGame
创建程序窗口
新开局
接口方法
功能
bar
备注
actionPerformed 设置处理ActionEvent事件 设置雷的方块是否有雷 设置是雷值
时的图标 设置无雷时的设置label上的图标 设置label上图标 设置有雷时的名字
的图标 设置label上的文字 设置设置周围的雷数 获取名周围的雷数
字 获取周围雷数
返回方块label上的文字 返回周围的雷数
设置雷区位置 获取雷区位置
获取探雷标记
mousePressed
mouseClicked
mouseReleased
mouseExited
mouseEntered
MinesSquare
设置属性P 返回属性P
返回探雷标记
处理鼠标按下事件
处理鼠标双击事件
处理鼠标释放事件
处理鼠标退出事件
处理鼠标进入事件
接口方法
接口方法
接口方法
接口方法
接口方法
创建雷区
gameOver 判断雷标是游戏失败
否正确 布雷 判断是否成功
正确返回true错误返回false
随机布雷
成功返回true失败返回false
(3)源代码见文件
import .*;
import .*;
import .*;
/*窗口及算法实现类*/
class MainBomb extends JFrame implements
ActionListener,MouseListener
(
public JTextField text;
public Label nowBomb,setBomb;
public int BlockNum,BombNum;
//当前方块数当前雷数
public Icon icon_bomb = new ImageIcon("");
//踩雷
public Icon icon_bomb_big = new ImageIcon("bomb_");
//踩雷标记
public Icon icon_flag = new ImageIcon("");
//雷标记
public Icon icon_question = new ImageIcon("");
//疑惑是否有雷
public JButton start = new JButton("开始");
public Panel MenuPamel = new Panel();
public Panel mainPanel = new Panel();
public Bomb[][] bombButton;
/*界面设计*/
public MainBomb()
super("成型04-2李超JAVA课程设计");
BlockNum = 64;
BombNum = 10;
Container c=getContentPane();
kground();
out(new BorderLayout());
text=new JTextField("10 ",3);
nowBomb = new Label(%前雷数"+" "+BombNum+"");
setBomb= new Label("设置地雷数");
ionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
BombNum = nt(t().trim());
if(BombNum >= 10 && BombNum < 50 )
replay();
else
{
JOptionPane msg = new JOptionPane();
ssageDialog(null,"您设置的地雷数太多了"错误",2);
)
)
});
(setBomb);
(text);
(start);
(nowBomb);
(MenuPamel,"North");
out(new GridLayout( (int)(BlockNum)
(int)(BlockNum)));
请重 设!", ,
bombButton=new Bomb[ (int)(BlockNum) ][];
for(int i = 0 ; i < (int)(BlockNum) ; i++)
(
bombButton[ i ]=new Bomb[ (int)(BlockNum)];
)
for(int i = 0 ; i < (int)(BlockNum) ; i++ )
for(int j = 0 ; j < (int)(BlockNum) ; j++ )
(
bombButton[ i ][ j ]=new Bomb(i,j);
bombButton[ i ][ j ].setForeground( );
bombButton[ i ][ j ].addActionListener(this);
bombButton[ i ][ j ].addMouseListener(this);
)
for(int i = 0 ; i < (int)(BlockNum) ; i++ )
for(int j = 0 ; j < (int)(BlockNum) ; j++ )
(bombButton[ i ][ j ]);
(mainPanel,"Center");
startBomb();
setSize(400,400);
setLocation(350,200);
setResizable(false);
)
/*布雷*/
public void startBomb()
for(int i=0;i ( int x =(int)(()*(int)((BlockNum)-1)); int y =(int)(()*(int)((BlockNum)-1)); if(bombButton[ x ][ y ].isBomb==true) i--; else bombButton[ x ][ y ].isBomb=true ; ) ) /*重新开始*/ public void replay() ( t("当前雷数"+" "+BombNum+""); for(int i = 0 ; i < (int)(BlockNum) ; i++) for(int j = 0 ; j < (int)(BlockNum) ; j++) ( bombButton[ i ][ j ].isBomb=false; bombButton[ i ][ j ].isClicked=false; bombButton[ i ][ j ].setEnabled(true); bombButton[ i ][ j ].setText(""); bombButton[ i ][ j ].setIcon(null); ) startBomb(); ) /*是否挖完了所有的雷*/ public void isWin() ( int findBomb=0; //找至帕勺地雷数 for(int i=0;i< (int)(BlockNum); i++) for(int j=0;j< (int)(BlockNum ); j++) ( if(bombButton[ i ][ j ].isBomb == true && bombButton[ i ][ j ].isRight ==true) findBomb++; ) if( findBomb == nt(t().trim())) ( JOptionPane msg = new JOptionPane(); ssageDialog(this,"您挖完了所有的雷,您胜利了 !",, 您胜利了”,2); ) ) /*计算方块周围雷数*/ public void CountRoundBomb() ( for (int i=0; i< (int)(BlockNum); i++) ( for (int j = 0; j < (int)(BlockNum); j++) ( int count = 0; //当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数 if (bombButton[ i ][ j ].isBomb != true) { if ( (i - 1 >= 0) && (j - 1 >= 0)) { if (bombButton[i - 1][j - 1].isBomb == true) { count += 1; //检测左上方空格是否是地雷 ) ) if ( (i - 1 >= 0)) { if (bombButton[i - 1][ j ].isBomb == true) { count += 1; //检测上方空格是否为地雷 ) ) if ( (i - 1 >= 0) && (j + 1 <= (int)(BlockNum)-1)) { if (bombButton[i - 1][j + 1] .isBomb == true) { count += 1; //检测右上方是否为地雷 ) ) if ( (j - 1 >= 0)) { if (bombButton[ i ][j - 1] .isBomb == true) { count += 1; //检测左边是否为地雷 ) if ( (i >= 0) && (j + 1 <= (int)(BlockNum)-l)) { if (bombButton[ i ][j + 1].isBomb == true) { count += 1; //右边 ) ) if ( (j - 1 >= 0) && (i + 1 <= (int)(BlockNum)-1)) { if (bombButton[i + 1][j - 1].isBomb == true) { count += 1; //左下 ) ) if ( (i + 1 <= (int)(BlockNum)-1)) { if (bombButton[i + 1][ j ].isBomb == true) { count += 1; //下 ) ) if ( (j + 1 <= (int)(BlockNum)-1) && (BlockNum)-1)) { if (bombButton[i + 1][j + 1].isBomb == true) { count += 1; //右下 ) ) bombButton[ i ][ j ].BombRoundCount = count; ) ) /**当选中的位置为空,则翻开周围的地图**/ public void isNull(Bomb[][] bombButton,Bomb ClickecButton) ( int i,j; i=_x; j=_y; if (==true) { ) + <= (i 1 else { if ( (i - 1 >= 0) && (j - 1 >= 0)) { //检测左上方空格是否是空 if (bombButton[i - 1][j - 1].isBomb == false && bombButton[i - 1][j - 1].isClicked == false && bombButton[i - 1][j - 1].isRight == false) { bombButton[i-1][j-1].setText((bombButton[i-1][j-1].BombRoundCount)+"" ); bombButton[i - 1][j - 1].setEnabled(false); bombButton[i - 1][j - 1].isClicked=true; ) ) if ( (i - 1 >= 0)) { //检测上方空格是否为空 if (bombButton[i-1][ j].isBomb == false && bombButton[i - 1][ j ].isClicked == false && bombButton[i - 1][ j ].isRight == false) { bombButton[i-1][ 1][ j ].BombRoundCount)+""); bombButton[i - 1][ j ].setEnabled(false); bombButton[i - 1][ j ].isClicked=true; ) if ( (i - 1 >= 0) && (j + 1 <= ((int)(BlockNum)-l)) ) { //检测右上 方是否为空 if (bombButton[i - 1][j + 1] .isBomb == false && bombButton[i - 1][j + 1].isClicked == false && bombButton[i - 1][j + 1].isRight == false) { bombButton[i - 1].BombRoundCount)+""); bombButton[i - 1][j + 1].setEnabled(false); bombButton[i - 1][j + 1].isClicked=true; ) ) 1][j + 1].setText((bombButton[i - 1][j + j].setText((bombButton[i- if ( (j - 1 >= 0)) { //检测左边是否为空 if (bombButton[ i ][j - 1].isBomb == false && bombButton[ i ][j - 1].isClicked == false && bombButton[ i ][j - 1].isRight == false) { bombButton[ i ][j 1].BombRoundCount)+""); bombButton[ i ][j - 1].setEnabled(false); bombButton[ i ][j - 1].isClicked=true; ) ) if ( (i >= 0) && (j + 1 <= ((int)(BlockNum)-1)) ) {/检测右边空格 是否是空 if (bombButton[ i ][j + 1].isBomb == false && bombButton[ i ][j + 1].isClicked == false && bombButton[ i ][j + 1].isRight == false) { bombButton[ i ][j 1].BombRoundCount)+""); bombButton[ i ][j + 1].setEnabled(false); bombButton[ i ][j + 1].isClicked=true; ) ) if ( (j - 1 >= 0) && (i + 1 <= ((int)(BlockNum)-1)) ) { //检测左下 空格是否是空 if (bombButton[i + 1][j - 1].isBomb == false && bombButton[i + 1][j - 1].isClicked == false && bombButton[i + 1][j - 1].isRight == false) { bombButton[i + 1].BombRoundCount)+""); bombButton[i + 1][j - 1].setEnabled(false); bombButton[i + 1][j - 1].isClicked=true; ) ) if ( (i + 1 <= ((int)(BlockNum)-1)) ) { //检测下边空格是否是空 1][j - 1].setText((bombButton[i + 1][j - + 1].setText((bombButton[ i ][j + - 1].setText((bombButton[ i ][j - if (bombButton[i + 1][ j ].isBomb == false && bombButton[i + 1][ j ].isClicked == false && bombButton[i + 1][ j ].isRight == false) { bombButton[i + 1][ j ].setText((bombButton[i + 1][ j ].BombRoundCount)+""); bombButton[i + 1][ j ].setEnabled(false); bombButton[i + 1][ j ].isClicked=true; ) ) if ( (j + 1 <= ((int)(BlockNum)-1) ) && (i + 1 ((int)(BlockNum)-1)) ) {//检测右下边空格是否是空 if (bombButton[i + 1][j + 1].isBomb == false && bombButton[i + 1][j + 1].isClicked == false && bombButton[i + 1][j + 1].isRight == false) { bombButton[i+1][j+1].setText((bombButton[i+1][j+1].BombRoundCo unt)+""); bombButton[i + 1][j + 1].setEnabled(false); bombButton[i + 1][j + 1].isClicked=true; ) ) if ( (i - 1 >= 0) && (j - 1 >= 0))//检测左上 isNull(bombButton,bombButton[i - 1][j - 1]); if ( (i - 1 >= 0)) isNull( bombButton,bombButton[i - 1][ j ]);//检测上方 if ( (i - 1 >= 0) && (j + 1 <= (int)(BlockNum)-1)) isNull( bombButton,bombButton[i - 1][j + 1]);//检测右上 if ( (j - 1 >= 0)) isNull(bombButton,bombButton[i][j - 1]);//检测左边 if ( (i >= 0) && (j + 1 <= ((int)(BlockNum)-1))) isNull(bombButton,bombButton[i][j + 1]);//检测右边 <= if ( (j - 1 >= 0) && (i + 1 <= ((int)(BlockNum)-1))) isNull(bombButton,bombButton[i + 1][j - 1]); //检测左下 if ( (i + 1 <= ((int)(BlockNum)-1)) ) //检测下 isNull(bombButton,bombButton[i + 1][ j ]); if ( (j + 1 <= ((int)(BlockNum)-1)) && (i + 1 <= ((int)(BlockNum)-1)) )//检测右下 isNull(bombButton,bombButton[i + 1][j + 1]); ) ) public void actionPerformed(ActionEvent e) ( CountRoundBomb(); if(((Bomb)rce()).isBomb==false&&((Bomb)rce()).isClicked ==false) ( ((Bomb)rce()).setText(( ((Bomb)rce()).BombRoundCount) +"”); ((Bomb)rce()).isClicked=true; ((Bomb)rce()).setIcon(null); ((Bomb)rce()).setEnabled(false); if((((Bomb)rce()).BombRoundCount) == 0) isNull(bombButton,(Bomb)rce()); isWin(); ) else if(((Bomb)rce()).isBomb == true) ( for(int i=0;i<(int)(BlockNum);i++) for(int j=0;j<(int)(BlockNum);j++) ( if(bombButton[ i ][ j ].isBomb == true) bombButton[ i ][ j ].setIcon(icon_bomb); ) ((Bomb)rce()).setIcon(icon_bomb_big); JOptionPane msg = new JOptionPane(); ssageDialog(this,"你踩至。地雷了,按确定重来","你踩 到地雷了”,2); replay(); ) ) public void mouseClicked(MouseEvent e) Bomb bombSource = (Bomb)rce(); boolean right = tMouseButton(e); if((right == true) && (ked == false)) ( ag = (ag + 1)%3; if(ag == 1) ( if(BombNum > 0 && t == false ){ n(icon_flag); t = true; BombNum--; ) isWin(); t("当前雷数"+" "+BombNum+""); ) else if(ag == 2) { if( (BombNum!=0 ) ||(BombNum==0 &&(n()==icon_flag))) BombNum++; n(icon_question); t("当前雷数"+" "+BombNum+""); ) else if(ag == 0) { n(null); t = false; ) ) ) public void mouseEntered(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} } 3.按钮Bomb (1)成员变量(见表6) 表6 成员变量描述 第几号方块 是否点击右键 变量类型 int boolean boolean 名称 num_x,num_y isRight isClicked 是否被点击 (2)源代码见文件 import .*; import .*; import .*; /*按扭类*/ class Bomb extends JButton public int num_x,num_y; //第几号方块 public int BombRoundCount; //周围雷数 public boolean isBomb; public boolean isClicked; public int BombFlag; //是否为雷 //是否被点击 //探雷标记 public boolean isRight; //是否点击右键 public Bomb(int x,int y) { BombFlag = 0; num_x = x; num_y = y; BombRoundCount = 0; isBomb = false; isClicked = false; isRight = false; 三.运行效果 点击开始运行游戏,即可点选方格、根据方格数字推断雷的位置。如下图1-3。 图1 图 3 四.工作总结 通过此次课程设计,将我所学的JAVA知识得到巩固和应用,在设 计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思 考下还是很好的完成了。 这此课程设计不仅让我懂得了写程序不能闭门造车,要努力拓宽知 识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资 料。不过与其临渊羡鱼,不如退而结网。这次JAVA课程设计给我的最 大的收获就是如果让自己有了兴趣,那么任何困难在你的勇气和毅力下 都算不得什么。完成了课程设计只是一小步,未来的日子还要继续努力。 最后衷心感谢在课程设计过程中给予过我帮助的老师和同学们!没 有他们的帮助课程设计就不能圆满完成。
版权声明:本文标题:Java扫雷游戏课程设计实训报告 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1709086255h538014.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论