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

automatizar um quadrado de cada cor

Estou tentando fazer com que cada quadrado fique de uma cor, adicionando uma variável (c), um for dentro de um for e incremento de c. Criei então dois conjuntos, pares e impares, mas a impressão é que as condições dos if nunca são satisfeitas pois sempre imprime o que esta no else. Eu sei que a variável c está sendo incrementada pois ela imprime a quantidade de quadrados que aparecem no canvas, mas não consigo entender pq esses quadrados não estão um de cada cor.

function desenhaQuadrado(x, y, cor) {

        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.fillStyle = cor;
        pincel.fillRect(x, y, 50, 50);
        pincel.strokeStyle = "rgb(50,0,100)";
        pincel.strokeRect(x, y, 50, 50);

}
    var c = 0;        
    var cor = "yellow";
    var pares = [2,4,6,8,10,12,14,16,18,20];
    var impares = [1,3,5,7,9,11,13,15,17,19,];

    for(var x=0; x<600; x = x + 50){
        for(var y = 0 ; y< 400; y = y + 50){            
            c++;    

            if(c == pares){
                cor = "blue";                        
            }

            if(c == impares){
                cor = "red";                        
            }
            else{
                cor = "green";
            }

        desenhaQuadrado(x, y, cor);
        }

    }

    document.write(c);




</script>
3 respostas
solução!

Fala, Rodrigo! Tudo bem contigo?

Dei uma olhada no código e vamos conversar sobre algumas possibilidades ;-)

Quando foi criado uma arrayde números pares e impares

    var pares = [2,4,6,8,10,12,14,16,18,20];
    var impares = [1,3,5,7,9,11,13,15,17,19,];

Vi que toda as vezes em que a contagem da variável c for par, imprima azul

            if(c == pares){
                cor = "blue";                        
            }

O mesmo acontece quando a variável c for impar

            if(c == impares){
                cor = "red";                        
            }

Tudo isso limitando suas duas arrays, e passando dos valores dentro delas, imprima a cor verde, correto?

            else {
                cor = "green";
            }

Porém, nós vemos em um primeiro momento que ele guarda a cor amarelo,

var cor = "yellow";

mas perde esse valor quando entra dentro do for.

Logo depois, ele não está "entendendo" que as variáveis pares e impares se tratam de arrays, logo ele diz que não é um nem outro e imprime a cor verde. Aqui você percebe que o amareloperdeu o seu valor.

Eu convido a fazer um debbugpara entender como o seu código está acontecendo.

Com F12ou CTRL + Shift + Ivocê terá acesso ao console

Imgur

Depois, entre em Sources e marque com o ponto vermelho onde o debbugirá começar

Imgur

Feito isso, aparecerá dois comandos para avançar o debbug: um roda tudo e o outro faz o passo a passo do código

Imgur

Esse é um procedimento muito usado para descobrir onde está o erro.

A alteração que fiz foi bem simples, Rodrigo.

Primeiro removi as duas arrays pares e impares deixando somente o contador c

var c = 0;

Dentro do for, coloquei um console.logsó para ver a impressão das contagens dessa variável c

            c++;
            console.log(c);

Agora é que vem (rs)

Fiz algumas condicionais, que chegam no mesmo resultado que estava esperando, porém, sem incluir arrays

            if (c % 2 == 0 && c <= 20) {  // números pares até 20
                cor = "blue";
            } else if (c % 2 == 1 && c <= 19) { // números ímpares até 19
                cor = "red";
            } else if (c % 2 == 0 && c > 20) { // números pares acima de 20
                cor = "green";
            } else if (c % 2 == 1 && c > 19) { // números ímpares acima de 19
                cor = "yellow";
            }

Analise esse código através do debbugpara ver o comportamento, mas estude uma possibilidade da inclusão das arrays, Rodrigo! Creio que vai ser um excelente treino.

Não deixe de praticar!

Depois, volte aqui para postar sua solução ou caso tenha travado em algum ponto, vamos conversar novamente!

Um abraço e bons estudos!!!

ótima solução. Eu não sabia como determinar os números pares e impares. O "(c % 2 == 0 )" e "(c % 2 == 1 )" são perfeitos. Obrigado tb pela sugestão do debug.

Opa, Rodrigo! ;-)

Qualquer dúvida, estamos a disposição!!!