import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class NewMineGame extends Frame implements ActionListener { private static final int ROW = 8; private static final int COL = 8; private Button[][] buttonGrid; private int[][] mineGrid; private RunClockPanel runClock; private Panel minePanel; public static void main(String[] args) { NewMineGame newMineGame = new NewMineGame(); newMineGame.setVisible(true); } public NewMineGame() { super("Mine Game"); RunClockPanel runClock = new RunClockPanel(); buttonGrid = new Button[ROW][COL]; mineGrid = new int[ROW][COL]; minePanel = new Panel(); setSize (340, 600); setLayout(new GridLayout(2,1)); 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); } add(runClock); add(minePanel); addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent evt) { NewMineGame.this.dispose(); } } ); } 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) buttonGrid[i][j].setLabel("die"); else buttonGrid[i][j].setLabel(mineNum(i,j)+""); repaint(); } } } 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]; } }
import java.applet.*; import java.awt.*; import java.awt.event.*; public class RunClockPanel extends Panel implements Runnable, ActionListener { Label timeDisp = new Label(" 0:0 ", Label.CENTER); Thread timerThread; int time = 0; Button btReset = new Button("Reset"); Button btStart = new Button("Start"); Button btStop = new Button("Stop"); public RunClockPanel() { Panel p = new Panel(); setLayout(new GridLayout(2, 1)); p.setLayout(new GridLayout(1, 3)); btReset.setEnabled(false); btStop.setEnabled(false); p.add(btReset); p.add(btStart); p.add(btStop); add(p); btReset.addActionListener(this); btStart.addActionListener(this); btStop.addActionListener(this); timeDisp.setFont(new Font("Courier", Font.BOLD, 50)); add("Center", timeDisp); } public void stop() { Thread t = timerThread; if (t != null) { timerThread = null; try { t.join(); } catch (Exception e) {} } } public void actionPerformed(ActionEvent e) { if (e.getSource() == btReset) { stop(); timeDisp.setText("0:0"); time = 0; btReset.setEnabled(false); btStart.setEnabled(true); btStop.setEnabled(false); btStart.setLabel("Start"); } else if (e.getSource() == btStop) { stop(); btReset.setEnabled(true); btStart.setEnabled(true); btStop.setEnabled(false); btStart.setLabel("Continue"); } else if (e.getSource() == btStart) { timerThread = new Thread(this); timerThread.start(); btReset.setEnabled(false); btStart.setEnabled(false); btStop.setEnabled(true); btStart.setLabel("Continue"); } } public void run() { while (timerThread == Thread.currentThread()) { timeDisp.setText("" + time/600 + ":" + (time/10)%60); time++; try { Thread.sleep(100); } catch (Exception e) {}; } } }
Previou page | Next page |