import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class NewMineGame1 extends Applet implements Runnable,
ActionListener,
Device {
private long firstClickTime;
private boolean doubleClick;
private Label timeDisp;
private Thread timerThread;
private int time;
private static final int ROW = 8;
private static final int COL = 8;
private Button[][] buttonGrid;
private int[][] mineGrid;
private Panel minePanel;
public void init() {
doubleClick = false;
firstClickTime = 0;
timeDisp=new Label(" 0:0 ", Label.CENTER);
time = 0;
buttonGrid = new Button[ROW][COL];
mineGrid = new int[ROW][COL];
minePanel = new Panel();
setLayout(new BorderLayout());
timeDisp.setFont(new Font("Courier", Font.BOLD, 50));
add("Center", timeDisp);
minePanel.setLayout(new GridLayout(ROW,COL));
for (int i = 0; i < buttonGrid.length; i++)
for (int j = 0; j < buttonGrid[0].length; j++) {
mineGrid[i][j] = (Math.random() < 0.8 ? 0 : 1);
buttonGrid[i][j] = new Button();
}
for (int i = 0; i < buttonGrid.length; i++)
for (int j = 0; j < buttonGrid[0].length; j++) {
minePanel.add(buttonGrid[i][j]);
buttonGrid[i][j].addActionListener(this);
}
for (int i = 0; i < buttonGrid.length; i++)
for (int j = 0; j < buttonGrid[0].length; j++) {
minePanel.add(buttonGrid[i][j]);
buttonGrid[i][j].addMouseListener(
new MouseAdapter() {
public void mouseClicked( MouseEvent e ) {
long clickTime = System.currentTimeMillis();
long clickInterval = clickTime - firstClickTime;
if (clickInterval < 300) {
doubleClick = true;
firstClickTime = 0;
} else {
doubleClick = false;
firstClickTime = clickTime;
}
}
}
);
}
add(minePanel,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e){
for (int i = 0; i < buttonGrid.length; i++)
for (int j = 0; j < buttonGrid[0].length; j++) {
if (e.getSource().equals(buttonGrid[i][j])) {
if (mineGrid[i][j] == 1) {
if (! doubleClick){
buttonGrid[i][j].setLabel("die");
turnOff();
} else {
buttonGrid[i][j].setLabel("pd");
}
} else {
if (! doubleClick){
turnOn();
buttonGrid[i][j].setLabel(mineNum(i,j)+"");
} else {
buttonGrid[i][j].setLabel("nb");
turnOff();
}
}
}
}
}
public void run() {
while (timerThread == Thread.currentThread()) {
timeDisp.setText("" + time/600 + ":" + (time/10)%60);
time++;
try { Thread.sleep(50); } catch (Exception e) {};
}
}
public void turnOff(){
Thread t = timerThread;
if (t != null) {
timerThread = null;
try { t.join(); } catch (Exception e) {}
}
}
public void turnOn() {
timerThread = new Thread(this);
timerThread.start();
}
private int mineNum(int x, int y){
if ((x == 0) && (y == 0))
return mineGrid[x][y+1] + mineGrid[x+1][y+1] + mineGrid[x+1][y];
else
if ((x == 0) && (y == buttonGrid[0].length-1))
return mineGrid[x+1][y] + mineGrid[x][y-1] + mineGrid[x+1][y-1];
else
if (x == 0)
return mineGrid[x][y+1] + mineGrid[x+1][y+1] + mineGrid[x+1][y] +
mineGrid[x][y-1] + mineGrid[x+1][y-1];
else
if ((y == 0) && (x == buttonGrid.length-1))
return mineGrid[x-1][y+1] + mineGrid[x][y+1] + mineGrid[x-1][y];
else
if (y == 0)
return mineGrid[x-1][y+1] + mineGrid[x][y+1] + mineGrid[x+1][y+1] +
mineGrid[x-1][y] + mineGrid[x+1][y];
else
if ((x == buttonGrid.length-1) && (y == buttonGrid[0].length-1))
return mineGrid[x-1][y] + mineGrid[x-1][y-1] + mineGrid[x][y-1];
else
if (x == buttonGrid.length-1)
return mineGrid[x-1][y+1] + mineGrid[x][y+1] + mineGrid[x-1][y] +
mineGrid[x-1][y-1] + mineGrid[x][y-1];
else
if (y == buttonGrid[0].length-1)
return mineGrid[x-1][y] + mineGrid[x+1][y] + mineGrid[x-1][y-1] +
mineGrid[x][y-1] + mineGrid[x+1][y-1];
return mineGrid[x-1][y+1] + mineGrid[x][y+1] + mineGrid[x+1][y+1] +
mineGrid[x-1][y] + mineGrid[x+1][y] + mineGrid[x-1][y-1] +
mineGrid[x][y-1] + mineGrid[x+1][y-1];
}
}