Exemplo n.º 1
0
        public override bool[,] movimentosPossiveis()
        {
            bool[,] matriz = new bool[tabuleiro.linhas, tabuleiro.colunas];
            var p = new Posicao(0, 0);

            //acima
            p.definirValores(posicao.linha - 1, posicao.coluna);
            if (tabuleiro.posicaoValida(p) && podeMover(p))
            {
                matriz[p.linha, p.coluna] = true;
            }
            //ne
            p.definirValores(posicao.linha - 1, posicao.coluna + 1);
            if (tabuleiro.posicaoValida(p) && podeMover(p))
            {
                matriz[p.linha, p.coluna] = true;
            }
            //direita
            p.definirValores(posicao.linha, posicao.coluna + 1);
            if (tabuleiro.posicaoValida(p) && podeMover(p))
            {
                matriz[p.linha, p.coluna] = true;
            }
            //se
            p.definirValores(posicao.linha + 1, posicao.coluna + 1);
            if (tabuleiro.posicaoValida(p) && podeMover(p))
            {
                matriz[p.linha, p.coluna] = true;
            }
            //baixo
            p.definirValores(posicao.linha + 1, posicao.coluna);
            if (tabuleiro.posicaoValida(p) && podeMover(p))
            {
                matriz[p.linha, p.coluna] = true;
            }
            //so
            p.definirValores(posicao.linha + 1, posicao.coluna - 1);
            if (tabuleiro.posicaoValida(p) && podeMover(p))
            {
                matriz[p.linha, p.coluna] = true;
            }
            //esquerda
            p.definirValores(posicao.linha, posicao.coluna - 1);
            if (tabuleiro.posicaoValida(p) && podeMover(p))
            {
                matriz[p.linha, p.coluna] = true;
            }
            //no
            p.definirValores(posicao.linha - 1, posicao.coluna - 1);
            if (tabuleiro.posicaoValida(p) && podeMover(p))
            {
                matriz[p.linha, p.coluna] = true;
            }

            //TODO jogada especial Rei
            // #jogada especial Roque
            if (qtdMovimento == 0 && !partida.xeque)
            {
                var posicaoTorre1 = new Posicao(posicao.linha, posicao.coluna + 3);
                if (testeRoqueTorre(posicaoTorre1))
                {
                    var newPosicaoRei   = new Posicao(posicao.linha, posicao.coluna + 1);
                    var newPosicaoTorre = new Posicao(posicao.linha, posicao.coluna + 2);
                    if (tabuleiro.peca(newPosicaoRei) == null && tabuleiro.peca(newPosicaoTorre) == null)
                    {
                        matriz[posicao.linha, posicao.coluna + 2] = true;
                    }
                }

                // #jogada especial Roque grande
                var posicaoTorre2 = new Posicao(posicao.linha, posicao.coluna - 4);
                if (testeRoqueTorre(posicaoTorre2))
                {
                    var p1 = new Posicao(posicao.linha, posicao.coluna - 1);
                    var p2 = new Posicao(posicao.linha, posicao.coluna - 2);
                    var p3 = new Posicao(posicao.linha, posicao.coluna - 3);
                    if (tabuleiro.peca(p2) == null && tabuleiro.peca(p2) == null && tabuleiro.peca(p3) == null)
                    {
                        matriz[posicao.linha, posicao.coluna - 2] = true;
                    }
                }
            }

            return(matriz);
        }
Exemplo n.º 2
0
        private bool testeRoqueTorre(Posicao posicao)
        {
            var p = tabuleiro.peca(posicao);

            return(p != null && p is Torre && p.cor == cor && p.qtdMovimento == 0);
        }
Exemplo n.º 3
0
        public override bool[,] movimentosPossiveis()
        {
            bool[,] matriz = new bool[tabuleiro.linhas, tabuleiro.colunas];
            var p = new Posicao(0, 0);


            Posicao pos = new Posicao(0, 0);

            // esquerda
            pos.definirValores(posicao.linha, posicao.coluna - 1);
            while (tabuleiro.posicaoValida(pos) && podeMover(pos))
            {
                matriz[pos.linha, pos.coluna] = true;
                if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor)
                {
                    break;
                }
                pos.definirValores(pos.linha, pos.coluna - 1);
            }

            // direita
            pos.definirValores(posicao.linha, posicao.coluna + 1);
            while (tabuleiro.posicaoValida(pos) && podeMover(pos))
            {
                matriz[pos.linha, pos.coluna] = true;
                if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor)
                {
                    break;
                }
                pos.definirValores(pos.linha, pos.coluna + 1);
            }

            // acima
            pos.definirValores(posicao.linha - 1, posicao.coluna);
            while (tabuleiro.posicaoValida(pos) && podeMover(pos))
            {
                matriz[pos.linha, pos.coluna] = true;
                if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor)
                {
                    break;
                }
                pos.definirValores(pos.linha - 1, pos.coluna);
            }

            // abaixo
            pos.definirValores(posicao.linha + 1, posicao.coluna);
            while (tabuleiro.posicaoValida(pos) && podeMover(pos))
            {
                matriz[pos.linha, pos.coluna] = true;
                if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor)
                {
                    break;
                }
                pos.definirValores(pos.linha + 1, pos.coluna);
            }

            // NO
            pos.definirValores(posicao.linha - 1, posicao.coluna - 1);
            while (tabuleiro.posicaoValida(pos) && podeMover(pos))
            {
                matriz[pos.linha, pos.coluna] = true;
                if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor)
                {
                    break;
                }
                pos.definirValores(pos.linha - 1, pos.coluna - 1);
            }

            // NE
            pos.definirValores(posicao.linha - 1, posicao.coluna + 1);
            while (tabuleiro.posicaoValida(pos) && podeMover(pos))
            {
                matriz[pos.linha, pos.coluna] = true;
                if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor)
                {
                    break;
                }
                pos.definirValores(pos.linha - 1, pos.coluna + 1);
            }

            // SE
            pos.definirValores(posicao.linha + 1, posicao.coluna + 1);
            while (tabuleiro.posicaoValida(pos) && podeMover(pos))
            {
                matriz[pos.linha, pos.coluna] = true;
                if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor)
                {
                    break;
                }
                pos.definirValores(pos.linha + 1, pos.coluna + 1);
            }

            // SO
            pos.definirValores(posicao.linha + 1, posicao.coluna - 1);
            while (tabuleiro.posicaoValida(pos) && podeMover(pos))
            {
                matriz[pos.linha, pos.coluna] = true;
                if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor)
                {
                    break;
                }
                pos.definirValores(pos.linha + 1, pos.coluna - 1);
            }
            return(matriz);
        }