Programe seu primeiro jogo clássico arcade em JavaScript no Canvas

Programe seu primeiro jogo clássico arcade em JavaScript no Canvas

Quer criar um jogo do zero? Programe seu primeiro jogo clássico arcade em JavaScript no Canvas e mergulhe no fascinante mundo da programação de games. Utilizar JavaScript e o elemento Canvas é a combinação perfeita para desenvolver gráficos dinâmicos e interativos. Neste artigo, vamos explorar passo a passo como iniciar seu primeiro projeto de game no estilo arcade, mesmo que você tenha pouca experiência com programação. Vamos aprender juntos a estrutura básica, as funcionalidades, e os segredos para criar uma experiência divertida e envolvente para os jogadores.

Introdução ao Desenvolvimento de Jogos Arcade com JavaScript

Antes de mais nada, programe seu primeiro jogo clássico arcade em JavaScript no Canvas é uma ótima forma de desenvolver habilidades em programação e lógica de games. Usar o JavaScript junto com o Canvas permite que você crie gráficos 2D diretamente no navegador, transformando sua ideia em realidade visual sem precisar de softwares adicionais. Essa técnica possibilita a criação de jogos simples, porém desafiadores, que remetem ao estilo clássico dos arcades.

Como Funciona o Canvas no JavaScript?

Primeiramente, o Canvas é um elemento do HTML5 que atua como uma “tela” em branco onde podemos desenhar formas, gráficos e criar animações. Juntamente com o JavaScript, o Canvas permite desenhar e manipular gráficos usando comandos específicos. Essa funcionalidade é essencial para jogos, já que possibilita o movimento de objetos, a criação de cenários e a interação com o jogador.

Por Que Usar o Canvas?

Sobretudo, o Canvas é uma ferramenta leve, ideal para jogos 2D e extremamente eficiente quando combinada com JavaScript. Além disso, é amplamente suportado nos navegadores modernos, tornando-o uma escolha acessível para novos desenvolvedores que desejam programar seu primeiro jogo clássico arcade em JavaScript no Canvas.

Preparando o Ambiente de Desenvolvimento

A princípio, você só precisa de um editor de código, como o Visual Studio Code, e de um navegador para ver o seu jogo em funcionamento. Esses dois recursos já são suficientes para criar e testar sua criação. Para iniciar, crie um arquivo HTML e um arquivo JavaScript separados, conectando-os para que possam trabalhar juntos.

Estrutura Básica do HTML com Canvas

Aqui está um exemplo simples para configurar o Canvas no HTML:

htmlCopiar código<span class="hljs-meta" data-uipath_custom_id_23_4_59_15687="378">&lt;!DOCTYPE <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="379">html</span>&gt;</span>
<span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="380">&lt;<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="381">html</span> <span class="hljs-attr" data-uipath_custom_id_23_4_59_15687="382">lang</span>=<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="383">"pt-br"</span>&gt;</span>
<span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="384">&lt;<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="385">head</span>&gt;</span>
    <span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="386">&lt;<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="387">meta</span> <span class="hljs-attr" data-uipath_custom_id_23_4_59_15687="388">charset</span>=<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="389">"UTF-8"</span>&gt;</span>
    <span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="390">&lt;<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="391">meta</span> <span class="hljs-attr" data-uipath_custom_id_23_4_59_15687="392">name</span>=<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="393">"viewport"</span> <span class="hljs-attr" data-uipath_custom_id_23_4_59_15687="394">content</span>=<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="395">"width=device-width, initial-scale=1.0"</span>&gt;</span>
    <span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="396">&lt;<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="397">title</span>&gt;</span>Meu Primeiro Jogo Arcade<span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="398">&lt;/<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="399">title</span>&gt;</span>
<span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="400">&lt;/<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="401">head</span>&gt;</span>
<span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="402">&lt;<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="403">body</span>&gt;</span>
    <span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="404">&lt;<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="405">canvas</span> <span class="hljs-attr" data-uipath_custom_id_23_4_59_15687="406">id</span>=<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="407">"gameCanvas"</span> <span class="hljs-attr" data-uipath_custom_id_23_4_59_15687="408">width</span>=<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="409">"800"</span> <span class="hljs-attr" data-uipath_custom_id_23_4_59_15687="410">height</span>=<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="411">"600"</span>&gt;</span><span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="412">&lt;/<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="413">canvas</span>&gt;</span>
    <span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="414">&lt;<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="415">script</span> <span class="hljs-attr" data-uipath_custom_id_23_4_59_15687="416">src</span>=<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="417">"script.js"</span>&gt;</span><span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="418">&lt;/<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="419">script</span>&gt;</span>
<span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="420">&lt;/<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="421">body</span>&gt;</span>
<span class="hljs-tag" data-uipath_custom_id_23_4_59_15687="422">&lt;/<span class="hljs-name" data-uipath_custom_id_23_4_59_15687="423">html</span>&gt;</span>

Em seguida, configure o arquivo script.js onde vamos escrever o código JavaScript para programar seu primeiro jogo clássico arcade em JavaScript no Canvas.

Criando o Contexto e Desenhando os Primeiros Elementos

Agora, vamos configurar o contexto para desenhar. O Canvas precisa de um contexto 2D para renderizar imagens e formas. Em outras palavras, é o que permitirá controlar os gráficos do jogo.

No seu arquivo script.js, adicione o seguinte código:

javascriptCopiar código<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="442">const</span> canvas = <span class="hljs-variable language_" data-uipath_custom_id_23_4_59_15687="443">document</span>.<span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="444">getElementById</span>(<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="445">'gameCanvas'</span>);
<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="446">const</span> ctx = canvas.<span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="447">getContext</span>(<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="448">'2d'</span>);

Desenhando o Fundo e os Elementos do Jogo

Depois disso, comece a programar seu primeiro jogo clássico arcade em JavaScript no Canvas criando o fundo e os objetos principais do jogo. Por exemplo, se estamos desenvolvendo um jogo de naves, podemos desenhar o jogador, os inimigos e os projéteis.

javascriptCopiar código<span class="hljs-comment" data-uipath_custom_id_23_4_59_15687="463">// Desenhando o jogador</span>
<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="464">function</span> <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="465">drawPlayer</span>(<span class="hljs-params" data-uipath_custom_id_23_4_59_15687="466"></span>) {
    ctx.<span class="hljs-property" data-uipath_custom_id_23_4_59_15687="467">fillStyle</span> = <span class="hljs-string" data-uipath_custom_id_23_4_59_15687="468">'blue'</span>;
    ctx.<span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="469">fillRect</span>(<span class="hljs-number" data-uipath_custom_id_23_4_59_15687="470">50</span>, <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="471">50</span>, <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="472">30</span>, <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="473">30</span>);
}

Com esse simples código, desenhamos um retângulo que representa o jogador. Esse será o primeiro elemento visível na tela do jogo.

Criando Movimentação e Controle do Jogador

Para que o jogador interaja com o jogo, precisamos implementar controles. Vamos utilizar as setas do teclado para mover o personagem na tela, algo fundamental em qualquer jogo arcade clássico.

javascriptCopiar código<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="488">let</span> playerX = <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="489">50</span>;
<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="490">let</span> playerY = <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="491">50</span>;

<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="492">function</span> <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="493">movePlayer</span>(<span class="hljs-params" data-uipath_custom_id_23_4_59_15687="494">event</span>) {
    <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="495">switch</span>(event.<span class="hljs-property" data-uipath_custom_id_23_4_59_15687="496">key</span>) {
        <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="497">case</span> <span class="hljs-string" data-uipath_custom_id_23_4_59_15687="498">'ArrowUp'</span>:
            playerY -= <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="499">5</span>;
            <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="500">break</span>;
        <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="501">case</span> <span class="hljs-string" data-uipath_custom_id_23_4_59_15687="502">'ArrowDown'</span>:
            playerY += <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="503">5</span>;
            <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="504">break</span>;
        <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="505">case</span> <span class="hljs-string" data-uipath_custom_id_23_4_59_15687="506">'ArrowLeft'</span>:
            playerX -= <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="507">5</span>;
            <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="508">break</span>;
        <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="509">case</span> <span class="hljs-string" data-uipath_custom_id_23_4_59_15687="510">'ArrowRight'</span>:
            playerX += <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="511">5</span>;
            <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="512">break</span>;
    }
    <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="513">drawGame</span>();
}

<span class="hljs-variable language_" data-uipath_custom_id_23_4_59_15687="514">window</span>.<span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="515">addEventListener</span>(<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="516">'keydown'</span>, movePlayer);

Com isso, o jogador pode se mover pela tela ao pressionar as setas do teclado. Esse movimento simples dá vida ao nosso game, e já começamos a ver a mágica acontecer.

Adicionando Inimigos ao Jogo

Para tornar o jogo mais interessante, adicionaremos inimigos. Eles serão desenhados de forma semelhante ao jogador e terão movimento próprio para desafiar o jogador.

javascriptCopiar código<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="531">let</span> enemyX = <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="532">400</span>;
<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="533">let</span> enemyY = <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="534">50</span>;

<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="535">function</span> <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="536">drawEnemy</span>(<span class="hljs-params" data-uipath_custom_id_23_4_59_15687="537"></span>) {
    ctx.<span class="hljs-property" data-uipath_custom_id_23_4_59_15687="538">fillStyle</span> = <span class="hljs-string" data-uipath_custom_id_23_4_59_15687="539">'red'</span>;
    ctx.<span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="540">fillRect</span>(enemyX, enemyY, <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="541">30</span>, <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="542">30</span>);
}

Nesse caso, o inimigo é desenhado em uma posição diferente, adicionando mais um elemento visual ao jogo.

Implementando a Detecção de Colisões

A detecção de colisões é um aspecto essencial. Ou seja, é o que define o impacto entre o jogador e os inimigos, determinando o fim de uma partida, por exemplo. Vamos programar uma função para verificar colisões:

javascriptCopiar código<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="557">function</span> <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="558">checkCollision</span>(<span class="hljs-params" data-uipath_custom_id_23_4_59_15687="559"></span>) {
    <span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="560">if</span> (playerX &lt; enemyX + <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="561">30</span> &amp;&amp;
        playerX + <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="562">30</span> &gt; enemyX &amp;&amp;
        playerY &lt; enemyY + <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="563">30</span> &amp;&amp;
        playerY + <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="564">30</span> &gt; enemyY) {
        <span class="hljs-variable language_" data-uipath_custom_id_23_4_59_15687="565">console</span>.<span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="566">log</span>(<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="567">'Colisão detectada!'</span>);
    }
}

Essa função verifica se o jogador e o inimigo se sobrepõem. Quando isso acontece, uma mensagem é exibida no console. Você pode adicionar efeitos, como diminuir a vida do jogador ou finalizar o jogo.

Criando Pontuação e Fases

Juntamente com os elementos básicos, adicionar um sistema de pontuação torna o jogo mais envolvente. Sempre que o jogador evitar uma colisão ou destruir um inimigo, ele ganha pontos.

javascriptCopiar código<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="582">let</span> score = <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="583">0</span>;

<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="584">function</span> <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="585">updateScore</span>(<span class="hljs-params" data-uipath_custom_id_23_4_59_15687="586"></span>) {
    score += <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="587">10</span>;
    <span class="hljs-variable language_" data-uipath_custom_id_23_4_59_15687="588">console</span>.<span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="589">log</span>(<span class="hljs-string" data-uipath_custom_id_23_4_59_15687="590">'Pontuação:'</span>, score);
}

Esse pequeno detalhe incentiva o jogador a continuar jogando e é uma parte fundamental de qualquer jogo arcade.

Animando os Elementos do Jogo

Agora, para criar uma sensação de movimento constante, adicionaremos uma animação. Utilizando requestAnimationFrame, você cria um loop de jogo que atualiza os elementos na tela continuamente.

javascriptCopiar código<span class="hljs-keyword" data-uipath_custom_id_23_4_59_15687="606">function</span> <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="607">gameLoop</span>(<span class="hljs-params" data-uipath_custom_id_23_4_59_15687="608"></span>) {
    ctx.<span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="609">clearRect</span>(<span class="hljs-number" data-uipath_custom_id_23_4_59_15687="610">0</span>, <span class="hljs-number" data-uipath_custom_id_23_4_59_15687="611">0</span>, canvas.<span class="hljs-property" data-uipath_custom_id_23_4_59_15687="612">width</span>, canvas.<span class="hljs-property" data-uipath_custom_id_23_4_59_15687="613">height</span>);
    <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="614">drawPlayer</span>();
    <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="615">drawEnemy</span>();
    <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="616">checkCollision</span>();
    <span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="617">requestAnimationFrame</span>(gameLoop);
}

<span class="hljs-title function_" data-uipath_custom_id_23_4_59_15687="618">gameLoop</span>();

Esse loop permite que o jogo funcione sem interrupções, criando uma experiência dinâmica e interativa.

Sons e Efeitos Visuais

Além dos gráficos, adicionar sons melhora a experiência. Inclua efeitos sonoros simples para quando o jogador se move, acerta um inimigo ou perde uma vida. O JavaScript oferece suporte para áudio, então, você pode facilmente incorporar esses elementos.

Finalizando o Jogo e Adicionando Funcionalidades Extras

Por fim, depois de completar os elementos essenciais, você pode adicionar um menu inicial, um botão de reiniciar e até diferentes níveis de dificuldade para aprimorar ainda mais o seu jogo.


Minhas Impressões Pessoais

Pessoalmente, acredito que criar um jogo em JavaScript no Canvas é uma experiência enriquecedora, pois ensina desde fundamentos de lógica até a manipulação gráfica. A funcionalidade do Canvas em desenhar e animar gráficos 2D diretamente no navegador é muito poderosa. Com a integração de elementos interativos, como controle do jogador e detecção de colisão, e detalhes adicionais, como pontuação e animações, você pode construir uma base sólida para qualquer tipo de jogo.

Programe seu primeiro jogo clássico arcade em JavaScript no Canvas

Perguntas Frequentes (FAQ)

Como posso começar a programar um jogo arcade em JavaScript?

Para começar, crie um arquivo HTML com o elemento Canvas e um arquivo JavaScript separado. O Canvas será a “tela” onde você desenha os gráficos do jogo, enquanto o JavaScript vai controlar a lógica do jogo, como movimentos e interações.

Quais são os principais passos para criar o movimento do jogador?

Primeiro, você deve capturar eventos de teclado para mover o jogador. Usando as setas do teclado, você pode alterar as coordenadas do personagem na tela e atualizar sua posição a cada movimento.

Como faço para adicionar inimigos ao meu jogo?

Você pode criar inimigos desenhando formas no Canvas, assim como o jogador. A diferença é que você vai programar um movimento automático para eles, criando desafios no jogo e tornando-o mais interessante.

Prof. Eduardo H Gomes
Prof. Eduardo H Gomes

Mestre em Engenharia da Informação, Especialista em Engenharia da Computação, Cientista da Computação, Professor de Inteligência Artificial, 18 anos de docência no Ensino Superior. Apaixonado por Surf, Paraglider, Mergulho livre, Tecnologia, SEO, Banco de Dados e Desenvolvimento Web.