/* * To change this template, choose Tools | Templates * and open the template in the editor. */

/** * * @author Zerob13 / import java.awt.; import java.awt.event.; import javax.swing.; class Mineb extends JButton { private boolean ismine; int x, y; int num; public boolean isMine() { return ismine; } public void setMine(boolean a) { ismine = a; } Mineb(String a, int i, int j) { super.setText(a); x = i; y = j; ismine = false; } } public class Deom extends JFrame implements MouseListener { /** * @param args */ Mineb[][] b; JLabel state; int last; JMenuBar mb; int elas; class node { int x, y; } int[][] dir = { { 0, 1 }, { 1, 0 }, { 1, 1 }, { -1, 1 }, { -1, -1 }, { 1, -1 }, { -1, 0 }, { 0, -1 } }; private void gen() { int co = 0; elas = 81 - 9; last = 9; int[] hash = new int[81]; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { b[i][j].setText(“”); b[i][j].setEnabled(true); b[i][j].setMine(false); } } for (int i = 0; i < 81; i++) { hash[i] = 0; } for (; co < 9;) { int X = (int) (Math.random() * 81); if (hash[X] == 0) { hash[X] = 1; co++; } } for (int i = 0; i < 81; i++) { if (hash[i] == 1) { int x = i / 10, y = i % 10; if (x >= 9) x = 8; if (y >= 9) y = 8; b[x][y].setMine(true); } } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { b[i][j].num = count(i, j); } } state.setText(“9”); } Deom() { mb = new JMenuBar(); setJMenuBar(mb); state = new JLabel(“”); JMenu start = new JMenu(“Start”); JMenu http = new JMenu(“http://zerob13.com”); mb.add(start); mb.add(http); JMenuItem s = new JMenuItem(“Start!!”); start.add(s); ActionListener st = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { gen(); } }; s.addActionListener(st); setLayout(new GridLayout(10, 9, 0, 0)); b = new Mineb[9][9]; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { b[i][j] = new Mineb(“”, i, j); b[i][j].setSize(10, 10); b[i][j].addMouseListener(this); add(b[i][j]); } } add(state); state.setText(String.valueOf(this.last)); setSize(500, 500); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); gen(); } public static void main(String[] args) { // TODO Auto-generated method stub Deom frame = new Deom(); } int count(int x, int y) { int i; int k = 0; for (i = 0; i < 8; i++) { int w = x + dir[i][0]; int z = y + dir[i][1]; if (w < 0 || z < 0 || w >= 9 || z >= 9) continue; if (b[w][z].isMine()) { k++; } } return k; } void showall() { int i, j;

    for (i = 0; i < 9; i++) {
        for (j = 0; j < 9; j++) {
            if (b[i][j].isEnabled()) {
                if (b[i][j].isMine()) {
                    if (b[i][j].getText() == "P")
                        b[i][j].setText("R");
                    else
                        b[i][j].setText("@");
                    b[i][j].setEnabled(false);
                } else {
                    if (b[i][j].num == 0) {
                        if (b[i][j].getText() == "P") {
                            b[i][j].setText("X");
                        } else
                            b[i][j].setText("-");
                    } else{
                        if (b[i][j].getText() == "P") {
                            b[i][j].setText("X");
                        }else
                        b[i][j].setText(String.valueOf(b[i][j].num));}
                    b[i][j].setEnabled(false);
                }
            }
        }
    }
}
void showsame(int x, int y) {
    int i, j, k;
    node[] queue = new node[81];
    boolean[][] hash = new boolean[9][9];
    for (i = 0; i < 9; i++) {
        for (j = 0; j < 9; j++) {
            hash[i][j] = false;
        }
    }
    node head = new node();
    node p = new node();
    head.x = x;
    head.y = y;
    int top = 0;
    int tail = 0;
    queue[tail] = new node();
    queue[tail].x = head.x;
    queue[tail].y = head.y;
    tail++;
    while (tail > top) {
        head = queue[top];
        top++;
        for (i = 0; i < 8; i++) {
            int w = head.x + dir[i][0];
            int z = head.y + dir[i][1];
            if (w < 0 || z < 0 || w >= 9 || z >= 9)
                continue;
            if(b[w][z].getText()!="")
                continue;
            if (b[w][z].isMine())
                continue;
            if (hash[w][z])
                continue;
            hash[w][z] = true;
            if (b[w][z].num == 0) {
                queue[tail] = new node();
                queue[tail].x = w;
                queue[tail].y = z;
                tail++;
                if (b[w][z].isEnabled()) {
                    b[w][z].setEnabled(false);
                    elas--;
                }
                b[w][z].setText("-");
            }
        }
    }
    if (elas == 0) {
        showall();
                    JOptionPane.showMessageDialog(null, "YOU WIN!", "YOU WIN!", JOptionPane.DEFAULT_OPTION);
        state.setText("WIN");
    }
}
@Override
public void mouseClicked(MouseEvent e) {
    Mineb temp = (Mineb) e.getSource();
    if (e.getButton() == MouseEvent.BUTTON1) {
        if (temp.getText() == "P" || temp.getText() == "?") {
        } else {
            if (temp.isMine()) {
                showall();
                                    state.setText("LOSE");
                                     JOptionPane.showMessageDialog(null, "YOU LOSE!", "YOU LOSE!", JOptionPane.DEFAULT_OPTION);
            } else {
                if (temp.num == 0) {
                    showsame(temp.x, temp.y);
                    temp.setText("-");
                } else {
                    temp.setText(String.valueOf(temp.num));
                }
            }
            if (temp.isEnabled()) {
                temp.setEnabled(false);
                elas--;
            }
            if (elas == 0) {
                showall();
                state.setText("WIN");
                                     JOptionPane.showMessageDialog(null, "YOU WIN!", "YOU WIN!", JOptionPane.DEFAULT_OPTION);
            }
        }
    } else if (e.getButton() == MouseEvent.BUTTON3) {
        if (temp.getText() == "P" || this.last == 0) {
            if (temp.getText() == "P")
                this.last++;
            temp.setText("?");
        } else if (temp.getText() == "?") {
            temp.setText("");
        } else {
            temp.setText("P");
            this.last--;
        }
        state.setText(String.valueOf(this.last));
    }
}
@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub
}
//源代码片段来自云代码http://yuncode.net