Пример #1
0
    //[TestCase(false,-1,-1)]  // teste nao valido
    //[TestCase(false,-1,-1), ExpectedException(typeof(ArgumentOutOfRangeException))] // nao existe na versao atual do NUnit
    public void TesteOcupado(bool p, int x, int y)
    {
        Casa      c   = null;
        Jogador   j1  = null;
        Peca      pec = null;
        Tabuleiro t   = new Tabuleiro();

        try
        {
            c = new Casa(x, y, t);
            if (p)
            {
                j1  = new Jogador('b', true);
                pec = new Peca(j1);
                //c.PecaAtual = pec;
                c.ColocarPeca(pec);
                Assert.AreEqual(p, c.EstaOcupada());
            }
            else
            {
                Assert.AreEqual(p, c.EstaOcupada());
            }
        }catch (ArgumentOutOfRangeException e)
        {
            //Log.Error("Garantia de tratamento",e);
            //  Console.WriteLine("Garantia de Tratamento");
            //TestContext.Write("Garantia de Tratamento");
            // Debug.WriteLine("Garantia de Tratamento");
            if (e.Source != null)
            {
                Console.WriteLine("Garantia de catch: {0}", e.Source);
            }
            throw;
            //  Assert.Throws<ArgumentOutOfRangeException>(delegate()
            //   {
            //       Console.WriteLine("Garantia de catch: {0}", e.Source);
            //       throw ;
            //    });
        }
    }
Пример #2
0
    // Propaga um movimento na direção dada.
    public static List <Movimento> SeguindoDirecao(Casa origem, int x, int y, int passos = int.MaxValue, Tipo tipo = Tipo.Normal, bool bloqueavel = true, bool verificaXeque = true)
    {
        var possibilidades = new List <Movimento>();
        //Debug.Log(origem.PosX + x);

        Tabuleiro tabuleiro = origem.Tabuleiro;
        Casa      seguinte  = tabuleiro.GetCasa(origem.PosX + x, origem.PosY + y);

        while (seguinte != null && passos > 0)
        {
            Movimento novo = new Movimento(origem: origem, destino: seguinte, tipo: tipo);

            if (seguinte.EstaOcupada())
            {
                if (tipo != Tipo.SemCaptura)
                {
                    if (origem.PecaAtual.PodeCapturar(seguinte.PecaAtual))
                    {
                        if (verificaXeque)
                        {
                            if (novo.CausaAutoXeque() == false)
                            {
                                novo.pecaCapturada = seguinte.PecaAtual;
                                possibilidades.Add(novo);
                            }
                        }
                        else
                        {
                            novo.pecaCapturada = seguinte.PecaAtual;
                            possibilidades.Add(novo);
                        }
                    }
                }

                // Se for "bloqueável", o movimento não permite atravessar outras peças. (O cavalo "pula", não "atravessa", depois explico melhor)
                if (bloqueavel)
                {
                    return(possibilidades);
                }
            }
            else
            {
                if (tipo != Tipo.SomenteCaptura)
                {
                    if (verificaXeque)
                    {
                        if (novo.CausaAutoXeque() == false)
                        {
                            possibilidades.Add(novo);
                        }
                    }
                    else
                    {
                        possibilidades.Add(novo);
                    }
                }
            }

            seguinte = tabuleiro.GetCasa(seguinte.PosX + x, seguinte.PosY + y);
            passos--;
        }

        return(possibilidades);
    }