Claro que existem diversas formas de se fazer um programa, e dependendo do objetivo escolhe-se um jeito ou outro. O mais correto é fazer toda a documentação primeiro, para depois colocar a mão na massa.
Mas isso deixa de ser verdadeiro quando:
1- não há um prazo, portanto não há pressa
2- não se conhece muito bem o projeto como um todo
3- é diversão!
Eu sempre gostei de um jogo, variante do Tetris, chamado Blockout. Ele usa um tabuleiro tridimensional, e peças que podem ser rodadas também nas 3 dimensões. O meu primeiro contato com esse jogo foi num 386….acho que muita gente nem sabe o quão antigo isso é!
Hoje em dia existe uma versão livre, gratuita, código-fonte aberto, do jogo. Porém, ele é escrito em C, e essa linguagem pra mim é um incógnita. Tentei achar algo em Python para poder adaptar ao N900 e poder voltar a jogar. Mas não encontrei.
Resultado? Lá fui eu tentar fazer o jogo!! O primeiro problema: aprender a usar a biblioteca gráfica do Python para jogos, a PyGame.
Depois de apanhar por algumas horas com os conceitos, eu consegui fazer o desenho do tabuleiro (já com tamanho variável), desenhar as peças e, quem diria, rotacioná-las em todas direções!
Claro que, como dá pra ver nas imagens, a tela ainda está bem crua. A minha intenção é que os controles sejam feitos na própria tela, óbvio. Teria um controle à direita para mover as peças (direita, esquerda, pra cima e pra baixo), e um outro controle à esquerda, para rotacioná-las. Pelo menos os dois botões do topo, apesar de terem a mesma imagem, funcionam bem: o da esquerda abre o gerenciador de tarefas e o da direita fecha o programa.
O jogo ainda não é “jogável”. Neste momento estou no ponto de tentar fazer as peças “grudarem” no fundo, e de forma a que fiquem ocupando a camada correta. Quem sabe até o final da semana eu não tenha algo mais interessante?
Conforme o desenvolvimento do jogo for progredindo, colocarei novas telas.
A parte mais complicada até agora foi fazer justamente a rotação das peças. O formato da peça é guardado num vetor tridimensional, pois preciso da informação de quantas colunas, quantas linhas, e quantas camadas a peça possui! A camada é justamente o que dá o efeito tridimensional. Eu não poderia fazer algo fixo, pois tenho também a intenção de fazer peças mais elaboradas no futuro (inclusive aleatórias). Então eu não tenho como saber o formato previamente. Precisava tratar com conceitos, como para rotacionar uma peça para a direita eu precisava “transformar” todas as colunas em camadas, e vice-versa.
Mas eu tenho certeza que será tão complicado ou até mais fazer as peças se encaixarem no fundo, da forma como devem!