示例#1
0
        public EnumeradorDeResultadoDaMovimentacao CalcularPenalidade(EnumeradorDeMovimentoDoIndividuo movimentoDoPonto, EnumeradorDeLocalizacaoDoIndividuo localizacaoAtual)
        {
            var localizacoesInvalidas = movimentosInvalidos[movimentoDoPonto];

            if (localizacoesInvalidas.TryGetValue(localizacaoAtual, out EnumeradorDeResultadoDaMovimentacao resultado))
            {
                return(resultado);
            }
            else
            {
                return(EnumeradorDeResultadoDaMovimentacao.Valido);
            }
        }
示例#2
0
        public async Task <int> Mover(Individuo individuo, EnumeradorDeMovimentoDoIndividuo movimento)
        {
            var penalidade = _servicoDePenalidade.CalcularPenalidade(movimento, individuo.Localizacao);

            if (penalidade == EnumeradorDeResultadoDaMovimentacao.ForaDoLabirinto)
            {
                return(200);
            }
            if (penalidade == EnumeradorDeResultadoDaMovimentacao.AtravessaParede)
            {
                return(100);
            }

            int novoLocal;

            if (movimento == EnumeradorDeMovimentoDoIndividuo.N)
            {
                novoLocal = (int)individuo.Localizacao - 1;
            }
            else if (movimento == EnumeradorDeMovimentoDoIndividuo.S)
            {
                novoLocal = (int)individuo.Localizacao + 1;
            }
            else if (movimento == EnumeradorDeMovimentoDoIndividuo.L)
            {
                novoLocal = (int)individuo.Localizacao + 4;
            }
            else
            {
                novoLocal = (int)individuo.Localizacao - 4;
            }

            individuo.Localizacao = (EnumeradorDeLocalizacaoDoIndividuo)novoLocal;

            if (_ponto != null)
            {
                await _ponto.DefinirLocalizacao(individuo);
            }

            return(0);
        }