public override void Executar() { if (EstaVivo) { base.Executar(); if (Estagio == EstagioMosquito.Adulto) { List<Direcoes> desejos = new List<Direcoes>(); //int tamanho = TAMANHO_CAMPO_DE_VISAO * 2 + 1; Celula[,] campoVisao = this.GetCampoVisao(); VerificaSePodePicar(campoVisao); if (!jaPicou) { desejos = VerificaSePessoaNoCampoDeVisao(campoVisao); if (desejos.Count == 0) desejos.AddRange(MovimentosPossiveis(this.Posicao)); } else if (!Acasalou) { desejos = VerificaSeMachoNoCampoDeVisao(campoVisao); if (Posicao.Agentes.Find(ag => ag is MosquitoMacho) == null) { desejos.AddRange(MovimentosPossiveis(this.Posicao)); } } else if (Acasalou && !(Posicao is Foco) && !depositouOvos) { desejos = VerificaFocoNoCampoDeVisao(campoVisao); if (desejos.Count == 0) desejos.AddRange(MovimentosPossiveis(this.Posicao)); } else if (Acasalou && (Posicao is Foco) && !depositouOvos) { Mosquito filhote; int sexo; for (int i = 0; i < 10; i++) { sexo = rd.Next(0, 100); if (sexo < 50) { filhote = new MosquitoMacho(this.Ambiente, this.Posicao) { Estagio = EstagioMosquito.Ovo, TipoDengue = this.TipoDengue }; } else { filhote = new MosquitoFemea(this.Ambiente, this.Posicao) { Estagio = EstagioMosquito.Ovo, TipoDengue = this.TipoDengue }; } Ambiente.AdicionarAgente(filhote, Posicao); } depositouOvos = true; } else if (depositouOvos && ciclosEspera < 3) { ciclosEspera++; desejos.AddRange(MovimentosPossiveis(this.Posicao)); } else if (depositouOvos && ciclosEspera >= 3) { jaPicou = false; depositouOvos = false; Acasalou = true; desejos.AddRange(MovimentosPossiveis(this.Posicao)); } //Se nao tiver nenhuma pessoa perto, movimenta aleatoriamente if (desejos.Count != 0) { Direcoes posicaoEscolhida = desejos[rd.Next(0, desejos.Count)]; Mover(posicaoEscolhida); } } } }
private void AcasalarCom(MosquitoFemea vitima) { if (vitima.QuerAcasalar()) { //Se nao esta contaminado, ficara com o tipo de dengue da femea if (!this.TipoDengue.HasValue && vitima.TipoDengue.HasValue) { this.TipoDengue = vitima.TipoDengue.Value; } vitima.AcasalarCom(this); acasalou = true; } }