//[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 ; // }); } }
// 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); }