示例#1
0
        public override bool movimentospossiveis(tabuleiro tab, Posicao origem, Posicao destino)
        {
            if (origem.Linha == destino.Linha || origem.Coluna == destino.Coluna)
            {
                return(false);
            }

            Posicao pos = new Posicao(origem.Linha, origem.Coluna);

            while (pos.Linha != destino.Linha && pos.Coluna != destino.Coluna)
            {
                if (destino.Linha > origem.Linha)
                {
                    pos.Linha++;
                }
                else
                {
                    pos.Linha--;
                }

                if (destino.Coluna > origem.Coluna)
                {
                    pos.Coluna++;
                }
                else
                {
                    pos.Coluna--;
                }
                if (!tab.PosicaoValida(pos))
                {
                    return(false);
                }

                if (tab.peca(pos.Linha, pos.Coluna) == null)
                {
                    if (pos.Linha == destino.Linha &&
                        pos.Coluna == destino.Coluna)
                    {
                        return(true);
                    }
                    else
                    {
                        continue;
                    }
                }

                if (tab.peca(pos.Linha, pos.Coluna).cor !=
                    tab.peca(origem.Linha, origem.Coluna).cor&&
                    pos.Linha == destino.Linha &&
                    pos.Coluna == destino.Coluna)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(false);
        }
示例#2
0
文件: Rei.cs 项目: aurinolins/xadrez
        public override bool movimentospossiveis(tabuleiro tab, Posicao origem, Posicao destino)
        {
            Posicao pos = new Posicao(tab.linhas, tab.colunas);

            /* Testar Rock Pequeno */

            if (!partida.emcheque &&
                destino.Linha == origem.Linha && destino.Coluna == origem.Coluna + 2 &&
                tab.pecas[origem.Linha, origem.Coluna].qteMovimentos == 0 &&
                tab.pecas[origem.Linha, origem.Coluna + 3] is Torre &&
                tab.pecas[origem.Linha, origem.Coluna + 3].qteMovimentos == 0 &&
                tab.pecas[origem.Linha, origem.Coluna + 1] == null &&
                tab.pecas[origem.Linha, origem.Coluna + 2] == null)
            {
                return(true);
            }

            /* Testar Roque Grande */


            if (!partida.emcheque &&
                destino.Linha == origem.Linha && destino.Coluna == origem.Coluna - 2 &&
                tab.pecas[origem.Linha, origem.Coluna].qteMovimentos == 0 &&
                tab.pecas[origem.Linha, origem.Coluna - 4] is Torre &&
                tab.pecas[origem.Linha, origem.Coluna - 4].qteMovimentos == 0 &&
                tab.pecas[origem.Linha, origem.Coluna - 1] == null &&
                tab.pecas[origem.Linha, origem.Coluna - 2] == null &&
                tab.pecas[origem.Linha, origem.Coluna - 3] == null)
            {
                return(true);
            }

            /* Logica Geral */

            for (int i = origem.Linha - 1; i < origem.Linha + 2; i++)
            {
                for (int j = origem.Coluna - 1; j < origem.Coluna + 2; j++)
                {
                    pos.Linha  = i;
                    pos.Coluna = j;
                    if (!tab.PosicaoValida(pos))
                    {
                        continue;
                    }
                    if (i == destino.Linha && j == destino.Coluna)
                    {
                        if (tab.pecas[i, j] == null || tab.pecas[i, j].cor !=
                            tab.pecas[origem.Linha, origem.Coluna].cor)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
            }
            return(false);
        }
示例#3
0
        public override bool movimentospossiveis(tabuleiro tab, Posicao origem, Posicao destino)
        {
            if (origem.Linha != destino.Linha && origem.Coluna != destino.Coluna)
            {
                return(false);
            }

            Posicao pos = new Posicao(tab.linhas, tab.colunas);


            if (origem.Linha == destino.Linha)
            {
                /*
                 * Pesquisa Horizontal
                 */
                pos.Linha  = origem.Linha;
                pos.Coluna = origem.Coluna;
                while (pos.Coluna != destino.Coluna)
                {
                    if (destino.Coluna > origem.Coluna)
                    {
                        pos.Coluna = pos.Coluna + 1;
                    }
                    else
                    {
                        pos.Coluna = pos.Coluna - 1;
                    }
                    if (!tab.PosicaoValida(pos))
                    {
                        continue;
                    }

                    if (tab.peca(pos.Linha, pos.Coluna) == null)
                    {
                        continue;
                    }
                    if (tab.peca(pos.Linha, pos.Coluna).cor !=
                        tab.peca(origem.Linha, origem.Coluna).cor&&
                        pos.Coluna == destino.Coluna)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                return(true);
            }

            /*
             *  Pesquisa Vertical
             */
            pos.Linha  = origem.Linha;
            pos.Coluna = origem.Coluna;
            while (pos.Linha != destino.Linha)
            {
                if (destino.Linha > origem.Linha)
                {
                    pos.Linha = pos.Linha + 1;
                }
                else
                {
                    pos.Linha = pos.Linha - 1;
                }
                if (!tab.PosicaoValida(pos))
                {
                    continue;
                }

                if (tab.peca(pos.Linha, pos.Coluna) == null)
                {
                    continue;
                }
                if (tab.peca(pos.Linha, pos.Coluna).cor !=
                    tab.peca(origem.Linha, origem.Coluna).cor&&
                    pos.Linha == destino.Linha)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }