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

Preencher todos os quadrados dentro do canvas. Exercício canvas usando loop

Pessoal,

Estou com mais uma dúvida. Alguém poderia me dar uma sugestão de como resolver o problema em questão? 1-Preciso de preencher todo o canvas que está em 600x400 com pequenos quadrados de 50x50. 2-Fiz o seguinte código abaixo e mesmo chamando a função para desenhar a barra na direção Y e a barra na direção X percebi que o canvas não preenche toda a tela e sim redimensiona de acordo com os paramentos passado para as funções somente uma vez e constroem as barras x e y. favor olhar o código na integra. Ja tentei muito e não consegui encontrar uma solução.

<meta charset="UTF-8">

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

<script>

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

    pincel.fillStyle="lightgrey";
    pincel.fillRect(0, 0, 600, 400); // x , y , width , height
   function desenhaQuadrado(x,y,cor){

    pincel.fillStyle = cor;
    pincel.fillRect(x, y, 50, 50); // x , y , width , height
    pincel.strokeRect(x, y, 50, 50);

}
var cores = ["darkblue","blue","lightblue","darkred","red","lightres","green","yellow","pink"];
var controlarCoresX=[8];
var controlarCoresY=[8];
var aux = 50;
var aux2 = 50;
var qtdeX=[];
var qtdeY=[];
qtdeX[1] = 0;
qtdeY[1] = 0;
var count = 1;
 var c = 1;

function criarBarraY(posX){
//redimensiona Y
      while(count <=8){

        desenhaQuadrado(posX,qtdeY[count], cores[controlarCoresX]);

                 controlarCoresX++;

                if (controlarCoresX == cores.length){
                controlarCoresX = 0;
                }
        count++;

        qtdeY[count] = aux;
        aux = aux + 50;           

        }
}
function criarBarraX(posY){

//redimensiona X
        while(c <= 12){
            qtdeX[1] = 50;
            desenhaQuadrado(qtdeX[c],posY, cores[controlarCoresX]);

                 controlarCoresX++;

                if (controlarCoresX == cores.length){
                controlarCoresX = 0;
                }
            c++;
            qtdeX[c] = aux2;
            aux2 = aux2 + 50; 


        }
}

criarBarraX(0); // 
criarBarraY(0); // 
criarBarraX(50); // aqui deveria apartir da posição 50 criar todos os quadrados de acordo com a função criar barra X

</script>
6 respostas

Olá meu aluno. Respondi pergunta similar neste post.

https://cursos.alura.com.br/forum/topico-preencher-a-tela-600-400-com-quadrados-52835

Pode dar uma conferida nele? Se não for suficiente, nos diga.

Professor eu vi la os posts, entretanto o que eu mais queria era entender aonde eu errei com a lógica que produzi no meu código, por isso sei que é muito trabalho para ti! Conseguiria fazer uma analise rápida?

solução!

Olhei rapidamente o seu código. Sua lógica esta muito complexa, mas até OK, é sua lógica e isso é muito válido. Porém, o nome das variáveis que você utilizou dificultam bastante a leitura do código. Eu vejo c, o que é c? O que é aux? Então, para ficar mais fácil de alguém te ajudar, o ideal seria que, mesmo com problema, você usasse nomes mais expressivos para ajudar quem lê seu código. Talvez isso seja mais importante do que a própria correção da sua lógica.

Porém, olhando seu código, a tal variável c parece ser a problemática. Quando você pede para desenharX novamente, essa variável esta com um valor anterior. Sua lógica utiliza ela para alguma coisa, mas não sei do que se trata.

Professor obrigado pela ajuda, decidir reescrever o código de forma legível e compreensível, a variável c é um contador para o loop da função criarBarraX depois que reescrever a tarefa se tiver alguma dúvida eu entro em contato. Obrigado!

Consegui atingir meus objetivos, e preenchi todos os quadros dentro do canvas com cores sortidas a cada refresh no browser.

<meta charset="UTF-8">

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

<script>

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

    pincel.fillStyle="lightgrey";
    pincel.fillRect(0, 0, 600, 400); // x , y , width , height

   function desenhaQuadrado(x,y,cor){

    pincel.fillStyle = cor;
    pincel.fillRect(x, y, 50, 50); // x , y , width , height
    pincel.strokeRect(x, y, 50, 50);

}

    function sorteiarCores(cor){
        var cores = ["darkblue","blue","lightblue","orange","red","grey","green","yellow","pink","white","black","purple"];
        var sorteiar = Math.round(Math.random(cores)*12);
        cor = cores[sorteiar];
    return cor;
    }
var x = 0;
var y=0;

for (cont=0; cont<=8;cont++) {

        for (i =0; i<=12; i++) {
                   desenhaQuadrado(x,y,sorteiarCores());
                    x = x + 50;
        }            

                    y = y+50;
                    x = 0;
}

</script>

Excelente!!!