Tengo el siguiente programa en Java sobre un buscaminas(bastante basico) lo tengo casi listo pero me falla en algo... no logro entender que sucede....
Cuando uno hace click en algun cuadrado, reviza la cantidad de bombas y pone el numero de bombas que hay al rededor, pero si colocas el click justo donde hay una bomba, la marca con X y pone todas de color rojo( las que tenian bombas) hasta ahi todo bien, pero cuando no tiene NINGUNA BOMBA al rededor falla el juego....
adjunto el codigo del buscaminas!
Código HTML:
import java.awt.*; import java.applet.*; import java.awt.event.*; public class Buscamina extends Applet implements ActionListener { private Button b[][]=new Button[5][5];//matris de botones private Button Comenzar = new Button("Comenzar");//boton comenzar private Button Otravez = new Button("Otra vez");//boton volver a jugar private int A[][]=new int[5][5];//matriz con bombas private int i,j,x=150,y=80,f,c,aux,v;//variables varias private Color Z = new Color(211,211,211);//color gris private Color Y = new Color(160,82,45);//color cafe private Color X = new Color(198,226,255);//color celeste private Image F[]=new Image[5];//arreglo de imagenes private AudioClip SonidoActual;//sonido private boolean w;//variable para determinar si se gano o no public void init() { this.setLayout(null); this.setSize(400,283);//configuracion de pantalla por defecto Comenzar.setBounds(260,200,100,30);//modificacion de posicion y tamaño de boton comenzar Comenzar.setBackground(X);//modificacion a color celeste del boton comenzar Otravez.setBounds(260,240,100,30);//modificacion de posicion y tamaño de boton otravez Otravez.setBackground(Y);//modificacion a color cafe de boton otravez Comenzar.addActionListener(this);//agregar actionListener a boton comenzar Otravez.addActionListener(this);//agregar actionListener a boton otravez add(Comenzar);//agregar boton comenzar a la pantalla add(Otravez);//agregar boton otravez a la pantalla //setBackground(Color.black); for(i=0;i<5;i++){ for(j=0;j<5;j++){ A[i][j]=(int)(Math.random()*5); b[i][j]=new Button(); b[i][j].setBounds(x,y,20,20); x=x+20; b[i][j].setBackground(Z); b[i][j].addActionListener(this); add(b[i][j]); } x=150; y=y+20; } w=false; } public void paint(Graphics g){ F[1]=getImage(getCodeBase(),"fondo.jpg"); if(w==false){ g.drawImage(F[1],0,0,this); }else{ F[2]=getImage(getCodeBase(),"reset.jpg"); g.drawImage(F[2],0,0,this); } } public void actionPerformed(ActionEvent e){ for(i=0;i<5;i++){ for(j=0;j<5;j++){ if(e.getSource()==b[i][j]){ if(A[i][j]!=1){ BBC(i,j); }else{ mostrarBombas(); } } } } if(e.getSource()==Comenzar){ comenzar(); } if(e.getSource()==Otravez){ re(); } } //aqui busca las bombas public void BBC(int i, int j){ v=0; if( (i>0) && (j>0) && (A[i-1][j-1]==1) ) v++; if( (i>0) && (A[i-1][j] ==1) ) v++; if( (i>0) && (j<4) && (A[i-1][j+1]==1) ) v++; if( (j>0) && (A[i][j-1] ==1) ) v++; if( (j<4) && (A[i][j+1] ==1) ) v++; if( (i<4) && (j>0) && (A[i+1][j-1]==1) ) v++; if( (i<4) && (A[i+1][j] ==1) ) v++; if( (i<4) && (j<4) && (A[i+1][j+1]==1) ) v++; marcarbuenas(i,j); //se supone que si no encontro ninguna debe devolver el metodo anterior para todos los cuadros de alrededor pero aqui falla if(v==0){ BBC(i-1, j-1); BBC(i-1,j); BBC(i-1, j+1); BBC(i,j-1); BBC(i,j+1); BBC(i+1,j-1); BBC(i+1,j); BBC(i+1,j+1); } } //metodo para poner en cuadrado numero de bombas al rededor public void marcarbuenas(int i, int j){ b[i][j].setBackground(Color.white); if(v==0){ b[i][j].setLabel(" "); }else{ b[i][j].setLabel(Integer.toString(v)); } } //metodo que marca todas las bombas de color rojo y agrega X public void mostrarBombas(){ for(i=0;i<5;i++){ for(j=0;j<5;j++){ if(A[i][j]==1){ b[i][j].setBackground(Color.red); b[i][j].setLabel("X"); } } } w=true; SonidoActual.stop(); SonidoActual=getAudioClip(getCodeBase(), "Crash.wav"); SonidoActual.play(); repaint(); } //metodo para comenzar el juego public void comenzar(){ SonidoActual=getAudioClip(getCodeBase(), "tictac.wav"); SonidoActual.play(); repaint(); } //metodo para resetear el juego public void re(){ SonidoActual.stop(); w=false; for(i=0;i<5;i++){ for(j=0;j<5;j++){ A[i][j]=(int)(Math.random()*5); b[i][j].setBackground(Z); b[i][j].setLabel(""); } } repaint(); } }
desde ya muchas gracias!