/// <summary> /// Cria uma entidade em um lugar livre no ambiente. /// </summary> /// <param name="entidadeTipo">Tipo de entidade para tentar criar.</param> /// <returns>Entidade criada.</returns> private Entidade AlocaEntidadeLugarSeguro(Entidades entidadeTipo) { List <Coordenadas> livres = Ambiente.GetCoordenadasLivres(); livres.Shuffle(); foreach (Coordenadas coordenadas in livres) { if (entidadeTipo == Entidades.LIXEIRA_ORGANICO || entidadeTipo == Entidades.LIXEIRA_SECO) { if (Geral.EstaLivreArredores(coordenadas)) { Ambiente.SetEntidade(coordenadas, new Lixeira(coordenadas, (entidadeTipo == Entidades.LIXEIRA_ORGANICO ? TipoLixo.ORGANICO : TipoLixo.SECO))); return(Ambiente.GetEntidade(coordenadas)); } } else if (!Geral.EstaTrancado(coordenadas)) { if (entidadeTipo == Entidades.AGENTE) { Ambiente.SetEntidade(coordenadas, new Agente(coordenadas, Ambiente.Agentes.Count + 1)); return(Ambiente.GetEntidade(coordenadas)); } else if (entidadeTipo == Entidades.LIXO_ORGANICO || entidadeTipo == Entidades.LIXO_SECO) { Ambiente.SetEntidade(coordenadas, new Lixo(coordenadas, (entidadeTipo == Entidades.LIXO_ORGANICO ? TipoLixo.ORGANICO : TipoLixo.SECO))); return(Ambiente.GetEntidade(coordenadas)); } } } return(null); }
/// <summary> /// Vê o que teve de mudança e limpa da tela entidades que não estão mais naquela posição do ambiente. /// </summary> private void LimpaEntidades() { List <EntidadeUC> entidadesUC = GetEntidades(e => e.Tipo != Entidades.NENHUM); foreach (EntidadeUC entidadeUC in entidadesUC) { Entidade entidade = Ambiente.GetEntidade(entidadeUC.Coordenadas); if (entidade == null) { entidadeUC.Tipo = Entidades.NENHUM; } } }
/// <summary> /// Verifica se o lugar é possível de caminhar, mesmo que com lixo no chão. /// </summary> /// <param name="coordenadas">Posição do ambiente a ser consultada.</param> /// <returns>Se pode ou não caminhar por ali.</returns> public static bool PodeCaminhar(Coordenadas coordenadas) { if (!EstaLimite(coordenadas)) { return(false); } Entidade entidade = Ambiente.GetEntidade(coordenadas); if (!(entidade is Agente) && !(entidade is Lixeira) && !(entidade is Multiplo)) { return(true); } return(false); }
/// <summary> /// Verifica se a coordenada está livre tanto no lugar pesquisado. /// </summary> /// <param name="coordenadas">Posição do ambiente a ser consultada.</param> /// <returns>Se está ou não livre.</returns> public static bool EstaLivre(Coordenadas coordenadas) { if (!EstaLimite(coordenadas)) { return(false); } Entidade entidade = Ambiente.GetEntidade(coordenadas); if (!(entidade is Agente) && !(entidade is Lixo) && !(entidade is Lixeira)) { return(true); } return(false); }
/// <summary> /// Pega os objetos instanciados dentro da matriz e exibe na posição respectiva da interface. /// </summary> private void AtualizaEntidades() { LimpaEntidades(); for (int y = 0; y < Ambiente.Linhas; y++) { for (int x = 0; x < Ambiente.Colunas; x++) { Entidade entidade = Ambiente.GetEntidade(new Coordenadas { X = x, Y = y }); AtualizaEntidade(entidade, new Coordenadas { X = x, Y = y }); } } }