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)
3
respuestas

Pasen y vean mi codigo: Dibujando con el mouse (versión 3): simulando al programa Paint.

<canvas width="600" height="400"></canvas>

<script>
  /*Trasladamos la pizarra canvas de HTML a JavaScript., le damos color y creamos nuestro pincel.*/

  var pantalla = document.querySelector('canvas');
  var pincel = pantalla.getContext('2d');
  pincel.fillStyle = 'grey';
  pincel.fillRect(0, 0, 600, 400);

  /*Definimos inicialmente la variable boolana puedoDibujar como false para que nuestro programa
  no empiece a dibujar hasta que le demos la orden desde el mouse. (prueba con cambiarla a true y verás). 
  Esa variable será utilizada por la función dibujarCirculo para saber si debe o no diseñar.

  Declaramos la variable colorElegidoPaleta como blue por defecto.*/

  var puedoDibujar = false;
  var colorElegidoPaleta = "blue";

  /*La siguiente función nos diseñará un círculo. Para ello,tomará las coordenadas generadas por el
  puntero del mouse. Descartamos los bordes izquierdo y superior de la página para limitar que dibujemos
  solo en la pizarra.
  PRIMERA ACLARACION IMPORTANTE: verificamos que dichas coordenadas no estén comprendidas dentro
  del área de la paleta de colores con las cuatro condiciones dentro del if; si todas se cumplen "se ejecuta nada",
  es decir, que no dibujará en esa zona de la pizarra donde se encuentra la paleta. 

  En cambio, si el cursor del mouse esta en cualquier otra región de la pizarra se ejecutará el else if donde
  consultará la variable puedoDibujar (si el botón estaba siendo presionado será TRUE y continuará dibujando;
  o no, si es FALSE).SEGUNDA ACLARACION IMPORTANTE: como el círculo tiene un radio de 5, me tomé el
  atrevimiento de darle un margen de restricción de +5 en todo el borde de la paleta, porque por ejemplo si yo
  paso el mouse por la coordenada 151 (que ya sería fuera de la zona de la paleta), el círculo que tiene radio
  5 me pintará 4px dentro de dicha zona. (Prueba con poner 0, 150, 0 y 50 en ese orden y verás de lo que te hablo).
  El cículo tomará el color que tenga en ese momento la variable colorElegidoPaleta (que por defecto es blue).*/

  function dibujarCirculo(evento) {
    var x = evento.pageX - pantalla.offsetLeft;
    var y = evento.pageY - pantalla.offsetTop;

    if ((x >= -5) && (x < 155) && (y >= -5) && (y < 55)) {


    } else if (puedoDibujar) {

      pincel.fillStyle = colorElegidoPaleta;
      pincel.beginPath();
      pincel.arc(x, y, 5, 0, 2 * 3.14);
      pincel.fill();
    }
  }

  /*Las siguientes dos funciones, le cambian el valor booleano a la variable puedoDibujar para habilitar o no tal tarea.*/

  function habilitarDibujar() {

    puedoDibujar = true;
  }

  function deshabilitarDibujar() {

    puedoDibujar = false;
  }

  /*La próxima función crea cada cuadradito de nuestra paleta de colores. La misma recibe como
  parámetros las coordenadas x e y, y el color de cada uno. El ancho y alto son datos fijados en el ejercicio (50px para c/u).*/

  function crearCuadradosPaleta(x, y, tamanho, color) {

    pincel.fillStyle=color;
    pincel.fillRect(x, y, tamanho, tamanho);
  }

  /*Aquí, esta función llamará tres veces a la anterior para crear nuesta paleta con los tres colores
  establecidos en el desafío. También se establecen las coordenadas iniciales x e y en el punto 0,0 de nuestra pizarra.
  Como se desidió que la paleta esté puesta horizontalmente, las coordenas y son siempre la misma
  para mantener dicha horizontalidad de los cuadraditos. Mientras que las x iniciales se irán desplazando de a valores de 50px (tamanhoCuadrados) para quedar una al lado de la otra.*/

  function crearPaleta() {

    var x=0;
    var y=0;
    var tamahoCuadrados=50;

    crearCuadradosPaleta(x, y, tamahoCuadrados,"red");
    crearCuadradosPaleta(x + tamahoCuadrados, y, tamahoCuadrados, "green");
    crearCuadradosPaleta(x + tamahoCuadrados*2, y, tamahoCuadrados, "blue");
  }

  /*Nuestra última función se encargará de cambiar el color del pincel tomando eventos de puntero del mouse para determinar si sus coordenadas se encuentran dentro de la zona establecida para cada cuadradito de la paleta a través de los siguientes if, si uno de ellos se cumple cambia el color de la variable nombrada anteriormente.*/

  function cambiarColor(evento) {

    var xColorElegido = evento.pageX - pantalla.offsetLeft;
    var yColorElegido = evento.pageY - pantalla.offsetTop;

    if ((xColorElegido>=0) && (xColorElegido<50) && (yColorElegido >= 0) && (yColorElegido < 50)) {

      colorElegidoPaleta="red";
  }

  if ((xColorElegido >= 50) && (xColorElegido < 100) && (yColorElegido >= 0) && (yColorElegido < 50)) {

    colorElegidoPaleta = "green";
  }

  if ((xColorElegido >= 100) && (xColorElegido < 150) && (yColorElegido >= 0) && (yColorElegido < 50)) {

    colorElegidoPaleta = "blue";
  }
}
  //Ejecutamos la función para que nuestra paleta esté siempre visible.
  crearPaleta();
//CONTINUA ABAJO...
</script>
3 respuestas

Segunda parte: (CONTINUACION)

 <script>
 /*Los siguientes dos eventos del mouse (presionar en primer turno, y soltar en el segundo) ejecutará cada función recién descriptas.

  El tercer evento del mouse (movimiento sobre la pizarra) ejecutará la ya descripta función dibujarCirculo.Para terminar, capturamos el evento
  "hacer clic - boton izquierdo" del mouse para ejecutar el cambio de color si es que estamos dentro de la zona de la paleta.
  */

  pantalla.onmousedown = habilitarDibujar;

  pantalla.onmouseup = deshabilitarDibujar;

  pantalla.onmousemove = dibujarCirculo;

  pantalla.onclick = cambiarColor;

 /*PD: disculpen lo extenso de mis comentarios (si solo quieren ver el código final quitenlos) pero es que quise reflejar el paso a paso de cada
 parte del programa por ser el último proyecto del cursado de Lógica de programación. El mismo fue resuelto sin ver la solución del instructor,
 por lo que me deja muy satisfecho haber sabido utilizar todos los conocimientos adquiridos durante dicho cursado.

  No les miento, llegué a una etapa donde encontrar no dibujar en la zona de paleta me provocaba error tras error, lo dejé descansar un día
  mientras solo repasaba mis teorias de posibilidades aplicadas hasta ese entonces y las que me quedaban por probar. Cuando retomé otra vez
  el proyecto, me iluminé y di justo con lo que necesitaba. Por eso no desistan al primer intento, descansen la mente e insistan mas tarde, con la
  mente fresca y verán posibilidades nuevas y distintas. Y tal vez den con la que buscaban.... Sino ingresen al foro por ayuda. Y en el último de los
  casos mirar la solución también es valido. No se olviden que recién estamos empezando este largo camino que es la PROGRAMACION.

  Su servidor, Cristian.
  Un agradecimiento especial para el instructor Christian Velasco por su desempeño en las clases.*/

</script>
solución!

Hola Lista , espero que estés muy bien.

Felicitaciones por tu aprendizaje. Estamos priorizando el foro para postear dudas, así optimizamos el tiempo de respuesta para ustedes.

Para no dejar de compartir los códigos, actividades y ejercicios que realizas, creamos un canal en Discord (#compartatucodigo) donde puedes compartirlos, dar y sugerir mejoras con el resto de tus compañeros.

Un saludo.

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

Disculpen no lo sabia.... en realidad pense que solo era para los challenges.