Projeto
O projeto
Blocks consiste em uma tentativa de padronizar classes para virtualmente qualquer
jogo bidimensional - seja ele de tabuleiro, plataforma ou estratégia em tempo
real. A idéia consiste em uma classe container que deve armazenar a situação
de todas as 'peças' do jogo, assim como identificações para os quadros (úteis
para definir se um dado local está ou não ocupado, definir uma textura ou
comportamento especial, etc). As 'peças', por sua vez, podem ser formadas
de um conjunto de peças - um 'bloco' de peças propriamente dito, e daí vem
o nome do projeto. O objetivo é enriquecer as classes de tal forma que as
mesmas sirvam para as mais diversas modalidades de jogo - servindo como uma
'camada mais baixa' de implementação de jogos 2d, ou uma engine - fica apenas
a tarefa de implementar as leis vigentes para cada jogo (gravidade para jogos
de plataforma, temporização para jogos tetris-like, etc).
Evolução
do Projeto
Blocks 0.5
O projeto começou com a implementação do mínimo necessário para um jogo do
estilo Tetris. Dentre as características da primeira versão (0.5 alfa), citam-se:
- Classe tabuleiro:
O tabuleiro é a classe container do projeto - um tabuleiro é composto
de uma matriz de inteiros de tamanho fixo (definido por duas constantes).
Inicialmente, o tabuleiro é capaz de inserir novas peças na matriz (que
são representadas por números), checar se um espaço está ocupado e remover
uma peça.
- Classe Piece:
Uma peça (piece) é a unidade básica do sistema - dentre as características,
a peça armazena um status (que é o número que é armazenado no tabuleiro
- status zero significa que a peça não existe ou é 'transparente'), posições
(x,y) e um outro inteiro que simboliza um ícone Blockz 0.1
As duas primeiras
implementações do Blocks 0.5 (Tetris e Snake) mostraram as limitações da implementação.
Entre elas, citam-se:
- O tabuleiro tem
um tamanho fixo, definido por uma constante de programa.
- Todos os blocos (conjuntos
de peças) devem ter as mesmas dimensões, definidas por constantes.
Graças às
limitações, as classes foram reformuladas de forma a agilizar o sistema. As
novas classes usadas são:
- Classe Objeto:
Um objeto é uma classe que representa praticamente tudo dentro da
engine: cada objeto, diferente de um bloco na implementação anterior,
tem tamanho próprio. Além disso, cada objeto tem várias características
que indicam seu comportamento: um objeto pode ou não ser tangível (isto
é, passível de colisões), móvel (objetos fixos são usados para representar
tiles de cenário, por exemplo), visível (um objeto invisível não é desenhado),
além de outras características (direção, status, código). Todos os objetos
são acomodados em Layers, explicados a seguir
- Classe Layer:
Um Layer é uma 'camada' de posicionamento: cada Layer armazena Objetos.
A utilização dos Layers é das mais diversas: Layers podem ser usados para
representar backgrounds (isto é: possuirem apenas uma imagem de fundo)
ou foregrounds (armazenando objetos), ou ambas ao mesmo tempo. Um jogo
de plataforma em geral utiliza vários Layers, um jogo mais simples (como
Tetris ou Pac-Man) não necessita de mais que um Layer apenas.