Existe algo con el código brindado que no me dejaba tranquilo, es que cuando se usaba la función If para verificar si el clic estaba dentro del círculo pequeño del blanco, las condiciones eran para comparar un recuadro: If((x<xAleatorio+radio)&& (x>xAleatorio-radio)&&( y<yAleatorio+radio)&& (y>yAleatorio-radio)){ Alert(“Tiro certero”) }
Haciendo un contra ejemplo, Suponiendo que:
radio=10; xAleatorio=10; yAleatori=10; y supongamos que el clic lo hago en el punto (1,1)=(x,y)
Entonces (x,y) sí cumple las 4 condiciones del if y mensaje seria que acertamos, pero en realidad no se encuentra en el círculo, dado que se debe cumplir que la distancia entre (x,y) al centro del circulo (xAleatorio,yAleatorio) sea <= al radio =10. La distancia entre (1,1) y (10,10) = raíz( ((1-10)^2) + ((1-10)^2) ) = raíz ( 81+81) = 12.73 Que es mayor al radio, con lo cual no se encuentra dentro del círculo.
Para este caso se debe usar la formula de distancia de dos puntos y verificar que el radio siempre sea mayor o igual a la distancia entre el clic y el centro del círculo. Brindo la ultima parte del código, utilizando este razonamiento.
function disparo(evento){
var x = evento.pageX - pantalla.offsetLeft;
var y = evento.pageY - pantalla.offsetTop;
if (radio>=Math.sqrt(((x-xAleatorio)*(x-xAleatorio))+((y-yAleatorio)*(y-yAleatorio)))){
alert("Tiro certero");
}
}
pantalla.onclick = disparo;