Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

Paint [Agregue mas colores para compartir una solución diferente ]

Esta es mi solución, agregue mas colores para ver una diferencia como solución mas optimizada. Espero se de gran aporte para el foro y lo puedan analizar para ver distintas maneras de llegar al resultado. Tal vez se puede mejorar mas pero quiza sea mas adelante.

<meta charset="UTF-8">
<canvas width="600" height="400"></canvas>
<br>
<button>Limpiar</button>
<script>
    var pantalla = document.querySelector("canvas");
    var pincel = pantalla.getContext("2d");
    var button = document.querySelector("button");
    pincel.fillStyle = "lightgrey";
    pincel.fillRect(0, 0, 600, 400);
    var colores = ["blue", "green", "red", "yellow", "white", "black", "brown", "grey"];
    var x = 0;
    var y = 0;
    var colorSeleccionado = 0;//Determina el indice del color a dibujar
    var seleccionPaleta = false;//Determina si el cursos esta en la paleta de colores
    var puedoDibujar = false;//Accion para dibujar
    function Limpiar() {
        pincel.clearRect(0, 0, 600, 400);
        pincel.fillStyle = "lightgrey";
        pincel.fillRect(0, 0, 600, 400);
        colorSeleccionado=0;
        DibujarCuadrado();
    }
    function DibujarCuadrado() {
        contador = 0;
        //Recorro el for al reves para que se muestre como en el ejemplo
        //Igual dejando el azul en primer posicion que es [0] en el array de colores que por default 
        for (var i = colores.length - 1; i >= 0; i--) {
            pincel.fillStyle = colores[i];
            pincel.fillRect(contador, 0, 50, 50);//Pinta cada cuadro con sus respectivo color
            contador = contador + 50;
        }
    }
    function DibujarCirculo(x, y, color) {
        pincel.fillStyle = color;
        pincel.beginPath();
        pincel.arc(x, y, 5, 0, 2 * Math.PI);
        pincel.fill();
    }
    //Funcion Paleta() determino el maximo de area que tendran los colores, para poder delimitar
    //Se retorna un true si el cursor esta en la paleta de lo contrario false;
    function Paleta(coordenadaX, coordenadaY) {
        var maximoPaleta = 50 * colores.length;
        return (coordenadaX >= 0 && coordenadaX <= maximoPaleta) && (coordenadaY >= 0 && coordenadaY <= 54);
    }
    //Funcion elegirColor() y este Determina el area de cada cuadrado de color asi se podra elegir el color cuando haga click con el mouse
    function elegirColor(evento) {

        coorx = evento.pageX - pantalla.offsetLeft;
        coory = evento.pageY - pantalla.offsetTop;
        var maximoPaleta = 50 * colores.length;
        if (Paleta(coorx, coory)) {
            var cuadrado = 50;
            //Si las coordenadas coinciden con el click del cursos, se elige el color
            //Cada iteracion es un cuadro del color
            for (var i = colores.length - 1; i >= 0; i--) {
                if (coorx >= cuadrado - 50 && coorx <= cuadrado) {
                    colorSeleccionado = i;
                }
                cuadrado = cuadrado + 50;
            }
        }
    }
    //Aqui se obtiene en que coordenadas donde esta el cursor
    function Pincel(evento) {
        x = evento.pageX - pantalla.offsetLeft;
        y = evento.pageY - pantalla.offsetTop;
        seleccionPaleta = Paleta(x, y);
        //console.log("(" + x + "," + y + ") Color: " + colores[colorSeleccionado] + " Seleccion Paleta: " + seleccionPaleta);
        //Si se [puedoDibujar==true] y la paleta no esta seleccionda [seleccionPaleta=false] ( !false=true) se podra dibujar
        if (puedoDibujar && !seleccionPaleta) {
            DibujarCirculo(x, y, colores[colorSeleccionado]);
        }
    }
    function habilitarDibujar() {

        puedoDibujar = true;
    }
    function deshabilitarDibujar() {

        puedoDibujar = false;
    }
    DibujarCuadrado();
    button.onclick=Limpiar;
    pantalla.onclick = elegirColor;
    pantalla.onmousemove = Pincel;
    pantalla.onmousedown = habilitarDibujar;
    pantalla.onmouseup = deshabilitarDibujar;
</script>
1 respuesta
solución!

Hola Alumno,

Gracias por tu participación en el foro. Sin embargo, no hace falta que publiques la respuesta a tu ejercicio aquí. Puedes hacerlo en Discord, donde hay un canal específico para eso. El foro es más bien para plantear tus dudas y ayudar a otros compañeros.

¡Deseamos que puedas cumplir con todos tus objetivos y tener éxito en tus estudios, saludos!

Si este post te ayudó, por favor marca como solucionado ✓. ¡Continúa con tus estudios!