Corona SDK tutorial 01: BR3AK+

O ser humano possui duas grandes habilidades: a primeira é a de construir coisas incríveis e a segunda destruí-las.

Nesse tutorial irei mostrar como criar um jogo estilo BR3AK+ usando Lua e Corona SDK. É um jogo bem simples, que consiste em clicar e “quebrar” quadrados que possuem três ou mais quadrados adjacentes da mesma cor e inserir novos quadrados aleatórios. Este tutorial foi feito no Corona SDK, mas a lógica é bem simples e pode ser aplicada em qualquer outra linguagem.

Vamos iniciar criando um grid de 10×10, onde cada tile (peça) tenha 30×30 pixels de altura e largura. Definiremos algumas constantes, como, por exemplo, o tamanho dos tiles, número de linhas e colunas e as cores utilizadas. Os valores das cores no Corona SDK vão de 0 à 1, ou seja, do preto (0) ao branco (255), respectivamente:

Caso você tenha copiado feito tudo certo, o resultado deve ser semelhante a isto:

Agora vamos deixar nosso grid de cores interativo. No Corona SDK trabalhamos com eventos, portanto, iremos adicionar um evento para aguardar algum toque do usuário no grid. Quando essa ação ocorrer será chamada uma função que deve encontrar o tile que foi tocado (floodFill) e, em seguida, caso tenha 3 ou mais tiles adjacentes da mesma cor, chamar as demais funções (fall e fallFromTop):

Agora vamos para a função que deve percorrer os vizinhos do tile selecionado, verificando se ele é da mesma cor e se ainda não foi visitado. Se três ou mais vizinhos forem da mesma cor devemos remové-los. Para isso vamos utilizar uma adaptação do algorítimo Flood Fill (talvez tenha um nome próprio, mas eu desconheço) para percorrer os vizinhos:

break_gif_box_post

Olhando o código, percebesse que temos uma função recursiva, ou seja, que chama ela mesma. Nela chamamos os vizinhos adjacentes, para isso basta subtrair ou somar o número da coluna ou linha, verificando sempre o limite do grid:

Após isso devemos deslocar os tiles superiores para os buracos deixados e inserir novos tiles nos espaços em branco:

Ao final temos algo semelhante ao mostrado abaixo. Você pode baixar o projeto completo aqui.

break_gif_post

  • Curti muito a iniciativa que divulgar os codigos/tutorias interessantes sobre lua pq realmente tem pouco material.

    Comecei a fazer o tutorial, mas apareceu esse erro (na imagem), poderia me ajudar?

    for row=1, MAX_ROWS do
    tileArray[row] = {}
    for col=1, MAX_COLS do
    local tile = newTile( TILE_SIZE * col – TILE_HALF_SIZE, TILE_SIZE * row – TILE_HALF_SIZE )
    tileArray[row][col] = tile
    grid:insert( tile )
    end
    end

    • Maicon Feldhaus

      Opa, falha minha! Pode mudar o MAX_ROWS e MAX_COLS por N_ROWS e N_COLS. Obrigado por avisar, já vou corrigir!

      • tileArray[row] = {} também tem que ser alterado para tileMatrix[row] = {} né?

        • Maicon Feldhaus

          Isso! (: