Olá amigo, notei alguns probleminhas no código.
Eu apaguei as linhas:
pencil.fillStyle ="grey";
pencil.fillRect(0,0,600,400);
Para ver o que tava acontecendo atrás desse preenchimento. E realmente está estático.
Creio que o problema esteja basicamente na função dispara, pois ela recebe um parâmetro envento, mas na hora que você chamou a função não configurou nenhum parâmetro pra ela.
Tem a questão que precisa de uma função para sortear onde irá aparecer o alvo, entre outras funções.
Creio que ficará mais claro o uso dessas funções ao longo do curso
Espero ter ajudado