Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Usei Array!!!

Fala rapazeada, acho muito legal como é possivel chegar no mesmo resultado por diferentes caminhos. Vi o da galera aqui e achei bem interessante, e o meu é mais um diferente.

Pra começar eu defini que a variável cor seria var corAtual = ["red","green","blue"]; Usei um array para colocar todas as cores do exercício.

Depois criei a função defineCoordenadasXY para pegar os valores de x e y com o tela.onclick e ja definir pelo array qual cor seria selecionada dependendo do click do mouse.

function defineCoordenadasXY(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        if((x <= 50) && (y <= 50)) {

                desenhaCirculo(x, y, 5, corAtual[0]);
            } else

        if((x >= 50 && x <= 100) && (y >= 0 && y <= 50)) {

                desenhaCirculo(x, y, 5, corAtual[1]);
            } else

        if((x >= 100 && x <= 150) && (y >= 0 && y <= 50)) {

                desenhaCirculo(x, y, 5, corAtual[2]);
            }   
    }

E finalmente para definir a área onde não seria permitido desenhar eu coloquei um if dentro da função lidaComMovimentoDoMouse(evento)

function lidaComMovimentoDoMouse(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;


            if(desenha) {

                desenhaCirculo(x, y, 5, corAtual);
            }

            if((x <= 155) && (y <= 55)) {

                desenha = false;
            }

    }

Se vc perceber eu trabalhei com uma margem a mais de 5 em x e y para compensar o raio que poderia invadir os quadrados coloridos. Apesar que muitas vezes, mesmo assim ele invade. Bom é isso. exercicio bem legal. Segue ele completo:

<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <meta charset="UTF-8">
        <title>Exercicio Final</title>
        <link rel="icon" href="icon.png">
    </head>
<body>        

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

    <script>


    function desenhaQuadrado(x, y, tamanho, cor) {

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

    function desenhaCirculo(x, y, raio, cor) {

        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2 * 3.14);
        pincel.fill();

    }

    function desenhaPaletaDeCores() {

        desenhaQuadrado(xVermelho, yQuadrados, tamanhoQuadrados, 'red');
        desenhaQuadrado(xVerde, yQuadrados, tamanhoQuadrados, 'green');
        desenhaQuadrado(xAzul, yQuadrados, tamanhoQuadrados, 'blue');

    }

    function defineCoordenadasXY(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        if((x <= 50) && (y <= 50)) {

                desenhaCirculo(x, y, 5, corAtual[0]);
            } else

        if((x >= 50 && x <= 100) && (y >= 0 && y <= 50)) {

                desenhaCirculo(x, y, 5, corAtual[1]);
            } else

        if((x >= 100 && x <= 150) && (y >= 0 && y <= 50)) {

                desenhaCirculo(x, y, 5, corAtual[2]);
            }   
    }


    function lidaComMovimentoDoMouse(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;


            if(desenha) {

                desenhaCirculo(x, y, 5, corAtual);
            }

            if((x <= 155) && (y <= 55)) {

                desenha = false;
            }

    }

    function habilitaDesenhar() {

        desenha = true;
    }

    function desabilitaDesenhar() {

        desenha = false;
    }


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

    var desenha = false;
    var corAtual = ["red","green","blue"];
    var xVermelho = 0;
    var xVerde  = 50;
    var xAzul = 100;
    var yQuadrados = 0;
    var tamanhoQuadrados = 50;

    desenhaPaletaDeCores(); // mostra os quadrados de seleção de cores

    tela.onclick = defineCoordenadasXY;

    tela.onmousemove = lidaComMovimentoDoMouse;

    tela.onmousedown = habilitaDesenhar;

    tela.onmouseup = desabilitaDesenhar;


    </script>    
</body>
</html>

Grande abraço a todos!

2 respostas
solução!

Muito bem, Caue! É isso aí! Nessa cangaço da programação muitas vezes os problemas que aparecem na nossa frente admitem mais de uma solução!

Contudo, para exercítar o conteúdo aprendido, gostaria de te propor um desafio! Vc seria capaz de resolver essa questão que vc citou no final sobre o desenho do círculo em alguns casos invadir lugares onde não era pra invadir?

Se precisar de alguma ajuda é só falar!

Grande abraço e bons estudos, meu aluno!

Fala Caue!

Parabéns pela implementação! É seguindo esse caminho de desafios e novas soluções que chegaremos lá!

Não se esqueça de compartilhar suas descobertas conosco!

Ah, e também pode contar com a gente para te ajudar com as suas dúvidas!

Vamos Juntos.

Abraços meu amigo.