JavaScript
const robotron = document.querySelector('.robotron')
const btnsControle = document.querySelectorAll('[data-operacao]') //somente botão
const estatisticas = document.querySelectorAll('[data-estatistica]') //estatísticas do robô
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
  }
}
const cores = {
  Amarelo: '#EFC821',
  Azul: '#9BCBD9',
  Branco: '#FAFEFE',
  Preto: '#1E0C10',
  Rosa: '#EA95BD',
  Vermelho: '#C15B48'
}
const corRobotron = (cor) => {
  let img = document.querySelector('[imgRobotron]')
  let pathImg = `../img/cores/Robotron 2000 - ${cor}.png`
  img.src = pathImg
  return img
}
function alterarCorRobotron() {
  let dialog = document.querySelector('[dialog]')
  let btnsDialog = dialog.querySelectorAll('[data-acao]')
  let select = dialog.querySelector('[select]')
  let mostraCores = dialog.querySelector('[mostra]')
  mostraCores.setAttribute('width', '50px')
  robotron.addEventListener('click', () => {
    for (const item in cores) {
      let opcao = document.createElement('option')
      opcao.setAttribute('value', item)
      opcao.style.fontSize = '16px'
      opcao.textContent = item
      select.appendChild(opcao)
    }
    select.addEventListener('mouseup', (e) => {
      let corDeFundo = e.target.value
      mostraCores.style.background = cores[corDeFundo]
    })
    dialog.showModal()
  })
  btnsDialog.forEach((button) => {
    button.addEventListener('click', (e) => {
      if (e.target.dataset.acao === 'confirmar') {
        corRobotron(select.value)
        select.innerHTML = ''
      }
    })
  })
}
alterarCorRobotron()
function alterarCorContador(peca) {
  const atributoFraco = '#EB4F3B'
  const atributoMedio = '#EBD43F'
  const atributoForte = '#3EEB55'
  let vlrPeca = parseInt(peca.value)
  let nivel = vlrPeca < 3 ? 'fraco' : vlrPeca < 7 ? 'medio' : 'forte'
  switch (nivel) {
    case 'fraco':
      peca.style.color = atributoFraco
      break
    case 'medio':
      peca.style.color = atributoMedio
      break
    case 'forte':
      peca.style.color = atributoForte
      break
  }
}
function manipularDados(operacao, controle) {
  let peca = controle.querySelector('[data-contador]')
  peca.value =
    operacao === '-'
      ? limitarValorMinimoPeca(peca)
        ? parseInt(peca.value) - 1
        : peca.value
      : limitarValorMaximoPeca(peca)
      ? parseInt(peca.value) + 1
      : peca.value
  alterarCorContador(peca)
}
function atualizarEstatistica(peca) {
  estatisticas.forEach((item) => {
    let vlrEstatistica = parseInt(item.textContent)
    item.textContent = vlrEstatistica + pecas[peca][item.dataset.estatistica]
  })
}
//limitar valores das peçasde 0 a 9
function limitarValorMinimoPeca(peca) {
  let vlrPeca = parseInt(peca.value)
  let minimo = vlrPeca === 0 ? false : true
  return minimo
}
function limitarValorMaximoPeca(peca) {
  let vlrPeca = parseInt(peca.value)
  let maximo = vlrPeca === 9 ? false : true
  return maximo
}
//fim limitar valor das peças
/**Manipulando vários elementos */
btnsControle.forEach((element) => {
  element.addEventListener('click', (evento) => {
    let operacao = evento.target.dataset.operacao //botão de operações
    let controle = evento.target.parentNode //todo o componente de controle da peça (input e botões)
    let peca = evento.target.dataset.peca
    manipularDados(operacao, controle) //parenteNode é o controle da peça toda (btns e input)
    atualizarEstatistica(peca)
  })
})
Ufa enfim acabou!