Arquivo

Textos com Etiquetas ‘FZPong’

Games made in Ceara


Blz?

Amigos pois num é que tive meus 15 segundos de fama :) ou quase, hehehehehe.
Tem algumas semanas que fui indicado por um amigo como uma espécie de referência em desenvolvimento de jogos aqui no ceará(como é que pode, neh?), o que resulto em uma ligação de uma repórter de um dos maiores jornais locais “O Povo”[1].

Onde conversamos sobre diversos tópicos como:

  • Quem desenvolve jogos no brasil e no Ceará
  • Onde as pessoas buscam apoio para iniciar
  • Como são feitos os jogos
  • Que tipos de profissionais estão envolvidos
  • Questões do mercado nacional e local
  • Plataforma de jogos: PC, Console, Celular
Ou seja, foram diversos assuntos que na verdade renderam um pouco mais de 20 minutos de conversa via telefone, onde conversamos inclusive sobre o novo cenário a “TV Digital”, onde falei de algumas características que assim como a mídia televisiva deve adaptar-se para esse novo meio o mesmo deverá ocorrer com os jogos focando neste novo perfil de consumidores os quais talvez a grande maioria nunca pode ter um console em casa, e que agora com os set-top-box aparece uma grande oportunidade tanto para a difusão dos jogos como para o mercado nacional.

Inclusive aproveito a oportunidade, para divulgar que agora na InfoBrasil[2] estarei apresentando um artigo que envolve jogos e a TVDigital, entitulado de “TuGA – Um middleware para Desenvolvimento de Jogos na TV Digital Interativa”, se você estiver por lá e tiver sem nada para fazer, quem sabe não poderia assistir :)

Continuando na entrevista tem alguns pontos que discordo um pouco, talvez algum ruído na ligação tenha causado uma impressão diferente do que era na realidade, ou talvez eu esteja interpretando errado, mas gostaria de comentar a passagem:

“Com isso o trabalho ainda é amador, sem profissionais que se voltem para cada etapa da criação”.

Amador não é em questão de qualidade, por sinal existem diversos trabalhos muito bons com uma ótima qualidade, porém deveria ter ficado mais claro que o amador é no sentido de não ganhar a vida com eles, e sim simplesmente pelo prazer de produzi-los. Outro fato é que geralmente quem mais se interessa por desenvolvimento de jogos são programadores o que de fato deixa as outras diversas áreas a desejar ou quando se tem muita sorte encontram-se programadores com dons artísticos quer seja para música, escrita e gráficos (o que não é o meu caso).

Outro detalhe é que de quebra ainda conseguimos divulgar a nossa nova lista GDJ-CE[3] e ainda existem links no portal para baixar dois jogos que fiz o FZPong[4] e o SpaceShooter[5]

T+!
Vida Longa e Próspera!

———————————————-

Referência
[1]http://digital.opovo.com.br/reader2/Default.aspx?pID=13&eID=771&lP=24&rP=25&lT=page
[2]http://www.infobrasil.inf.br/ComoParticiparEventos.aspx
[3]http://groups.google.com/group/gdjce
[4]http://pjmoo.wiki.sourceforge.net/FZPong
[5]http://pjmoo.wiki.sourceforge.net/SpaceShooter

FZpong 2.0

Foi lançado recentemente o FZpong 2.0, o qual faz parte do CDLivre 3.0[1].

O FZPong[2] é um pong com versões para MS-Windows e GNU/Linux, desenvolvido em SDL[3] / GBF[4] e licenciado em GPL, ou seja, você pode estudar o código fonte do FZPong para aprender a programar jogos para computador.

Se antes tudo parecia fácil, agora no FZPong 2.0 as coisas já não estão tão simples assim, o computador ganhou uma nova e melhorada percepção do jogo e que em alguns momentos vai lhe exigir bons reflexos e o uso de estratégias para conseguir vencer.

Como melhorias nesta nova versão temos:

  • Suporte a internacionalização, agora o jogo está disponível em português e inglês;
  • Melhoria na inteligência artificial do computador;
  • Aplicação de novos efeitos na bola de acordo com o local da rebatida;
  • Modificação das regras do jogo;
  • Melhorias no aspecto visual dos textos e janelas de mensagens;

———————————————-

Referência
[1]http://cdlivre.wordpress.com
[2]http://pjmoo.wiki.sourceforge.net/FZPong
[3]http://www.libsdl.org
[4]http://pjmoo.wiki.sourceforge.net/GBF
[5]http://davidferreira-fz.blogspot.com/2007/06/fzpong.html

FZPong

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.
Para tentar encontrar pontos comuns para troca de experiência foi proposto dois temas, sendo eles o desenvolvimento de um “Pong” ou de um “Tetris”, e logo em seguida tivemos o primeiro post com o primeiro jogo, era o Pong do Charles[2], o qual de fato acabou servindo de incentivo para mim, e me levou a pensar:

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).

E assim, motivado pela empolgação, desafio e pelo bate-papo, fui levado a desenvolver meu primeiro pong, meio tardiamente, mas fui, e realmente é como falo nas minhas palestras, é uma experiência legal, divertida, simples e viciante, pensei em adicionar mil coisas nele, como sistema de partículas e afins, mas resolvi deixa-lo o mais simples e fiel ao tradicional possível para que quem sabe sirva de exemplo para implementações de quem gostaria de começar a programar jogos.

Experiência

Apesar de já ter desenvolvido o framework GBF[3], e outros demos, não havia feito coisas de concepção simples e divertidas como o pong, e tive que pensar um pouco em como implementar um pong, algumas dúvidas que tive antes e durante o desenvolvimento foram:
  • 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”

Fazem anos que não via física, e cheguei a pensar em algo complexo como mudar a 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;

Isso faz com que se a bolinha bater no fundo da tela, volte. Simples não ? pra mudar a direção de X, basta fazer a mesma operação com o eixo X.

“Como fazer com que o CPU jogasse sem acertar todas e que não fosse totalmente burro”

Minhas primeiras idéias foi tentar fazer algo randomico que, quando a bolinha passase do meio da “quadra”, fosse feito um random para determinar se o cpu iria ou não pegar a bola, porém isso pareceu que ia ser baseado muito na sorte e que não ficaria muito natural, então antes de testar, resolvi abandonar a idéia.
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”

Pensando um pouco em como determinar as partidas, acabei me baseando na experiência do projeto de jogo “Pancada”[5](O qual ainda não concluí), que me lembrou do principio de rounds, porém no pancada esses intervalos de partidas são baseados no tempo, e para o FZPong pensei em utilizar o principio de tempo para determinar a duração de cada set, porém acabei chegando a conclusão que seria mais interessante que fosse espelhado em regras como jogos de volley/tenis, assim determinei que para vencer um set, um jogador precisa de ter 5 pontos de vantagem sobre o outro, e para poder vencer a partida, é necessário que um jogador tenha 2 sets de vantagem sobre o outro.

É 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

Esse é um aspecto muito importante, principalmente quando estamos desenvolvendo nos primeiros jogos, protótipos ou quando queremos repassar o conhecimento para as pessoas, por meio deles podemos fugir um pouco da realidade “técnica” e ver quais as reações de jogadores ou de outros desenvolvedores.

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.

Isso resultou na nova versão do jogo 1.1 só por causa da bola do jogo que agora é uma “esfera metálica” ou similar, bem assim espero eu.
Espero que esse relato possa ajudar ou clarear um pouco o processo de criação do FZPong e que combinado com conversas e o source do jogo possam ajudar no processo de criação e aquisição de conhecimentos relacionados aos jogos.

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

Categories: Games Tags: , ,