You are on page 1of 8

package buscaminas;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Mine extends JFrame implements ActionListener, MouseListener{

int nomines = 80;

int perm[][];

String tmp;

boolean found = false;

int row;

int column;

int guesses[][];

JButton b[][];

int[][] mines;

boolean allmines;

int n = 30;

int m = 30;

int deltax[] = {-1, 0, 1, -1, 1, -1, 0, 1};

int deltay[] = {-1, -1, -1, 0, 0, 1, 1, 1};

double starttime;

double endtime;

public Mine(){

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

perm = new int[n][m];

boolean allmines = false;

guesses = new int [n+2][m+2];

mines = new int[n+2][m+2];

b = new JButton [n][m];

setLayout(new GridLayout(n,m));

for (int y = 0;y<m+2;y++){

mines[0][y] = 3;
mines[n+1][y] = 3;

guesses[0][y] = 3;

guesses[n+1][y] = 3;

for (int x = 0;x<n+2;x++){

mines[x][0] = 3;

mines[x][m+1] = 3;

guesses[x][0] = 3;

guesses[x][m+1] = 3;

do {

int check = 0;

for (int y = 1;y<m+1;y++){

for (int x = 1;x<n+1;x++){

mines[x][y] = 0;

guesses[x][y] = 0;

for (int x = 0;x<nomines;x++){

mines [(int) (Math.random()*(n)+1)][(int) (Math.random()*(m)+1)] = 1;

for (int x = 0;x<n;x++){

for (int y = 0;y<m;y++){

if (mines[x+1][y+1] == 1){

check++;

if (check == nomines){

allmines = true;

}
}while (allmines == false);

for (int y = 0;y<m;y++){

for (int x = 0;x<n;x++){

if ((mines[x+1][y+1] == 0) || (mines[x+1][y+1] == 1)){

perm[x][y] = perimcheck(x,y);

b[x][y] = new JButton("?");

b[x][y].addActionListener(this);

b[x][y].addMouseListener(this);

add(b[x][y]);

b[x][y].setEnabled(true);

}//end inner for

}//end for

pack();

setVisible(true);

for (int y = 0;y<m+2;y++){

for (int x = 0;x<n+2;x++){

System.out.print(mines[x][y]);

System.out.println("");}

starttime = System.nanoTime();

}//end constructor Mine()

public void actionPerformed(ActionEvent e){

found = false;

JButton current = (JButton)e.getSource();

for (int y = 0;y<m;y++){

for (int x = 0;x<n;x++){

JButton t = b[x][y];

if(t == current){

row=x;column=y; found =true;


}

}//end inner for

}//end for

if(!found) {

System.out.println("didn't find the button, there was an error "); System.exit(-1);

Component temporaryLostComponent = null;

if (b[row][column].getBackground() == Color.orange){

return;

}else if (mines[row+1][column+1] == 1){

JOptionPane.showMessageDialog(temporaryLostComponent, "You set off a


Mine!!!!.");

System.exit(0);

} else {

tmp = Integer.toString(perm[row][column]);

if (perm[row][column] == 0){

tmp = " ";

b[row][column].setText(tmp);

b[row][column].setEnabled(false);

checkifend();

if (perm[row][column] == 0){

scan(row, column);

checkifend();

public void checkifend(){

int check= 0;

for (int y = 0; y<m;y++){


for (int x = 0;x<n;x++){

if (b[x][y].isEnabled()){

check++;

}}

if (check == nomines){

endtime = System.nanoTime();

Component temporaryLostComponent = null;

JOptionPane.showMessageDialog(temporaryLostComponent, "Congratulations you


won!!! It took you "+(int)((endtime-starttime)/1000000000)+" seconds!");

public void scan(int x, int y){

for (int a = 0;a<8;a++){

if (mines[x+1+deltax[a]][y+1+deltay[a]] == 3){

} else if ((perm[x+deltax[a]][y+deltay[a]] == 0) && (mines[x+1+deltax[a]][y+1+deltay[a]]


== 0) && (guesses[x+deltax[a]+1][y+deltay[a]+1] == 0)){

if (b[x+deltax[a]][y+deltay[a]].isEnabled()){

b[x+deltax[a]][y+deltay[a]].setText(" ");

b[x+deltax[a]][y+deltay[a]].setEnabled(false);

scan(x+deltax[a], y+deltay[a]);

} else if ((perm[x+deltax[a]][y+deltay[a]] != 0) && (mines[x+1+deltax[a]][y+1+deltay[a]]


== 0) && (guesses[x+deltax[a]+1][y+deltay[a]+1] == 0)){

tmp = new Integer(perm[x+deltax[a]][y+deltay[a]]).toString();

b[x+deltax[a]][y+deltay[a]].setText(Integer.toString(perm[x+deltax[a]][y+deltay[a]]));

b[x+deltax[a]][y+deltay[a]].setEnabled(false);

}
public int perimcheck(int a, int y){

int minecount = 0;

for (int x = 0;x<8;x++){

if (mines[a+deltax[x]+1][y+deltay[x]+1] == 1){

minecount++;

return minecount;

public void windowIconified(WindowEvent e){

public static void main(String[] args){

new Mine();

public void mouseClicked(MouseEvent e) {

@Override

public void mouseEntered(MouseEvent arg0) {

// TODO Auto-generated method stub

@Override

public void mouseExited(MouseEvent arg0) {

// TODO Auto-generated method stub


}

@Override

public void mousePressed(MouseEvent e) {

if (e.getButton() == MouseEvent.BUTTON3) {

found = false;

Object current = e.getSource();

for (int y = 0;y<m;y++){

for (int x = 0;x<n;x++){

JButton t = b[x][y];

if(t == current){

row=x;column=y; found =true;

}//end inner for

}//end for

if(!found) {

System.out.println("didn't find the button, there was an error "); System.exit(-1);

if ((guesses[row+1][column+1] == 0) && (b[row][column].isEnabled())){

b[row][column].setText("x");

guesses[row+1][column+1] = 1;

b[row][column].setBackground(Color.orange);

} else if (guesses[row+1][column+1] == 1){

b[row][column].setText("?");

guesses[row+1][column+1] = 0;

b[row][column].setBackground(null);

@Override
public void mouseReleased(MouseEvent arg0) {

// TODO Auto-generated method stub

}//end class

You might also like