Ejemplo n.º 1
0
        public void TesteGeraRei()
        {
            GeradorRei gerador = new GeradorRei();
            Rei        rei     = gerador.Gerar(rnd);

            Assert.IsNotNull(rei);
        }
Ejemplo n.º 2
0
 void Start()
 {
     player1 = new Player();
     player2 = new Player();
     king    = new Rei();
     pawn    = new Peao();
     InvokeMovement(4, 1);
 }
Ejemplo n.º 3
0
    public static void instanciarRei(char coluna, int linha, Cor cor, PartidaDeXadrez partida, GameObject prefab)
    {
        Vector3    pos  = posicaoNaCena(coluna, linha);
        GameObject rei  = Instantiate(prefab, pos, Quaternion.identity) as GameObject;
        Peca       peca = new Rei(partida.tab, cor, partida, rei);

        partida.colocarNovaPeca(coluna, linha, peca);
        rei.GetComponent <ReferenciaPeca>().peca = peca;
    }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            Tabuleiro tab = new Tabuleiro(8, 8);
            Bispo     bp  = new Bispo(tab, Cor.Preta);
            Torre     t1p = new Torre(tab, Cor.Preta);
            Torre     t2p = new Torre(tab, Cor.Preta);
            Rei       rp  = new Rei(tab, Cor.Preta);

            tab.colocarPeca(t1p, new Posicao(0, 0));
            tab.colocarPeca(t2p, new Posicao(1, 3));
            tab.colocarPeca(rp, new  Posicao(2, 4));
            Tela.imprimirTabuleiro(tab);

            Console.WriteLine();
        }
Ejemplo n.º 5
0
        public static Peca ObterPeca(CorPeca cor, NomePeca nome)
        {
            Peca pecaXadrez = null;

            if (nome == NomePeca.Torre)
            {
                pecaXadrez = new Torre((Cor)cor, nome.ToString());
            }
            else if (nome == NomePeca.Rei)
            {
                pecaXadrez = new Rei((Cor)cor, nome.ToString());
            }

            return(pecaXadrez);
        }
Ejemplo n.º 6
0
    protected bool PodeRoque(Torre torre, Rei rei, Tabuleiro tabuleiro, Movimento movrei, Movimento movtorre)
    {
        if (torre == null || rei == null || movrei == null || movtorre == null)
        {
            return(false);
        }
        // lembrando que as condições de roque são:



        // rei não pode ter se movimentado nenhuma vez
        // torre não pode ter se movimentado nenhuma vez
        if (!torre.primeiraJogada || !rei.primeiraJogada)
        {
            //	Debug.Log("NÃO É A PRIMEIRA JOGADA!");
            return(false);
        }


        // nao pode haver peças entre o rei e a torre
        int linha = rei.CasaAtual.PosY;
//		Debug.Log("linha rei:");
//		Debug.Log(linha);
        int torrepos = torre.PosX;
        int reipos   = rei.PosX;
//		Debug.Log("Coluna torre:");
//		Debug.Log(torrepos);
//		Debug.Log("Coluna rei:");
//		Debug.Log(reipos);
        int i, f;

        if (torrepos < reipos)
        {
            //	Debug.Log("a posição entre torre e rei caracteriza um roque maior(ou era para caracterizar)");
            i = torrepos;
            f = reipos;
        }
        else
        {
            //	Debug.Log("a posição entre torre e rei caracteriza um roque menor(ou era para caracterizar)");
            i = reipos;
            f = torrepos;
        }
        for (int p = i + 1; p < f; p++)
        {
            if (tabuleiro.GetCasa(p, linha).EstaOcupada())
            {
                //Debug.Log(p);
                //		Debug.Log("TEM CASAS OCUPADAS NO CAMINHO!");
                return(false);
            }
        }

        // rei nao pode estar em xeque
        if (rei.jDono.EmXeque(false))
        {
            //	Debug.Log("Rei está em xeque!");
            return(false);
        }

        // rei não pode passar nem terminar em uma casa que está sendo atacada por peça adversaria(rei entraria em xeque)
        //dependendo de quem se mova primeiro (torre ou rei ) antes de chamar a função CausaAutoXeque() sempre teremos um rei em xeque
        // mesmo se a torre o proteger(bloquear o ataque)
        // então o movimento da torre será "simulado"
        Peca movida;

        movida = movtorre.origem.PopPeca();
        // lembrando que se chegamos até aqui não há ninguem ocupando essa casa! (eu acho...), podemos colocar a peça sem receio
        movtorre.destino.ColocarPeca(movida);
        if (movrei.CausaAutoXeque())
        {
            //	Debug.Log("rei esta indo para casa sob ataque!(entraria em xeque)");
            // voltar para a torre para a poisção original
            movtorre.destino.PopPeca();
            movtorre.origem.ColocarPeca(movida);
            return(false);
        }
        // voltar para a torre para a poisção original
        movida = movtorre.destino.PopPeca();
        movtorre.origem.ColocarPeca(movida);



        return(true);
    }
Ejemplo n.º 7
0
    public override Movimento Roque(Tabuleiro tabuleiro, Torre torre = null)
    {
        //Rei rei = (Rei)this.jDono.conjuntoPecas[4];

        //OQUE ESTA COMENTADO FOI USADO PARA TESTES

        Rei rei = null;

        foreach (Peca p in this.jDono.conjuntoPecas)
        {
            if (p is Rei)
            {
                rei = (Rei)p;
                //Debug.Log("amem");
                break;
            }
        }
        if (rei.CasaAtual == null || this.CasaAtual == null)
        {
            return(null);
        }
        // criar "movimento" rei deve ser aproximar da torre andando 2 casas (tanto no roque pequeno quanto no grande)
        // a torre anda 3 casas em casos de roque grande (torre do lado esquerdo)
        // a torre anda 2 casas em casos de roque pequeno(torre do lado direito)
        // dependendo da torre escolhida o movimento pode mudar
        // note que esse metodõ poderia ser chamado pelo rei ou torre(O JOGADOR PODE ESCOLHER FAZER ROQUE CLICANDO NO REI ou TORRE)
        // como a torre que varia eu implementei que a chamada do metodo do rei direciona para o metodo da torre especifica

        Casa destinorei, destinotorre;
        //MUDANÇA POR CAUSA DO TABULEIRO
        //int linha = rei.CasaAtual.PosX;
        //int colunaTgrande = this.PosY+3, colunaTpequeno = this.PosY-2;
        //int colunaRgrande = rei.PosY-2, colunaRpequeno = rei.PosY+2;
        int linha = rei.CasaAtual.PosY;                                    // linha em que o rei está alinhado com a torre(que é na vdd a coluna da matriz)
        int colunaTgrande = this.PosX + 3, colunaTpequeno = this.PosX - 2; // coluna que o rei e torre devem se mover (que na vdd é a linha da matriz)
        int colunaRgrande = rei.PosX - 2, colunaRpequeno = rei.PosX + 2;

        //Debug.Log("select your roque");

/*
 *              Debug.Log("linha rei:");
 *              Debug.Log(linha);
 *              Debug.Log("Coluna rei:");
 *              Debug.Log(rei.CasaAtual.PosX);
 *              Debug.Log("Coluna torre:");
 *              Debug.Log(this.CasaAtual.PosX);
 */
        if (this.CasaAtual.PosX < rei.CasaAtual.PosX)        // roque grande
        {
            //	Debug.Log("Roque grande");

            /*
             *      Debug.Log("coluna Roque grande torre: ");
             *      Debug.Log(colunaTgrande);
             *      Debug.Log("coluna Roque grande rei: ");
             *      Debug.Log(colunaRgrande);
             */
            destinorei   = tabuleiro.GetCasa(colunaRgrande, linha);
            destinotorre = tabuleiro.GetCasa(colunaTgrande, linha);
        }
        else         // roque pequeno
        {
            //	Debug.Log("Roque pequeno");

            /*
             *      Debug.Log("coluna Roque pequeno torre: ");
             *      Debug.Log(colunaTpequeno);
             *      Debug.Log("coluna Roque pequeno rei: ");
             *      Debug.Log(colunaRpequeno);
             */
            destinorei   = tabuleiro.GetCasa(colunaRpequeno, linha);
            destinotorre = tabuleiro.GetCasa(colunaTpequeno, linha);
        }
        Movimento m  = new Movimento(origem: rei.CasaAtual, destino: destinorei);
        Movimento mt = new Movimento(origem: this.CasaAtual, destino: destinotorre);

        //Debug.Log(this.PodeRoque(this,rei,tabuleiro,m));
        if (this.PodeRoque(this, rei, tabuleiro, m, mt))
        {
            //Debug.Log("realizando roque...");
            m.movimentoExtra = mt;
            //this.RealizaMovimento(m);
            //this.RealizaMovimento(mt);
            return(m);
        }
        return(null);
    }