Como mencionei anteriormente, foi criado um grupo de estudos sobre desenvolvimento de jogos na UFC, o DoG[1], e mensagens indo e vindo, foi sugerido pelo Felipe Ribeiro (Moderador do Grupo), que as pessoas participantes com ou sem experiência tentassem desenvolver um jogo/demo para que pudéssemos trocar idéias sobre implementação, dúvidas, curiosidades e dificuldades que surgissem no decorrer do desenvolvimento.Poderia desenvolver um, serviria tanto pra validar as últimas modificações no GBF[3], quanto a aprender algumas coisas legais e ainda ter a oportunidade de conversar de igual pra igual com as pessoas(já que também era uma experiência nova para mim).
Experiência
- Como fazer a bolinha rebater na tela;
- Como fazer com que o CPU jogasse sem acertar todas e que não fosse totalmente burro;
- Como delimitar a duração do jogo;
Respondendo as essas perguntas comecei então a procurar minhas saídas:
“Como fazer a bolinha rebater na tela”
direção da bolinha por meio de ângulos, seno, cosseno e etc. Acabei procurando um livro de física para lembrar conceitos relacionados a mecânica, como movimentos uniformes, e etc, pois não lembrava mais nada disso, e nem sabia ao certo se isso resolveria, o fato é que o livro que recorri não era muito explicativo, na verdade era apenas exercícios (esses livros de hoje, parecem não serem feitos para que as pessoas aprendam sozinhas), comecei a ler, e reler, porém não consegui ver de fato a aplicação para o meu caso especifico, o qual seria apenas fazer a bolinha se desviar ou voltar. Sendo assim comecei a procurar pelo Google na esperança de achar alguns sources e acabei foi de fato achando um tutorial/apostila do Silveira Neto[7] (hehehe logo do Silveira, tão próximo e tão longe, ele também é daqui de Fortaleza, tive que ir na Internet para achar o que precisava), e lá tinha justamente o exemplo de uma bola sendo rebatida, aproveitei isso e adaptei para o pong. O fato é que a solução era super simples e eu procurando complicações físicas, bastava no caso inverter os valores de x e y para o que a bolinha voltasse na direção oposta exemplo:if (bola.y>480){
velocidade.y = – velocidade.y;
}bola.y+=velocidade.y;
“Como fazer com que o CPU jogasse sem acertar todas e que não fosse totalmente burro”
Acabei lembrando do PacZero[4], e que eu havia implementado um algoritmo de colisão circular para determinar quando os fantasmas podia “ver” o pacman, e resolvi aplicar o mesmo principio, sendo assim, resolvi criar uma circulo de visão para o cpu, assim, quando a bolinha entrasse em seu raio de visão ele moveria-se para rebate-la. Porém essa alternativa acabou mostrando que com um circulo de visão grande demais, o cpu não erra, e um pequeno demais ele erra muito, então por meio da tentativa, erro e estimativa defini que seu circulo de visão teria um raio de _VALOR_ pixel, e que conforme o cpu ganhe as partidas maior vai ficando seu circulo de visão para assim dificultar a vida do jogador, porém este ponto não ficou muito natural, tem certos macetes (jogadas) que fazem com que o cpu perca.
Esse é um ponto que está muito aberto as melhorias, visto que ficou altamente simplório o pseudo esquema de I.A. do CPU, pontos que eu talvez mude em versões futuras:
- Fazer com que o cpu se “distraia”, ou que “fique confiante demais” e só vá atrás da bola na última hora, o que causaria o efeito de incerteza se ele acertaria ou não
- Fazer com que ele decida onde bater na bola, use as três partes da raquete para provocar efeitos diferentes na bola;
- Fazer com que a visão aumente quando ele perder uma partida, pois assim na será um desafio maior para o jogador;
“Como delimitar a duração do jogo”
É algo que pode parecerer estranho, a definição desses valores, visto que 5 pontos podem ora parecer muito, mas se levarmos em consideração a Inteligência do “CPU” é algo que fica plausível visto que a velocidade da bola está programada para ir aumentado gradativamente e assim oferecer um desafio mais equilibrado para o jogador.
FeedBack
Por meio de um desses feedback do Daniel R. Matos do grupo DoG, foi que caiu a ficha de como a figura(sprite) que eu estava usando para representar a bola no jogo estava fora de contexto, isso se deve pq quando iniciei pensei em recriar como o pong fosse um jogo de futebol, porém com meus “grandes dons artísticos”, acabei extrapolando e indo para outra idéia bem oposta, algo que fosse meio que técnico e meio rudimentar, tanto é que podemos observar que as partes da arena do jogo (parte de cima e de baixo) são feitas de pedra, e o fundo do jogo é algo meio confuso/abstrato porém lembra como se fosse um possível gramado e os dois bastões(jogadores/raquetes) são metálicos, e realmente a bola tradicional de futebol ficava destoando o contexto, então depois de receber esse apontamento, corri para o Google a procura de um tutorial(Esfera 3D)[6] que ensinasse como fazer esferas no gimp.
E por fim temos o download do FZPong[8]:
Código Fonte: FZPong.1.1.src.zip
Versão Linux: FZPong.1.1.bin.linux.tar.gz
Versão MS-Windows e Linux: FZPong.1.1.bin.all.zip
T+!
Vida Longa e Próspera!
———————————————-
Referência
[1] Grupo DoG – http://groups.google.com/group/dog_/
[2] Pong do Charles – http://www.lia.ufc.br/~rockyspirit/pong.tar.bz2
[3] GBF – http://pjmoo.sourceforge.net/wiki/index.php/GBF
[4] PacZero – http://pjmoo.sourceforge.net/wiki/index.php/PacZero
[5] Pancada – http://pjmoo.sourceforge.net/wiki/index.php/Pancada
[6] Tutorial Esfera 3D – http://www.ogimp.com.br/modules/smartsection/item.php?itemid=7
[7] Blog do Silveira – http://www.eupodiatamatando.com
[8] PJMOO Downloads – http://sourceforge.net/project/showfiles.php?group_id=198186





