El código fuente comienza a explotar 20 veces
Paquete com.game
Importar Java.awt.gridlayout;
Importar Java.awt.event.*;
Importar Java . util . aleatorio;
Importar javax * . p>
*
*/
La clase pública Winmine extiende JFrame para implementar ActionListener {
private static final long serialVersionUID = 1L;
GridLayout gridLayout
JButton[]BTN;
JPanel pMain
JMenuBar jMenuBar
JMenu Juego;
JMenuItem inicio
int ancho, alto;
aleatorio aleatorio;
int[]mío;
Winmine público (int ancho , int altura) {
Aleatorio = new Aleatorio();
this.width =ancho;
this.height =altura;
jMenuBar = nueva jMenuBar();
Juego = nuevo JMenu("Juego");
inicio = nuevo JMenuItem(" inicio ");
iniciar . addactionlistener(this);
jMenuBar.add(game);
game.add(start);
this setjmenubar(jMenuBar);
p>
gridLayout = nuevo GridLayout(ancho, alto);
pMain = nuevo JPanel();
pmain.set diseño(gridLayout);
BTN = nuevo JButton[ancho*alto];
for(int I = 0; iltwidth*height; i) {
BTN[I]= nuevo JButton() ;
btn[i]. addActionListener(this);
pmain. add(BTN[I]);
}
produceMine(ancho, alto);
this.getContentPane(). add(pMain);
this.setSize(ancho * 50, alto * 40);
this .set visible(true); (JFrame.
EXIT _ ON _ CLOSE);
}
Acción de anulación pública realizada (evento de acción){
Pruebe {
JMenuItem JMenuItem. =(JMenuItem)event.getsource();
jmenuitem.geaccelerator();
produceMine(ancho, alto);
Replay(); p>
p>
Retorno;
} catch(Excepción e) {
}
Botón JButton =(JButton)event.getsource ();
p>for(int I = 0; i lt ancho * alto; i) {
if (botón == btn[i]) {
if (! checkMine (i)) {
Panel de opciones. Mostrar cuadro de diálogo de mensaje (esto, "¡Lo siento, golpeaste una mina!");
pierdes el juego()
} De lo contrario, {
int num =; getmine qoh(I);
btn[i]. setText(num " ");
set enable(false); 0) {
Haga clic en Btn(uno);
}
isWinGame();
Interrumpir
}
}
}
}
//Perdido
public void perderGame() {
for(int I = 0; i lt my. length; i) {
BTN[my[i]]. setText(" * " );
}
for(int I = 0; i ltbtn . length; i) {
btn[i].set enable(false
}
}
//Reiniciar un nuevo juego
Public void replay(){
for (int I = 0; iltbtn. longitud; i) {
btn[i]. setText(" ");
btn[i]; }
//¿Ganaste?
El vacío público es WinGame() {
int qoh = 0;
for(int). I = 0; i ltbtn . longitud; i ) {
if (!btn[i].isEnabled()) {
qoh;
}
}
if(qoh = = ancho * alto-mío. largo){
Panel de opciones. Mostrar cuadro de diálogo de mensaje (esto, "¡Felicitaciones por su victoria! ");
}
}
//Si haces clic cerca del botón de amonio, el número de minerales es 0.
public void clickBtn(int index) {
int[]around = getIndex(index);
for(int I = 0; I lt longitud aproximadamente ;i) {
BTN[alrededor de[i]]. doClick();
}
}
//Haga clic en el botón de amonio para obtener la cantidad de minerales cercanos.
public int getMineQoh(int index) {
int num = 0
int[]around = getIndex(index); >for(int I = 0; i lt longitud sobre; i) {
for(int j = 0; j lt mi. longitud; j) {
if (alrededor de [ i] == mío[j]) {
num;
Continuar;
}
}
}
Cantidad devuelta;
}
//Obtenga el número de índice cerca del botón de amonio al hacer clic.
public int[] getIndex(int index) {
int[]left = new int[altura-2];
for(int I = 0 ; i ltleft . longitud; i ) {
izquierda[i] = (i 1) *ancho; new int [altura-2];
for(int I = 0; i lt right. length; i) {
right[I]=(I 2)* ancho- 1;
}
int[]top = new int[ancho-2];
for(int I = 0; i lttop . length; i ) {
arriba[I]= I 1;
}
int[]piso = nuevo int[ancho-2];
for(int I = 0; i lt piso.largo; i) {
Piso[i] = ancho*(alto-1) I 1;
} p>
int[]around = new int[3];
if (index == 0) {
[0] = alrededor de 1;
aproximadamente [1] = ancho;
aproximadamente [2] = ancho 1;
} else if (índice == ancho - 1) {
aproximadamente [ 0] = ancho - 2;
[1] = 2 * ancho - aproximadamente 2
Izquierda y derecha [2] = 2 * ancho - 1; >
} else if(index = =(alto-1)* ancho){
Izquierda y derecha [0] = (alto - 2) * ancho)
Alrededor; [1] = (alto - 2) *ancho 1;
alrededor[2] = (alto - 1) *ancho 1
} else if (índice = = alto * ancho-1){
Alrededor[0] = (alto-1) *ancho-2;
Alrededor[1] = (alto-1) *ancho-1;
Izquierda y derecha [2] = alto * ancho - 2;
} De lo contrario {
alrededor = new int[5]; >for(int I = 0; i lttop . length; i ) {
prueba {
if (index == top[i]) {
aproximadamente[0] = arriba[I ]-1;
alrededor[1]= arriba[I] 1;
alrededor[2]= arriba[I] ancho-1;
aproximadamente [3] = ancho superior[i];
alrededor[4]= ancho superior[I] 1;
Regresar alrededor;
} else if ( index == piso[i]) {
Alrededor[0] = Piso[i]-Ancho-1;
Alrededor[1] = Piso[i]-Ancho;
Alrededor [2] = piso [i] - ancho 1
Alrededor [3] = piso [I] - 1;
Izquierda y derecha [4] = Piso[I] 1;
Regresar a los alrededores;
} else if (
index == izquierda[i]) {
Acerca de [0] = izquierda [i] - ancho
Izquierda y derecha [1] = izquierda [i] - ancho 1;
p>
Izquierda y derecha[2] = izquierda[I] 1;
Izquierda y derecha[3] = izquierda[i] ancho;
alrededor[4]= izquierda[I] ancho 1;
Regresar alrededor;
} else if (index == derecha[i]) {
Izquierda y derecha[0] = derecha[i] - Ancho-1
Izquierda y derecha [1] = derecha [i] - ancho
Izquierda y derecha [2; ] = derecha [I]-1;
alrededor de [3]= derecha[I] ancho-1
Izquierda y derecha [4] = derecha[i] ancho <; /p>
Regresar alrededor;
} p>
} catch(Excepción e) {
}
}
alrededor = nuevo int[8];
alrededor[0]=ancho-índice-1;
alrededor[1]=ancho-índice;
[2] = alrededor del índice - ancho 1;
alrededor[3]=index-1;
izquierda y derecha[4]=índice 1;
izquierda y derecha[5]=ancho del índice-1;
aproximadamente [6] = ancho del índice
Izquierda y derecha [7] = ancho del índice
p>}
Vuelve;
}
//Comprueba si el botón de amonio es una mina.
verificación booleana pública mía(int btnIndex){
Devolver checkNum(btnIndex, mía);
}
//Obtener no Método de repetición de números
public boolean checkNum(int num, int[] arrayNum) {
for(int I = 0; I ltarray num. length; i) {
if (arrayNum[i] == num) {
Devuelve falso
}
}
Devuelve verdadero
}
//Método de generación de minería
mina de producto público vacío (int ancho, int alto) {
int qoh = ancho * altura/5;
int index;
mío = nuevo int[qoh];
for(int I = 0; Iltqohi) {
índice = aleatorio . nextint(ancho * alto);
if (checkNum(índice, mío)) {
mío[I]= índice;
}else{
I-;
}
}
}
Vacío estático público principal (String[] args) {
Nuevo Winmine(16,16);
}
}
Se siente bien.