Java实现扫雷,扫雷程序代码java

  Java实现扫雷,扫雷程序代码java

  用Java实现简单的扫雷程序供你参考,具体内容如下

  页面设置:的框架是borderlayout,要添加到外面的组件是在顶部、中部和底部添加的(左右不加)。排雷使用的布局是gridlayout,即网格布局,它与排雷界面自然吻合。

  使用组件:面板、按钮、框架、标签等组件,最后将它们集中在框架中,形成一个整体。并对其进行适当的监控。监控算法实现如下。

  在扫雷算法:.有三种情况要考虑,第一种是打雷的情况,第二种是空网格的情况,第三种是数字的情况。让我们逐一考虑这些情况,完成算法的设计。首先随机生成扫雷地图,地图中包含随机生成的地雷,以及地雷旁边由数字和空格组成的矩阵矩阵。之后所有的监控都是基于这个矩阵matrix。

  当点为空时,调用递归算法找到其旁边的空格(周围一圈)并显示出来(这里作者只是为他换了一个颜色,即完成了显示工作,读者也可以将点击的按钮组件替换为标签),在这个方向停止显示,直到找到是数字的单元格。当点击该数字时,将显示网格。当雷霆到来时,matrix中的所有值都会显示出来,即游戏结束。

  当递归算法:点击一个空白网格时,它搜索它周围的网格,当它是空的时显示它,如果它不是空的则停止这个网格上的递归算法。

  参照矩阵matrix的生成:随机使用random函数随机生成一个1大小的随机数(扫雷的尺度),形成地雷的横坐标和纵坐标,加入到矩阵中,矩阵为string类型,地雷用“*”表示。根据地雷的位置,在其周围网格上的数字分别加1,形成参考矩阵。

  添加算法的改进:菜单栏,实时定时器,改变扫雷游戏的尺度,代码多余(毕竟完成大于完美)。这里有一个模板给读者,读者可以参考做进一步的修改。

  以下是成品的展示图和源代码:

  导入Java . awt . borderlayout;导入Java . awt . color;导入Java . awt . gridlayout;导入Java . awt . event . action event;导入Java . awt . event . action listener;导入javax . swing . jbutton;导入javax . swing . jframe;导入javax . swing . jpanel;/* *扫雷*/classnewJButton扩展JButton {//创建一个新的组合jbutton类int axisxint axisynewJButton(String s,int axisx,int axisy){ super(s);this.axisx=axisxthis.axisy=axisy} public int getaxisx(){ return axisx;} public int getaxisy(){ return axisy;}}公共类Minetest实现动作监听器{//组件定义静态最终int size=10//扫雷游戏尺度int time//统计地雷数量jframe=newjframe(扫雷);JPanel panel 1=new JPanel();//timer JPanel panel 2=new JPanel();//笑脸JPanel panel 3=new JPanel();//初级扫雷newj button t;newJButton t2long program start=system . current time millis();长程序结束;String[][]matrix=new String[size][size];//扫雷信息记录矩阵newjbutton[][]buttons=newjbutton[size][size];//创建扫雷按钮矩阵int[][]tip=new int[size][size];//确定按钮是否可以显示//Prompt public void init time(){ t=newnewjbutton( in progress ,101,101);t2=new newJButton(/,102,102);panel 2 . add(t);panel 2 . add(T2);}

  // 笑脸    public void initsmile() {        newJButton b = new newJButton("O", 100, 100); // 将归零按键"O"的坐标设置为(100,100)        b.addActionListener(this);        panel1.add(b);    }    // 初级扫雷    public void initmine() {        panel3.setLayout(new GridLayout(10, 10, 1, 1));        // panel3.setSize(250,250);        for (int i = 0; i < size; i++) {            for (int j = 0; j < size; j++) {                // button.setSize(25,25);                panel3.add(buttons[i][j]);            }        }    }    // 总界面的组合    public void initcombine() {        frame.setLayout(new BorderLayout());        frame.add(panel1, BorderLayout.NORTH);        frame.add(panel2, BorderLayout.CENTER);        frame.add(panel3, BorderLayout.SOUTH);        // frame.add(panel4);    }    // 扫雷页面初始化    MineTest() {        // 产生按钮        for (int i = 0; i < size; i++) {            for (int j = 0; j < size; j++) {                newJButton jb = new newJButton(" ", i, j);                jb.setBackground(Color.WHITE);                jb.addActionListener(this);                buttons[i][j] = jb;            }        }        inittime();        initsmile();        initmine();        initcombine();        frame.setVisible(true);        frame.setSize(500, 500);        frame.setLocation(700, 300);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 可以关闭        // frame.pack();        // 产生size个雷并加入到矩阵中        do {            time = 0;            pmatrix(); // 初始化原始矩阵            boom(); // 加入雷            for (int i = 0; i < size; i++) {                for (int j = 0; j < size; j++) {                    if (matrix[i][j] == "*") {                        time = time + 1;                    }                }            }        } while (time != 10);        caculate(); // 计算扫雷矩阵中的距离        // 形成改变颜色的状态矩阵        for (int i = 0; i < size; i++) {            for (int j = 0; j < size; j++) {                if (matrix[i][j] == "0") {                    tip[i][j] = 0;                } else {                    tip[i][j] = 1;                }            }        }        // 打印        for (int i = 0; i < size; i++) {            for (int j = 0; j < size; j++) {                System.out.print(matrix[i][j] + " ");            }            System.out.println("n");        }    }    private void pmatrix() {        // 扫雷矩阵初始化        for (int i = 0; i < size; i++) {            for (int j = 0; j < size; j++) {                matrix[i][j] = "0";            }        }    }    private void boom() {        // 产生炸弹;        int num = 0;        while (num < size) {            int i = (int) (Math.random() * size);            int j = (int) (Math.random() * size);            matrix[i][j] = "*";            num = num + 1;        }    }    @Override    public void actionPerformed(ActionEvent e) {        // 按钮响应事件        newJButton temp = (newJButton) e.getSource();        if (temp.getText() == "O") {            // 产生size个雷并加入到矩阵中            do {                time = 0;                pmatrix(); // 初始化原始矩阵                boom(); // 加入雷                for (int i = 0; i < size; i++) {                    for (int j = 0; j < size; j++) {                        if (matrix[i][j] == "*") {                            time = time + 1;                        }                    }                }            } while (time != 10);            caculate(); // 计算扫雷矩阵中的距离            // 形成改变颜色的状态矩阵            for (int i = 0; i < size; i++) {                for (int j = 0; j < size; j++) {                    if (matrix[i][j] == "0") {                        tip[i][j] = 0;                    } else {                        tip[i][j] = 1;                    }                }            }            // 打印            for (int i = 0; i < size; i++) {                for (int j = 0; j < size; j++) {                    System.out.print(matrix[i][j] + " ");                }                System.out.println("n");            }            for (int i = 0; i < size; i++) {                for (int j = 0; j < size; j++) {                    buttons[i][j].setText(" ");                    buttons[i][j].setBackground(Color.WHITE);                }            }            t.setLabel("进行中");            t2.setLabel("/");            programStart = System.currentTimeMillis();            // System.out.println("smile");        } else if (matrix[temp.getaxisx()][temp.getaxisy()] == "*") {            for (int i = 0; i < size; i++) {                for (int j = 0; j < size; j++) {                    if (matrix[i][j] != "0") {                        buttons[i][j].setText(matrix[i][j]);                        if (matrix[i][j] == "*") {                            buttons[i][j].setBackground(Color.RED);                        }                    }                }            }            t.setLabel("失败");            programOver = System.currentTimeMillis();            t2.setLabel("" + (programOver - programStart) / 1000 + "s");        } else if (matrix[temp.getaxisx()][temp.getaxisy()] != "0") {            buttons[temp.getaxisx()][temp.getaxisy()].setText(matrix[temp.getaxisx()][temp.getaxisy()]);            buttons[temp.getaxisx()][temp.getaxisy()].setBackground(Color.gray);        } else if (matrix[temp.getaxisx()][temp.getaxisy()] == "0") {            digui(temp.getaxisx(), temp.getaxisy());        }    }    private void digui(int i, int j) {        // 递归调用该函数,处理按钮是“0”的情况        if (i == 0 && j == 0) {            if (tip[i][j] == 0) {                buttons[i][j].setBackground(Color.gray);                tip[i][j] = 1;                digui(i, j + 1);                digui(i + 1, j + 1);                digui(i + 1, j);            } else {                if (matrix[i][j] == "0") {                    buttons[i][j].setBackground(Color.gray);                    tip[i][j] = 1;                } else {                    buttons[i][j].setText(matrix[i][j]);                    buttons[i][j].setBackground(Color.gray);                    tip[i][j] = 1;                }            }        } else if (i == 0 && j == size-1) {            if (tip[i][j] == 0) {                buttons[i][j].setBackground(Color.gray);                tip[i][j] = 1;                digui(i, j - 1);                digui(i + 1, j - 1);                digui(i + 1, j);            } else {                if (matrix[i][j] == "0") {                    buttons[i][j].setBackground(Color.gray);                    tip[i][j] = 1;                } else {                    buttons[i][j].setText(matrix[i][j]);                    buttons[i][j].setBackground(Color.gray);                    tip[i][j] = 1;                }            }        } else if (i == size-1 && j == 0) {            if (tip[i][j] == 0) {                buttons[i][j].setBackground(Color.gray);                tip[i][j] = 1;                digui(i, j + 1);                digui(i - 1, j + 1);                digui(i - 1, j);            } else {                if (matrix[i][j] == "0") {                    buttons[i][j].setBackground(Color.gray);                    tip[i][j] = 1;                } else {                    buttons[i][j].setText(matrix[i][j]);                    buttons[i][j].setBackground(Color.gray);                    tip[i][j] = 1;                }            }        } else if (i == size-1 && j == size-1) {            if (tip[i][j] == 0) {                buttons[i][j].setBackground(Color.gray);                tip[i][j] = 1;                digui(i, j - 1);                digui(i - 1, j - 1);                digui(i - 1, j);            } else {                if (matrix[i][j] == "0") {                    buttons[i][j].setBackground(Color.gray);                    tip[i][j] = 1;                } else {                    buttons[i][j].setText(matrix[i][j]);                    buttons[i][j].setBackground(Color.gray);                    tip[i][j] = 1;                }            }        } else if (i == 0) {            if (tip[i][j] == 0) {                buttons[i][j].setBackground(Color.gray);                tip[i][j] = 1;                digui(i, j - 1);                digui(i, j + 1);                digui(i + 1, j - 1);                digui(i + 1, j);                digui(i + 1, j + 1);            } else {                if (matrix[i][j] == "0

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: