public EnumeradorDeResultadoDaMovimentacao CalcularPenalidade(EnumeradorDeMovimentoDoIndividuo movimentoDoPonto, EnumeradorDeLocalizacaoDoIndividuo localizacaoAtual) { var localizacoesInvalidas = movimentosInvalidos[movimentoDoPonto]; if (localizacoesInvalidas.TryGetValue(localizacaoAtual, out EnumeradorDeResultadoDaMovimentacao resultado)) { return(resultado); } else { return(EnumeradorDeResultadoDaMovimentacao.Valido); } }
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); }