2
respostas

Tiro ao Alvo com Melhorias Interessantes

Meu código ficou diferente do código do professor, principalmente na parte do X e Y aleatório.

Nesse meu código eu fiz as seguintes melhorias:

  • tem contagem regressiva;
  • criei um borda no canvas;
  • o alvo não é criado nas bordas;
  • se a pessoa acerta, o sistema para de criar os alvos e parabeniza o usuário;

Ficou bem interessante e bom para quem quer ver algo diferente.

Esperto ter ajudado. Sucesso na sua jornada!!

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

<script>

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


    function criarTexto(texto, x, y, tam, cor){

        pincel.fillStyle = cor;
        pincel.font = tam;
        pincel.fillText (texto, x, y);
    }

    function desenhaRetangulo(x, y, larg, alt, cor){

        pincel.fillStyle = cor;
        pincel.fillRect (x, y, larg, alt);
    }


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

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

    function limpaTela (){

        pincel.clearRect(0,0,600,400);
    }

    var i = 3;

    var inicio = true;

    function contagemRegressiva(){

        if (inicio){
            if (i == 0){        
                jogo = true;
            }else {
                limpaTela();
                criarTexto ("Vocé é bom de mira, Cowboy?!", 90, 80, "25px Georgia", "brown");
                criarTexto ("Vamos ver se você consegue acertar o alvo.", 50, 100, "25px Georgia", "brown");
                criarTexto (i, 250,200, "50px Georgia", "red");
                i = i -1;
            }
        }
    }

    var raio = 10;

    function desenhaAlvo () {

        desenhaCirculo (x, y, raio + 20, "red");
        desenhaCirculo (x, y, raio + 10, "white");
        desenhaCirculo (x, y, raio, "red");

        desenhaRetangulo (0, 0, 600, 10, "black"); // barra de cima
        desenhaRetangulo(0, 0, 10, 400, "black"); // barra da esqueda
        desenhaRetangulo(590, 0, 10, 400, "black"); // barra direita
        desenhaRetangulo(0, 390, 600, 10, "black"); // barra de baixo
    }

    var jogo = false;

    function trocarPosicao () {

        if (jogo) {
                limpaTela();

                inicio = false;

                x = Math.round(Math.random()*600);

                    while (x >= 0 && x <= 40 || x >= 560 && x <= 600){
                        x = Math.round(Math.random()*600);
                    }

                y = Math.round(Math.random()*400);
                    while (y >= 0 && y <= 40 || y >= 360 &&  y <= 400){
                        y = Math.round(Math.random()*400);
                    }

                desenhaAlvo ();
        }
    }

    var x = 0;

    var y = 0;


    setInterval (contagemRegressiva, 1000);

    setInterval(trocarPosicao, 700);


    tela.onclick = verificaTiro;

    function verificaTiro (evento) {
        var xtiro = evento.pageX - tela.offsetLeft;
        var ytiro = evento.pageY - tela.offsetTop;

        if (xtiro >= x - raio && xtiro <= x + raio &&  ytiro >= y - raio && ytiro <= y + raio) {
            jogo = false;
            limpaTela ();
            desenhaRetangulo(10,10,580,480, "green");
            criarTexto ("Parabéns, a sua mira está excelente!!", 80, 200, "25px Georgia", "white");
        }

    }    

</script>
2 respostas

Muito legal essas novas funções e o novo design adicionado ao jogo Diógenes!!!

Fala Matheus,

Vlw!! Vou um pouco além para eu me desafiar mesmo. rs

Treinar e aplicar algumas outras coisas que aprendi nas aulas passadas.

Abraço!

Sucesso na sua jornada!!