Estou montando um jogo de campo minado no java, o facil funcionou normal, mas o dificil está bloqueando metade da tela e os botões estão fora de ordem. Como arrumar isso?
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package campominado;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
*
* @author Said
*/
public class CampoMinadoMedio extends frmModelo implements ActionListener {
public JButton[] Botoes = new JButton[400];
public int[] Vetor = new int[400];
public JButton novo = new JButton("Novo Jogo");
public JPanel grid = new JPanel();
Container cp;
public boolean fim = false;
public Random rnd;
public void CampoMinadoMedio2() {
setVisible(true);
setSize(1300, 700);
setTitle("Campo Minado");
centerJFrame(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
cp = getContentPane();
cp.setLayout(null);
grid.setBounds(5, 50, 600, 600);
grid.setLayout(new GridLayout(30, 35, 3, 3));
for (int i = 0; i < 400; i++) {
Botoes[i] = new JButton("");
Botoes[i].addActionListener(this);
Botoes[i].setFocusable(false);
grid.add(Botoes[i]);
}
novo.setBounds(200, 4, 100, 41);
novo.setFocusable(false);
novo.addActionListener(this);
cp.add(grid);
cp.add(novo);
preencheVetor(Vetor);
}
public void preencheVetor(int[] Vetor) {
int contador = 0, flag = 0;
rnd = new Random();
while (contador < 40) {
contador = 0;
for (int i = 0; i < 400; i++) {
flag = rnd.nextInt(2);
if (contador >= 40) {
flag = 0;
}
// REDUNDÂNCIA PARA AS "BOMBAS" SEREM BEM DISTRIBUÍDAS
if (flag == 1) {
flag = rnd.nextInt(2);
if (flag == 1) {
flag = rnd.nextInt(2);
if (flag == 1) {
flag = rnd.nextInt(2);
if (flag == 1) {
contador += 1;
}
}
}
}
Vetor[i] = flag;
}
}
}
public void centerJFrame(JFrame frame) {
Dimension paneSize = frame.getSize();
Dimension screenSize = frame.getToolkit().getScreenSize();
frame.setLocation((screenSize.width - paneSize.width) / 2, (screenSize.height - paneSize.height) / 2);
}
public void abreJogo() {
for (int i = 0; i < 400; i++) {
Botoes[i].doClick();
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == novo) {
preencheVetor(Vetor);
for (int i = 0; i < 400; i++) {
Botoes[i].setText("");
Botoes[i].setEnabled(true);
}
fim = false;
JOptionPane.showMessageDialog(this, "Jogo Reiniciado!", "Novo Jogo", JOptionPane.INFORMATION_MESSAGE);
}
for (int i = 0; i < 400; i++) {
if (e.getSource() == Botoes[i]) {
if (Vetor[i] == 0) {
int contador = 0;
contador = getBombas(i);
if (!fim) {
if (contador > 0) {
Botoes[i].setText("" + contador);
Botoes[i].setEnabled(false);
} else {
explodir(i);
}
} else {
if (contador > 0) {
Botoes[i].setText("" + contador);
}
Botoes[i].setEnabled(false);
}
} else {
if (Vetor[i] == 1) {
Botoes[i].setText("X");
if (!fim) {
JOptionPane.showMessageDialog(null, "BOOOM!!!");
fim = true;
abreJogo();
}
}
}
}
}
}
public void explodir(int i) {
int contador = 0;
Botoes[i].setEnabled(false);
if (i + 1 < 400 & i % 20 != 9) {
contador = getBombas(i + 1);
if (contador == 0) {
if (Botoes[i + 1].isEnabled() == true) {
Botoes[i + 1].doClick();
}
}
}
if (i - 1 >= 0 & i % 20 != 0) {
contador = getBombas(i - 1);
if (contador == 0) {
if (Botoes[i - 1].isEnabled() == true) {
Botoes[i - 1].doClick();
}
}
}
if (i - 20 >= 0) {
contador = getBombas(i - 20);
if (contador == 0) {
if (Botoes[i - 20].isEnabled() == true) {
Botoes[i - 20].doClick();
}
}
}
// Verifica bomba abaixo
if (i + 20 < 400) {
contador = getBombas(i + 20);
if (contador == 0) {
if (Botoes[i + 20].isEnabled() == true) {
Botoes[i + 20].doClick();
}
}
}
}
public int getBombas(int i) {
int contador = 0;
// Verifica bomba à direita
if (i + 1 < 400 & i % 20 != 9) {
if (Vetor[i + 1] == 1) {
contador += 1;
}
}
// Verifica bomba à esquerda
if (i - 1 >= 0 & i % 20 != 0) {
if (Vetor[i - 1] == 1) {
contador += 1;
}
}
// Verifica bomba acima
if (i - 20 >= 0) {
if (Vetor[i - 20] == 1) {
contador += 1;
}
}
// Verifica bomba abaixo
if (i + 20 < 400) {
if (Vetor[i + 20] == 1) {
contador += 1;
}
}
// Verifica bomba à esquerda acima
if (i - 21 >= 0 & i % 20 != 0) {
if (Vetor[i - 21] == 1) {
contador += 1;
}
}
// Verifica bomba à direita acima
if (i - 9 >= 0 & i % 20 != 9) {
if (Vetor[i - 9] == 1) {
contador += 1;
}
}
// Verifica bomba à esquerda abaixo
if (i + 9 < 400 && i % 20 != 0) {
if (Vetor[i + 9] == 1) {
contador += 1;
}
}
// Verifica bomba à direita abaixo
if (i + 21 < 400 && i % 20 != 9) {
if (Vetor[i + 21] == 1) {
contador += 1;
}
}
return contador;
}
// public static void main (String args []) {
//
// CampoMinado campo = new CampoMinado ();
// campo.setVisible (true);
//
// }
}