O código está muito bom, e na minha opinião com alguns poucos pontos de atenção para melhorar a qualidade do código.
seguindo as regras de refatoração, eu começaria melhorando o nome das variáveis. Por exemplo:
countAcerto
ficaria melhor se fosse:
placar
a instrunção de avaliação abaixo:
if(((x > alvoX - raio)&&(x < alvoX + raio)) && ((y > alvoY - raio)&&(y < alvoY + raio))){
countAcerto = countAcerto + 1;
score.innerHTML = 'Score: ' + countAcerto;
}
ficaria melhor se fosse aplicado um Extract Method:
var acertouAlvo = function (x,y) {
return ((x > alvoX - raio)&&(x < alvoX + raio)) && ((y > alvoY - raio)&&(y < alvoY + raio));
}
ao invés de fazer:
countAcerto = countAcerto + 1;
opte por:
countAcerto++;
a função abaixo está com nome que é considerado um nome ruim, pois não refere-se exatamente ao que a função faz, além do que ela faz mais do que apenas desenhar. E se ela só desenhasse, o que ela está desenhando?
var desenha = function();
renomeie-a para:
var iniciaJogo = function();
o mesmo vale para a função abaixo:
var circulo = function(x,y,raio,cor){
c.beginPath();
c.fillStyle = cor;
c.arc(x,y,raio,0,2*Math.PI);
c.fill();
};
o que é a variável c? só vou saber se ler o código, então é nome ruim para a variável, e também o nome melhor pra função seria desenhaCirculo;
Outro ponto importante. Elimine os números mágicos!
Por mais óbvio que pareça, alguém irá se perguntar porque ele está lá!
alvoX = sorteia(600);
alvoY = sorteia(400);
var limpaTela = function(){
context.clearRect(0,0,600,400);
}
substitua-os por constantes:
const LARGURA_TELA = 600;
const ALTURA_TELA = 400;
var iniciaJogo = function() {
limpaTela();
alvoX = sorteia(LARGURA_TELA);
alvoY = sorteia(ALTURA_TELA);
desenhaAlvo(alvoX, alvoY);
};
var limpaTela = function(){
context.clearRect(0,0,LARGURA_TELA,ALTURA_TELA);
}
Ao eliminar os números mágicos, você até resolveu o problema da duplicação de código. Pois não precisará mais mudar o tamanho da tela em 2 lugares, correndo risco de esquecer.
E ai? O que achou dessas mudanças?