/// <summary> /// Este método é uma factory para a Abstract Factory. /// Deste modo, não existirá dependência do sistema com as /// Factories concretas. /// </summary> /// <param name="nacionalidade"></param> /// <returns></returns> public static AbstractFactoryExercito CriarFactoryExercito(Nacao nacionalidade) { AbstractFactoryExercito factory = null; if (nacionalidade == Nacao.Persia) { factory = null; } else if (Nacao.Egito == nacionalidade) { factory = new Factory.FactoryExercitoPersa(); } else if (Nacao.India == nacionalidade) { factory = new Factory.FactoryExercitoIndiano(); } return(factory); }
public void IniciarJogo(Exercito exercito1, Exercito exercito2) { Contract.Requires <ArgumentException>(exercito1.Nacao > 0); Contract.Requires <ArgumentException>(exercito2.Nacao > 0); for (int i = 0; i < this.Largura; i++) { for (int j = 0; j < this.Altura; j++) { //Ultima ou primeira fileira? Exercito exercito = (j == 0 || j == 1) ? exercito1 : exercito2; ElementoDoExercito elemento = null; Factory.AbstractFactoryExercito factory = Factory.AbstractFactoryExercito.CriarFactoryExercito(exercito.Nacao); if (j == 0 || j == this.Altura - 1) { //Cria arqueiro nas posições pares e Cavaleiros nas posições impáres. elemento = (i % 2 == 0)? (ElementoDoExercito)factory.CriarArqueiro(): (ElementoDoExercito)factory.CriarCavalaria(); } else if (j == 1 || j == this.Altura - 2) { //Cria guerreiros elemento = (ElementoDoExercito)factory.CriarGuerreiro(); } //Se o elemento tiver sido instanciado criará o elemento no tabuleiro. if (elemento != null) { exercito.Elementos.Add(elemento); elemento.posicao = new Posicao(i, j); elemento.Tabuleiro = this; } } } }