示例#1
0
        private void MatrizPecasParaMatrizPosicoes()
        {
            int     lin, col, atual;
            int     pecasPretas    = 0;
            int     pecasVermelhas = 0;
            Posicao posicaoAtual;
            int     tamanho = getTamanhoTabuleiro();

            //TODO verificar se é dama ou não
            //se essa função for ser utilizada para outro propósito sem ser a inicialização isso será necessário
            for (lin = 0; lin < tamanho; lin++)
            {
                for (col = 0; col < tamanho; col++)
                {
                    atual            = matrizTabuleiroInt[lin, col];
                    posicaoAtual     = matrizTabuleiroPosicoes[lin, col].gameObject.GetComponent <Posicao>();
                    posicaoAtual.lin = lin;
                    posicaoAtual.col = col;
                    if (Tipos.isJogador1(atual))
                    {
                        posicaoAtual.peca = pedrasPretas.transform.GetChild(pecasPretas).gameObject;
                        pecasPretas++;
                    }
                    else if (Tipos.isJogador2(atual))
                    {
                        posicaoAtual.peca = pedrasVermelhas.transform.GetChild(pecasVermelhas).gameObject;
                        pecasVermelhas++;
                    }
                }
            }
        }
示例#2
0
        //funcao de avaliacao que considera a quantidade de pecas e o lugar onde estao
        //cada peca tem um valor associado peao, peao perto de virar dama e dama
        //cada posicao do tabuleiro tem um valor associado
        public static int evalMaterial(Estado estado)
        {
            int i, j, peca, valorPeca, valorPos, sum1 = 0, sum2 = 0;

            for (i = 0; i < 8; i++)
            {
                for (j = 0; j < 8; j++)
                {
                    peca     = estado.tabuleiro[i, j];
                    valorPos = valoracao[i, j];

                    if (Tipos.isDama(peca))
                    {
                        valorPeca = 10;
                    }
                    else if (((i == 1) && Tipos.isJogador1(peca)) || ((i == 6) && Tipos.isJogador2(peca)))
                    {
                        valorPeca = 7;
                    }
                    else
                    {
                        valorPeca = 5;
                    }

                    if (Tipos.isJogador1(peca))
                    {
                        sum1 += valorPeca * valorPos;
                    }
                    else if (Tipos.isJogador2(peca))
                    {
                        sum2 += valorPeca * valorPos;
                    }
                }
            }

            if (estado.jogadorAtual == 1)
            {
                return(sum1 - sum2);
            }
            else
            {
                return(sum2 - sum1);
            }
        }
示例#3
0
    public int verificaVitoriaEmpate(Estado estado)
    {
        // 0: não está em vitória nem em empate
        // 1: vitória do jogador 1
        // 2: vitória do jogador 2
        // 3: empate
        int resultado = 0;

        int qtdPecasJogador1, qtdPecasjogador2, qtdDamasJogador1, qtdDamasJogador2, qtdPecasNormaisJogador1, qtdPecasNormaisJogador2;

        qtdPecasJogador1 = qtdPecasjogador2 = qtdDamasJogador1 = qtdDamasJogador2 = qtdPecasNormaisJogador1 = qtdPecasNormaisJogador2 = 0;
        foreach (int peca in estado.tabuleiro)
        {
            if (Tipos.isJogador1(peca))
            {
                if (Tipos.isDama(peca))
                {
                    qtdDamasJogador1++;
                }
                qtdPecasJogador1++;
            }
            else if (Tipos.isJogador2(peca))
            {
                if (Tipos.isDama(peca))
                {
                    qtdDamasJogador2++;
                }
                qtdPecasjogador2++;
            }
        }

        if (qtdPecasJogador1 == 0)
        {
            mudaTexto("JOGADOR 2 GANHOU!!");
            return(2); //jogador 1 sem peças, vitoria do jogador 2
        }
        else if (qtdPecasjogador2 == 0)
        {
            mudaTexto("JOGADOR 1 GANHOU!!");
            return(1);//jogador 2 sem peças, vitoria do jogador 1
        }

        qtdPecasNormaisJogador1 = qtdPecasJogador1 - qtdDamasJogador1;
        qtdPecasNormaisJogador2 = qtdPecasjogador2 - qtdDamasJogador2;
        int qtdPecasNormais = qtdPecasNormaisJogador1 + qtdPecasNormaisJogador2;

        // 2 damas contra 2 damas;
        // 2 damas contra uma;
        // 2 damas contra uma dama e uma pedra;
        // uma dama contra uma dama e uma dama contra uma dama e uma pedra, são declarados empatados após 5 lances de cada jogador.

        if (estado.jogadasCondicaoEmpate >= 20 ||
            ((qtdDamasJogador1 == 2 && qtdDamasJogador2 == 2) && qtdPecasNormais == 0) ||
            ((qtdDamasJogador1 == 2 && qtdDamasJogador2 == 1) && qtdPecasNormais == 0) ||
            ((qtdDamasJogador1 == 1 && qtdDamasJogador2 == 2) && qtdPecasNormais == 0) ||
            ((qtdDamasJogador1 == 2 && qtdDamasJogador2 == 1) && qtdPecasNormaisJogador2 == 1) ||
            ((qtdDamasJogador1 == 1 && qtdDamasJogador2 == 2) && qtdPecasNormaisJogador1 == 1) ||
            ((qtdDamasJogador1 == 1 && qtdDamasJogador2 == 1 && qtdPecasNormais == 0) && estado.jogadasCondicaoEmpate >= 5) ||
            ((qtdDamasJogador1 == 1 && qtdDamasJogador2 == 1 && qtdPecasNormais == 1) && estado.jogadasCondicaoEmpate >= 5))
        {
            mudaTexto("EMPATE!!");
            return(3);
        }

        Debug.Log("Qtd Pecas Jogador 1: " + qtdPecasJogador1 + " Qtd Pecas Jogador 2: " + qtdPecasjogador2);
        return(resultado);
    }