JAVA扫雷游戏开发文档
一、程序思想
扫雷是一款相当经典的小游戏,下面是我们的扫雷程序思想。
    我们可以把整个雷区看成一个二维数组.首先我们在雷区上随机地放上雷,这可以用random类来实现。当没有雷的地方被点击后就会显示一个数字表示它周围有几个雷,要实现这个功能,,如雷区a[i][j]
a[1][1] a[1][2]  a[1][3]  a[1][4]  a[1][5]  a[1][6]  a[1][7]  a[1][8]
a[2][1] a[2][2]  a[2][3]  a[2][4]  a[2][5]  a[2][6]  a[2][7]  a[2][8]
a[3][1] a[3][2]  a[3][3]  a[3][4]  a[3][5]  a[3][6]  a[3][7]  a[3][8]
a[4][1] a[4][2]  a[4][3]  a[4][4]  a[4][5]  a[4][6]  a[4][7]  a[4][8]
a[5][1] a[5][2]  a[5][3]  a[5][4]  a[5][5]  a[5][6]  a[5][7]  a[5][8]
我们可以发现a[i][j]周围存在着如下关系:
a[i-1][j-1]  a[i-1][j]  a[i-1][j+1]
a[i][j-1]    a[i][j]    a[i][j+1]
a[i+1][j-1]  a[i+1][j]  a[i+1][j+1]
于是 ,可以从a[i][j]的左上角顺时针开始检测。当然,如果超出边界,要用约束条件再加以判断!
扫雷程序还会自动展开已确定没有雷的雷区。如果a[3][4]周围雷数为1a[2][3]已被标示为地雷,那么a[2][4]a[2][5],a[3][3]a[3][5],a[4][3]a[4][4]a[4][5]将被展开,一直波及到不可确定的雷区。这也是实现的关键!我们可以把数组的元素设定为一个类对象(类中定义:第几号方块,周围雷数,是否为雷,是否被点击,探雷标记,是否点击右键),它们所属的类设定这样的一个事件:在被展开时,检查周围的雷数是否与周围标示出来的雷数相等,如果相等则展开周围未标示的雷区。这样新的雷区展开又触发这个事件,就这样递归下去,一直蔓延到不可展开的雷区。
二、游戏流程
三、伪代码
四、程序中定义的变量等
public int num_x,num_y;                                第几号方块
public int BombRoundCount;                              周围雷数
public boolean isBomb;                                  是否为雷
public boolean isClicked;                              是否被点击
public int BombFlag;                                    探雷标记
public boolean isRight;                                是否点击右键
public JTextField text;                                雷数显示域
public Label nowBomb,;                                  当前雷数标签
public Label setBomb                                    设置雷数标签
public int BlockNum,                                    当前方块数
public int BombNum;                                    当前雷数   
public Icon icon_bomb = new ImageIcon("3.png")        踩雷
public Icon icon_bomb_big = new ImageIcon("2.png")      踩雷标记
public Icon icon_flag = new ImageIcon("4.png")          雷标记
public Icon icon_question = new ImageIcon("1.png")    疑惑是否有标记
public JButton start = new JButton(" 开始 ");          开始按钮
public Panel MenuPamel = new Panel();                  菜单面板
public Panel mainPanel = new Panel();                  面板
public Bomb[][] bombButton;                            数组元素对象
static boolean tru=false,tru2,tru3=false;       
public String sep,H,M,S,p=":";                          秒表的时间
JTextField jtf=new JTextField(10);                      秒表输出域
五、程序中定义的类
1. 按钮类:class Bomb extends JButton;把雷区看成是二维数组,数组元素是Bomb
2.窗口及算法实现类: class MainBomb extends JFrame  implements ActionListener,MouseListener, Runnable
3. 主类public class zhizhupai
六、程序中定义的方法
1简单的java游戏代码public void startBomb(),布雷方法通过使用random类来实现雷的随机设置.
2.public void replay(),重新开始,所有数组元素初始化.
3.public void isWin(),判断是否挖完了所有的雷.当雷被正确到,并标记时,findBomb+1,findBomb和总的雷数相等时,就算赢.
4. public void CountRoundBomb(),计算方块周围雷数.当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数,从左上角开始顺时针开始检测,检测的元素在边界内,且有地雷时,count+1,继续检测,直到周围都检测完,最后得到的count就是周围的地雷数.
5.public void isNull(Bomb[][] bombButton,Bomb ClickecButton), 当选中的位置为空,则翻开
周围的地图.在被展开时,检查周围的雷数是否与周围标示出来的雷数相等,如果相等则翻开周围未标示的雷区.这样新的雷区展开又触发这个事件,就这样递归下去,一直蔓延到不可翻开的雷区.
6 public void run(),秒表线程,开始扫雷或重新开始扫雷时,执行该线程,扫雷结束时结束线程,显示时间.
7 public void actionPerformed(ActionEvent e),鼠标点击数组元素事件处理函数,首先判断元素周围的雷数.
(1)当这个元素不是雷,且没有点击过,则保存点击事件,当元素周围的雷数是0,判断是否可展开及是否胜利.
(2)当这个元素是雷时,保存点击结果,显示扫雷失败.秒表线程run()停止,跳出窗口,重玩时,调用replay()重玩.
8 public void mouseClicked(MouseEvent e),鼠标右击事件处理函数,判断数组元素被标记了踩雷标记,或疑惑标记,或没有标记,并把相应的结果记录到数组元素.
(1)被标记是踩雷标记时, 数组元素显示为踩雷标记,判断该数组元素是否是雷,如不是,则标记踩雷标记,并把雷数-1;若是,调用isWin(),判断是否胜利.保存设置.
(2)被标记的是疑惑标记时,数组元素显示为疑惑标记,并把当前雷数+1 .
(3)被没有标记时,数组元素设置为标记和是否右击为空否.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。