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

Desenhe obras de arte - Minha solução

Boa tarde Devs! Compartilho com vocês minha solução.

<!DOCTYPE html>
<html lang="pt_BR">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        div {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            border: 3px double brown;
            padding: 25px;
            box-shadow: 0 0 20px rgba(0, 0, 0, 0.6);
        }

        div h1,
        h3 {
            margin-bottom: 5px;
            color: brown;
        }

        canvas {
            background-color: lightgray;
        }
    </style>

    <title>Lógica de Programação II</title>
</head>

<body>
    <div>
        <h1>05 - Nosso primeiro jogo</h1>
        <h3>08 - Desenhe obras de arte</h3>

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

    </div>

    <script>

        // Declaração das constantes.
        const canvas = document.querySelector("canvas");
        const context = canvas.getContext("2d");

        // Declaração das variáveis.
        var draw = false;
        var currentColor = "blue";
        var xRed = 0;
        var xGreen = 50;
        var xBlue = 100;
        var ySquares = 0;
        var sizeSquares = 50;

        // Função responsável por desenhar um quadrado na tela.
        function drawSquare(x, y, sideSize, color) {
            context.fillStyle = color;
            context.fillRect(x, y, sideSize, sideSize)
            context.fill();
        }

        // Função responsável por desenhar um círculo na tela.
        function drawCircle(x, y, radius, color) {
            context.fillStyle = color;
            context.beginPath();
            context.arc(x, y, radius, 0, 2 * Math.PI);
            context.fill();
        }

        // Função responsável por desenhar a paleta de cores na tela.
        function drawColorPalette() {
            drawSquare(xRed, ySquares, sizeSquares, 'red');
            drawSquare(xGreen, ySquares, sizeSquares, 'green');
            drawSquare(xBlue, ySquares, sizeSquares, 'blue');
        }

        // Função responsável por devolver os valores das coordenadas do canvas.
        function coordinates(e) {
            return [e.pageX - canvas.offsetLeft, e.pageY - canvas.offsetTop];
        }

        // Função responsável por capturar os movimentos do mouse.
        function dealWithMouseMovement(e) {
            let [x, y] = coordinates(e);

            if (draw && y > sizeSquares + 5) {
                drawCircle(x, y, 5, currentColor);
            }

            if (y <= sizeSquares) {
                if (x >= xRed && x <= sizeSquares) {
                    currentColor = "red";
                } else if (x >= xGreen && x <= xGreen + sizeSquares) {
                    currentColor = "green";
                } else if (x >= xBlue && x <= xBlue + sizeSquares) {
                    currentColor = "blue";
                }
            }
        }

        // Mostra os quadrados de seleção de cores.
        drawColorPalette();

        canvas.onmousemove = dealWithMouseMovement;
        canvas.onmousedown = () => { draw = true; };
        canvas.onmouseup = () => { draw = false; };

    </script>
</body>

</html>

Saída do código

2 respostas
solução!

Olá Wesley, como vai?

Obrigada por compartilhar sua resposta. É bom ver diferentes pontos de vista, enriquece nosso conhecimento!

Incentivamos subir seu projeto no GitHub e compartilhar via LinkedIn para aumentar seu portifólio e interações dos seus perfis.

Desta forma, priorizamos o fórum para dúvidas e sugestões relacionas aos cursos.

Abraços e ótimos estudos! =)

Se está resposta te ajudou, por favor, marca como solucionado ✓. Continúa com seus estudos :)

Muito obrigado pelo feedback Adriana!