Você está na página 1de 3

Trabalho Prático 1:

Breakout
Thiago Carvalho D' Ávila
thiagocavila@gmail.com
Resumo. Este trabalho se propõe a desenvolver uma réplica do jogo Breakout, desenvolvido
por Steve Wozniak. Para tanto, utiliza-se o paradigma da programação orientada a eventos e a
biblioteca gráfica OpenGL.

Compilação e execução:

O jogo foi implementado utilizando a linguagem Python 2.6.5, não precisa ser
compilado, podendo rodar em qualquer plataforma que possua esta versão
(incluindo Linux e Windows). Não é necessário um makefile, apenas executar o
main.py.

Para tanto, é necessário instalar também a biblioteca PyOpenGL 3.0 (que é o


OpenGl) e a Pygame.

É importante ressaltar que a biblioteca Pygame foi utilizada exclusivamente


para executar os sons do jogo.

Como especificado, toda a parte gráfica foi realizada pelo OpenGl.

Implementação:

Toda a implementação básica foi realizada através dos seguintes módulos:

• main.py: implementa a classe Breakout, a qual tem as funções principais


de jogo, a checagem de colisões (por bounding boxes), as funções de
do loop de eventos.
• draw.py: apenas importa o OpenGl e carrega os módulos de
inicialização da parte gráfica
• objects.py: possui as classes Paddle (implementa o player), Ball, Blocks
e Item, com seus respectivos atributos e métodos.
• sound.py: importa o módulo de audio da PyGame e carrega os arquivos
de som.
• vectors.py (modulo padrão do Python para calculo com vetores)

A articulação foi implementada sobre a forma de uma máquina de estados.


Estados de jogo:
0- reset: estado inicial do jogo
1- pause: quando todos os objetos são congelados
2- info: quando mostra as informações dos objetos apertando o botão
direito
3- play: estado de jogo normal
4- win: quando vence o jogo
5- lose: quando perde o jogo (Game Over)
6- stage clear: quando passa de fase

Implementações extras:

(4) Blocos fixos (15%)


• Foram criados blocos fixos com uma probabilidade aleatória de serem
gerados Assim, dele devem ser acertados uma vez para começarem a
quebrar, outra para ficarem coloridos e outra para serem destruídos.

(5) Implementar dificuldades diferentes (25%):


• Foram implementados 6 níveis de dificuldade, variando o número de
blocos, a velocidade da bola e dos itens e o percentual de blocos “fixos”.

(6) Itens e bônus (25%):


• Ao acredtar um bloco adiciona-se um ao score do jogador, à cada 100
pontos, o jogador ganha uma vida extra.
• Foram implementados também vários itens que caem aleatoriamente
após um bloco ser quebrado. São eles:
1. “+” Aumento do paddle, aumenta em 20% o tamanho dele.
2. “-” Diminui o paddle em 20% do seu tamanho.
3. “*” Ethereal - Faz com que a bola atravesse os blocos sem colidir,
porém distruindo eles. Esse item tem duração de 13 segundos.
4. “up” Este item aumenta uma vida do jogador.
5. “!” Este item libera mais uma bola em jogo.
6. “$” Aumenta o score em 5 pontos.
7. “=” Cria uma barreira temporária por 10 segundos no chão.
8. “()” Monster ball – aumenta o tamanho das bolas em jogo,
triplicando seu raio por 20 segundos.

Cada item tem uma probabilidade diferente de aparecer.

(7) Usar a parte do paddle para modificar a velocidade da bola (15%)


• Após detectar a colisão com o paddle ele calcula a distância entre o
centro da bola e do paddle, quanto mais para a ponta maior a velocidade
no eixo X da bola, podendo variar de -1.8 até 1.8 vezes a velocidade
vertical.

(9) Efeitos sonoros (20%):


• Foram adicionadas diversas músicas de alguns jogos:
1. Ao morrer toca-se a música de morte do jogo Mario World.
2. Ao colidir a bola com bloco faz-se barulho de quebra do jogo
Soldat.
3. Ao mudar para o Cheat Mode, toca uma música do jogo Soldat.
4. Quando sobra apenas um bloco simples toca-se a música Finish
Him do Mortal Kombat 2.
5. Ao vencer o jogo toca-se a música You Win do Street Fighter 2.
6. Ao passar da última fase sem morrer toca-se a música de Stage
Clear do Sonic 3.
7. Ao vencer qualquer outra fase sem morrer toca-se a música
Flawless Victory do Mortal Kombat 2.
8. Ao vencer qualquer fase morrendo toca-se a Stage Clear do
Sonic 2.
9. Ao dar Pause, toca-se a música do Mario World.
10. Ao pegar o item Ethereal, toca-se a Star Power Theme do Mario
Kart.
11. No caso de Game Over, toca-se a música Burn do Soldat.
12. Ao pegar o item que reduz o paddle toca-se Cannon Shot do
Mario World.
13. Entre outras músicas dos jogos mencionados.

(10) Uso de transparência (10% ?)


Todos os objetos foram criados com transparência, usando glColor4f, inclusive
criando efeitos interessantes como quando pega-se o ítem de barreira
temporária ou o item Ethereal.

(outros) Contador de tempo (???%)


Nas informações mostradas foi adicionado um timer que não está na
especificação que entraria como um extra também.

(outros) Cheat mode (???%)


Ao pressionar “1”, o paddle pode ser controlado com as teclas A e D, e se
moverá sempre com a sua velocidade máxima, além disso ele possui um
sistema de colisão diferenciado que quebra os blocos mais facilmente, além de
não perder vidas e sempre ouvir as músicas de nunca ter morrido.

(outros) Item secreto (???%)


Existe a probabilidade de 20% de um item vir sob a forma de “?” não tendo
como o jogador de antemão saber qual item ele irá pegar.

Conclusão:
Este trabalho além de atender aos objetivos proporcionou muita aprendizagem
e diversão. Fazer jogos é a coisa mais legal que existe!

Quaisquer dúvidas estou à disposição thiagocavila@gmail.com

Você também pode gostar