/* * 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