Depois de alguns dias de molho e outros ocupado demais, cá estou para continuarmos nosso jogo de Xadrez.
No último POST, prometi que iria mostrar como colocar as peças no tabuleiro.
Pois bem. As peças na realidade nada mais são do que uma coleção de PecaModelS na matriz Pecas, localizada na classe TabuleiroModel. Você se lembra disso?
Caso não lembre, declaramos ele da seguinte forma:
private PecaModel pecas[][];
Nós vamos colocar as nossas peças no método montaTabuleiro() da classe TabuleiroModel, que havíamos deixado em branco antes. Observe que para construir uma Peca, precisamos informar a cor, a linha e a coluna:
public void montaTabuleiro() {
pecas[0][0] = new PecaModel("TORREPRETO.gif", 0, 0);
pecas[0][1] = new PecaModel("CAVALOPRETO.gif", 0, 1);
...
}
Repare que só fiz para as duas primeiras peças, mas você deve terminar até completar todas as peças. Agora, porque eu coloquei aquele nome "TORREPRETO.gif", sendo que ali teoricamente deveria ser a cor da peça? Bem, vou explicar isso daqui a pouco, mas vou adiantar um pouco. Nós precisamos representar as nossas peças graficamente, ou seja, precisamos ter um cavalo ou uma torre em forma de figura para que seja um jogo de Xadrez de verdade, e o que eu informei ali é um nome de um arquivo.
Continuando, vamos para a classe Peca, aquela que extends JLabel, lembra? Vamos relembrar o construtor desta classe:
public Peca(PecaModel peca) {
this.pecaModel = peca;
}
Aqui nada de estranho, associamos um PecaModel a nossa classe Peca. Mas é agora que vem o segredo. Lembra que no construtor de PecaModel eu passei um nome de arquivo? Pois é aqui que vamos usá-lo, para que, ao associarmos um PecaModel a uma Peca, possamos buscar uma imagem para associação!
Vamos mudar o nosso construtor de Peca para o seguinte código:
public Peca(PecaModel peca) {
this.pecaModel = peca;
this.setIcon(new ImageIcon(getClass().getResource(
"/imagens/" + pecaModel.getCor())));
}
Observe o método setIcon (sim, é this porque Peca É-UM JLabel, e JLabel possui um método setIcon!).
E que diretório é esse /imagens? Crie um subdiretório no src com o nome imagens. É aqui que suas peças deverão ser adicionadas. Observe que o nome do arquivo deve coincidir com o nome que você passou no construtor de PecaModel.
Chegando na última parte do nosso POST de hoje, precisamos mostrar essas peças no tabuleiro. No artigo anterior, conseguimos mostrar o tabuleiro, através do método montaTabuleiro da classe Tabuleiro. Vamos modificá-lo para adicionar as peças? Destacarei as partes que foram adicionadas em vermelho para facilitar o entendimento:
private TabuleiroModel tabuleiroModel = new TabuleiroModel();
public void montaTabuleiro() {
this.setLayout(new GridLayout(8, 8));
tabuleiroModel.montaTabuleiro();
this.removeAll();
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
PecaModel pecaModel = tabuleiroModel.getPeca(i, j);
Celula celula;
if (pecaModel != null) {
Peca peca = new Peca(pecaModel);
celula = new Celula(peca);
} else {
celula = new Celula(i, j);
}
if ((i + j) % 2 == 0) {
celula.setBackground(Color.WHITE);
} else {
celula.setBackground(Color.BLACK);
}
this.add(celula);
}
}
this.revalidate();
}
Vamos a lógica dos elementos novos adicionados no código. Primeiramente, instanciamos um TabuleiroModel fora do método montaTabuleiro para que possamos ter uma referência ao modelo do tabuleiro (ou seja, acessar suas peças, etc). Na sequência, pedimos para o tabuleiro se organizar (para o modelo se ajustar, colocando as devidas peças em seus devidos lugares). Para cada linha/coluna, nós criamos um PecaModel e verificamos se naquela linha e coluna há uma peça. Caso haja (pecaModel != null), então construímos uma Celula passando quem? Exatamente a peca que está naquela posição! A célula já saberá em qual linha e coluna deverá ser colocada, pois a própria Peca tem essa informação. Caso não haja nenhuma peça na respectiva linha e coluna, construímos uma célula em branco. Muito bacana, não é?
O resultado deverá ficar assim:
Imagem 01: Tabuleiro com peças
Mas ainda temos muito trabalho pela frente. Neste momento, não conseguimos mover sequer uma peça e nem fazer nenhum tipo de interação, ou seja, JOGAR. No próximo POST, aprenderemos a criar VIDA para as nossas queridas peças! Um abraço e até logo!


Nenhum comentário:
Postar um comentário