Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.mygdx.jogo; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Stage; import java.util.ArrayList; import java.util.List; /** * * @author manue_000 */ public class Tabuleiro { public final static int DSE = 1;//diagonal superior esquerda public final static int DSD = 2;//diagonal superior direita public final static int DIE = 3;//diagonal inferior esquerda public final static int DID = 4;//diagonal inferior direita private static Tabuleiro instancia; int largura = 8;// largura do tabuleiro em quantidade de casas int altura = 8;// altura do tabuleiro em quantidade de casas int posX;// variavel para ajuste das coordenadas x das casa e peas int posY;// variavel para ajuste das coordenadas y das casa e peas Estado estado = new Estado(); Casa[][] matrizCasas; //Matriz que controla as posies do tabuleiro /** * Mtodo construtor de tabuleiro , privado de acordo com padro de projeto singleton. */ private Tabuleiro() { reiniciarTabuleiro(); } /**Mtodo utilizado para alocar as peas ao estado incial de um jogo de damas, * instanciando 12 peas do jogador1, 12 peas do jogador2 e 64 casas ,colorindo tanto peas quanto as casas do tabuleiro. */ public void reiniciarTabuleiro() { matrizCasas = new Casa[altura][largura]; Color cor = Color.WHITE; for (int lin = 0; lin < altura; lin++) { for (int col = 0; col < largura; col++) { //Define uma cor para uma casa de acorda com sua posio na matriz if (par(lin) && par(col)) { cor = Color.BLACK; } else if (!par(lin) && !par(col)) { cor = Color.BLACK; } else { cor = Color.WHITE; } //Configura a posio de cada casa de acordo com suas dimeses e ordem matrizCasas[lin][col] = new Casa(posX + Casa.LARGURA * col, posY + Casa.ALTURA * lin, cor); //Salva as posies da matriz na casa. matrizCasas[lin][col].setPosicaoMatriz(lin, col); if (estado.matriz[lin][col] == Estado.PECAJOGADOR1) { //Adiciona peas nas trs primeiras linhas do tabuleiro. matrizCasas[lin][col].peca = new Peca(posX + Casa.LARGURA * col, posY + Casa.ALTURA * lin); matrizCasas[lin][col].peca.imagem.setColor(Jogo.COLORJOGADOR1); matrizCasas[lin][col].peca.setColorOriginal(Jogo.COLORJOGADOR1);//lol isso deve estar dentro de peca !! Jogo.getInstance().getJogador1().getPecas().add(matrizCasas[lin][col].peca); } else if (estado.matriz[lin][col] == Estado.PECAJOGADOR2) {//Adiciona peas nas trs ltimas linhas do tabuleiro. matrizCasas[lin][col].peca = new Peca(posX + Casa.LARGURA * col, posY + Casa.ALTURA * lin); matrizCasas[lin][col].peca.imagem.setColor(Jogo.COLORJOGADOR2); matrizCasas[lin][col].peca.setColorOriginal(Jogo.COLORJOGADOR2); Jogo.getInstance().getJogador2().getPecas().add(matrizCasas[lin][col].peca); } } } } /**Mtodo utilizado para descobrir a casa a qual um ator pertence , * criado pos o mtodo do estagio que detecta colisso com o mouse ,retorna o actor que foi clicado * @param entrada a casa selecionada pelo jogador que obrigatriamente deve possuir uma pea do mesmo. * @return retorna a casa pertencente a matriz de casas do tabuleiro,cujo ator da casa ou da pea igual a entrada. */ public Casa getCasa(Actor entrada) { for (int i = 0; i < matrizCasas.length; i++) { for (int j = 0; j < matrizCasas[i].length; j++) { if (matrizCasas[i][j].imagem.equals(entrada) || (matrizCasas[i][j].peca != null && matrizCasas[i][j].peca.imagem.equals(entrada))) { return matrizCasas[i][j]; } } } return null; } /**Mtodo utilizado para descobrir casas disponveis para peca andar, * levando em conta as regras Lei da maioria e captura obrigatria. * @param casa a casa selecionada pelo jogador que obrigatriamente deve possuir uma pea do mesmo. * @param capturado responsvel por limitar os tipos de movimento da pea a capturas. * @return saida lista contendo os caminhos disponiveis, * lista simplesmente encadeadas contendo tuplas casa-estado, de melhor custo. */ public List<List<MovimentoEstado>> caminhosDisponiveis(Casa casa, boolean capturado) { List<List<MovimentoEstado>> saida = new ArrayList<List<MovimentoEstado>>(); int lin = casa.posicao[0]; int col = casa.posicao[1]; List<MovimentoEstado> estados = estado.movimentosPossiveis(lin, col, capturado); estados = estado.melhorCusto(lin, col, estados); for (MovimentoEstado est : estados) { saida.add(estado.ordenar(est)); } return saida; } /**Mtodo utilizado para descobrir que numeiro inteiro par, * @param numero o numero inteiro a ser verificado. * @return verdadeiro para numero par e falso para numero mpar, */ public boolean par(int numero) { return numero % 2 == 0; } /**Mtodo utilizado para retornar a instncia unica de tabuleiro que jogo possui.Padro de projeto singleton. * @return instancia ,unica instancia de tabuleiro. */ public static Tabuleiro retornaInstancia() { if (instancia == null) { instancia = new Tabuleiro(); } return instancia; } /**Mtodo utilizado para adicionar os atores(imagens) das instanciais das peas e das casas, * ao estagio da janela , que responsavl por desenhar e gernciar esses atores. * @param estagio estagio da janela que invocou o mtodo. */ public void adicionaArea(Stage estagio) { for (int i = 0; i < matrizCasas.length; i++) { for (int j = 0; j < matrizCasas.length; j++) { estagio.addActor(matrizCasas[i][j].imagem); if (matrizCasas[i][j].peca != null) { estagio.addActor(matrizCasas[i][j].peca.imagem); } } } for (int i = 0; i < matrizCasas.length; i++) { for (int j = 0; j < matrizCasas.length; j++) { if (matrizCasas[i][j].peca != null) { estagio.addActor(matrizCasas[i][j].peca.imagem); } } } } /**Mtodo utilizado para moficiar o estado do tabuleiro aps a pea realizar um movimento, * tambm responsavel por remover peas que no so refnciadas no novo estado. * @param novo o estado obtido atravs de um movimento. * @param estagio estagio utilizado para deletar a imagem da pea a ser removida. */ public void setEstado(Estado novo, Stage estagio) { estado = novo; for (int i = 0; i < estado.matriz.length; i++) { for (int j = 0; j < estado.matriz.length; j++) { if (matrizCasas[i][j].peca != null && estado.matriz[i][j] == 0) { estagio.getActors().removeValue(matrizCasas[i][j].peca.imagem, true); matrizCasas[i][j].peca = null; } } } } }