Meu codigo implementa o Tetris
tenho uma matriz bidimensional de booleanos, o metodo paintComponent verifica essa matriz e onde eh true ele desenha um quadrado amarelo e onde eh false o quadrado eh preto. Os valores dessa matriz sao mudados a todo momento, pois, a figura fica descendo.
No entanto, quando dou um repaint() percebi que ele so desenha corretamente o quadrado descendo se eu chamar um metodo que percorre a matriz imprimindo no Console o valor true ou false e imprime no console. (Nao sei ainda o que uma coisa tem a ver com a outra…)
Pelo o que eu entendi, o java precisa percorrer a matriz verificando cada valor para poder desenha corretamente… ???..
A logica do jogo esta funcionando corretamente.
public void paintComponent(Graphics a)
{
for (int i=0; i < grid.getAltura(); i++ ){
for (int j=0; j< grid.getLargura(); j++){
if (grid.getGrid(j, grid.getAltura() -1 -i) == true){
a.setColor(Color.YELLOW);
a.fillRect(j*larguraQuadrado, i*larguraQuadrado, larguraQuadrado, larguraQuadrado);
}else{
a.setColor(Color.BLACK);
a.fillRect(j*larguraQuadrado, i*larguraQuadrado, larguraQuadrado, larguraQuadrado);
}
}
}
}
public static void desenhagrid (GridTetris a){
for(int i=(a.getAltura()-1);i>=0;i--){ //"imprime" a tabela de booleanos
for(int j=0;j<a.getLargura();j++){
System.out.print("\t"+a.getGrid(j, i)+"|");
}
System.out.println("");
}
System.out.println("");
}
repaint();
//desenhagrid(grid); //NAO DESENHA O QUADRADO CORRETAMENTE SE EU NAO CHAMAR O METODO
repaint();
desenhagrid(grid); //FUNCIONA CORRETAMENTE, A CADA REPAINT() O QUADRADO APARECE UM PIXEL ABAIXO.