com.mygdx.jogo.Tabuleiro.java Source code

Java tutorial

Introduction

Here is the source code for com.mygdx.jogo.Tabuleiro.java

Source

/*
 * 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;
                }
            }
        }

    }
}