O jogo 2048 é um quebra-cabeças matemático em que um jogador desliza painéis numerados numa grelha quadrada de 4×4 quadrados. Foi criado em Março de 2014 por Gabriele Cirulli, um programador web italiano.
O objectivo do jogo é combinar painéis com o mesmo número até criar um painel com o número 2048 (ver Fig. 1). Para tal, o jogador pode “arrastar” os painéis em cada uma das quatro direcções – Cima (N), baixo (S), esquerda (W) e direita(E). Quando uma acção é aplicada ao tabuleiro, esta afecta todos os painéis com espaço para se deslocarem. Por exemplo, a configuração inicial da Fig. 2 poderia dar origem às quatro configurações apresentadas na Fig. 3, consoante a acção aplicada.
Após cada movimento, um novo painel aparece numa posição livre do tabuleiro, escolhida aleatoriamente. Este novo painel tem, com uma probabilidade de 0.8, o número 2 e, com uma probabilidade de 0.2, o número 4.
O PROJECTO
O objectivo deste trabalho era escrever um programa em Python que permitisse a um utilizador jogar o jogo 2048 no computador.
A escolha do melhor algoritmo
O principal desafio deste projecto era chegar ao melhor algoritmo para reduzir o tabuleiro, isto é, juntar dois números iguais e adjacentes.
A primeira ideia que surgiu foi claramente a mais lógica: Criar 4 funções, cada uma responsável por determinada direcção. No entanto, estas funções seriam muito idênticas, porque, na verdade, fazem praticamente o mesmo. Desta forma estaríamos a aplicar um algoritmo que tornaria o código muito repetitivo, concluindo-se que este não seria o mais adequado para resolver o problema, surgindo então a necessidade de procurar um “caminho” mais optimizado: Trabalho com matrizes!
Se repararmos, o tabuleiro do jogo 2048 não é mais do que uma matriz 4×4. Então, em vez de se criar 4 funções muito semelhantes obtou-se por se criar apenas uma função que associava os números iguais e adjacentes e reduzia o tabuleiro sempre para a direita/sentido Este (nome da função: tabuleiro_reduz_direita). Para as restantes direcções rodamos previamente o tabuleiro de modo a que a direcção para a qual queremos reduzir esteja virada para a direita. Procedemos à redução e, após a mesma, retornamos o tabuleiro para a direcção original. Assim, apesar de haver a necessidade de se criar uma função auxiliar, o código fica muito mais “limpo” e optimizado.
Reflexões sobre o Projecto
Este foi, sem dúvida, um projecto interessante que nos obrigou a aprender uma nova linguagem de alto nível que prioriza a legitibilidade do código sobre a velocidade ou expressividade (Python) e que se está a tornar cada vez mais conhecida e usada por programadores em todo o Mundo, ajudando-nos também a desenvolver a capacidade de raciocínio perante novos problemas que não está longe da realidade que vamos encontrar daqui a uns anos quando entrarmos no mercado de trabalho.