3
respostas

Errode lógica no botão -

Tem um problema de lógica no cálculo das estatisticas do robo. O problema é que quando subtraimos 1 peça o valor também é somado em vez de subtraído. Exemplo ao clicar no braço +1 é somado corretamente, mas se retornamos para 0 braços o valor é somado novamente em vez de regredir.

3 respostas

meu esta assim tbm

Corrigi este erro da seguinte forma:

const controles = document.querySelectorAll('[data-controle]');
const estatisticas = document.querySelectorAll('[data-estatistica]')
const pecas = {
    "bracos": {
        "forca": 29,
        "poder": 35,
        "energia": -21,
        "velocidade": -5
    },

    "blindagem": {
        "forca": 41,
        "poder": 20,
        "energia": 0,
        "velocidade": -20
    },
    "nucleos":{
        "forca": 0,
        "poder": 7,
        "energia": 48,
        "velocidade": -24
    },
    "pernas":{
        "forca": 27,
        "poder": 21,
        "energia": -32,
        "velocidade": 42
    },
    "foguetes":{
        "forca": 0,
        "poder": 28,
        "energia": 0,
        "velocidade": -2
    }
}

controles.forEach( (elemento) => {
    elemento.addEventListener('click', (evento) => {
        manipulaDados(evento.target.dataset.controle, evento.target.parentNode, evento.target.dataset.peca)
    })
})

function manipulaDados(operacao, controle, pecaStatus) {
    const peca = controle.querySelector('[data-contador]')
    if(operacao === '+') {
        peca.value = String(parseInt(peca.value) + 1).padStart(2, '0');
        estatisticas.forEach( (elemento) => {
            elemento.textContent = parseInt(elemento.textContent) + pecas[pecaStatus][elemento.dataset.estatistica]
        })
    } else {
        if(parseInt(peca.value)) {
            peca.value = String(parseInt(peca.value) - 1).padStart(2, '0');
            estatisticas.forEach( (elemento) => {
            elemento.textContent = parseInt(elemento.textContent) - pecas[pecaStatus][elemento.dataset.estatistica]
            })
        }
    }
}

Minha solução também ficou próxima da sua, Lucas. Não tinha usado o padStart por que não conhecia, mas após entender seu uso aproveitei para usar também.

Na minha solução adicionei um tratamento para que os valores do contador não fiquem negativo.

controle.forEach((element) => {
    element.addEventListener("click", (event) => {
        manipulaDados(event.target.dataset.controle, event.target.parentNode, event.target.dataset.pecas);
    })
})

function manipulaDados(operacao, controle, peca) {
    const contador = controle.querySelector('[data-contador]');
    if (operacao === '-' && contador.value > 0) {
        contador.value = String(parseInt(contador.value) - 1).padStart(2, '0');
        estatistica.forEach((elemento) => {
            elemento.textContent = parseInt(elemento.textContent) - pecas[peca][elemento.dataset.estatistica]
        })
    } else if(operacao === '+' && contador.value >= 0) {
        contador.value = String(parseInt(contador.value) + 1).padStart(2, '0');
        estatistica.forEach((elemento) => {
            elemento.textContent = parseInt(elemento.textContent) + pecas[peca][elemento.dataset.estatistica]
        })
    }else{
        console.log("Não é permitido que o valor seja negativo");
    }
}