Pygame Tutorial – Parte 4

2 Agosto, 2008

Avançando na criação do nosso jogo, agora vamos adicionar os movimentos da bola e tornar os jogadores interativos através do mouse e teclado, para isso vamos ver uma pouco sobre eventos.

Em Pygame uma fila com os eventos ocorridos é automaticamente mantida pelo sistema para facilitar sua manipulação. Cada novo evento gerado é adicionado ao final dessa fila, que deve ser percorrida em todos os frames fazendo uma iteração sobre o retorno da função pygame.event.get (). Abaixo um exemplo de como detectar se a tecla esc foi pressionada para terminar o jogo.

def play (self):
         while True:
             for event in pygame.event.get ():
                 if event.type == KEYDOWN and event.key == K_ESCAPE:
                     exit ()

Leia o resto deste post »


OpenGL Tutorial – Parte 3

22 Julho, 2008

Finalmente começando o tutorial sobre OpenGL e SDL vou mostrar algumas funções de configuração de ambos. Essa primeira parte é a mais complicada delas por introduzir muitos conceitos novos e grande parte deles são bem complicados. Não é preciso se preocupar caso algo não fique muito claro pois alguns trechos serão revisados melhor adiante.

No arquivo com o código do programa há duas classes. A classe principal, chamada Game, controla os aspectos comuns do jogo. Já a outra, Screen, é usada para manipular a janela. Há uma breve explicação sobre o mecanismo de desenho e cores, assim como o tratamento de eventos comuns.

O método update da classe Game é o que merece mais atenção. Nele estão os conceitos mais importantes desse tutorial, como a manipulação primitiva de uma matriz e o posicionamento de pontos no espaço. Os parâmetros das funções podem ser modificados livremente (não tão livremente assim) para que suas funções fiquem mais claras e seus resultados mais evidentes.

Leia o resto deste post »


OpenGL Tutorial – Parte 2

8 Junho, 2008

No tutorial passado disse que ia explicar mais um pouco sobre OpenGL, mas vou deixar isso pra outro artigo. Nesse vou mostrar como você instala as bibliotecas e monta um ambiente agradável de programação. Vou dividir em duas partes, cada uma tratando de um sistema operacional.

Linux:

Se você está usando o Linux então é muito provável que entenda dele mais do que eu. Para escrever seu programa você pode usar qualquer editor comum, Kwrite, Kate, Anjuta, Whatever. Todos esses facilitam a edição de códigos e já vem instalados com as distribuições. Já o SDL é instalado de duas formas. A primeira é baixando o pacote diretamente do site deles.

Quase certeza que é esse o pacote certo.

Ou pelo apt-get, via synaptic que acho mais fácil. Abaixo a instalação no Kurumin.

Leia o resto deste post »


Pygame Tutorial – Parte 3

4 Junho, 2008

No tutorial anterior eu disse que da próxima vez falaria sobre eventos e as funções de desenho. Entretanto, o exemplo de jogo que eu sugeri, que foi o Pong, exige que eu explique alguns conceitos de manipulação de tempo e se eu falasse sobre tudo isso num mesmo tutorial seria muita coisa.

Vamos então começar pelo módulo draw, que permite desenhar formas básicas em uma superfície. Caso você precise usar somente um retângulo ou circunferência não será necessário criar um bitmap com essa imagem o que dá uma certa facilidade durante a programação e diminui o tamanho final do seu jogo.

Todas as funções recebem como primeiro e segundo argumento respectivamente: a superfície a ser desenhada e a cor do desenho. O último argumento geralmente representa a espessura da linha, caso esse valor seja zero, a figura será desenhada cheia. Essas funções retornam um retângulo que indica qual parte da superfície foi alterada, assim é possível atualizar somente a área modificada.

A documentação completa desse módulo pode ser encontrada aqui. Apesar do conteúdo estar em inglês ele é bem intuitivo e acredito que ninguém terá muitos problemas.

Com criatividade e disposição dá pra fazer qualquer coisa somente com essas primitivas. Eu que não tenho nenhum dos dois consegui fazer algo.

Leia o resto deste post »


OpenGL Tutorial – Parte 1

30 Maio, 2008

Demorou um pouco, mas finalmente consegui começar esse tutorial. Na verdade ele não começou ainda. Nesse post vou somente fazer uma introdução básica ao OpenGL e algumas considerações.

Quero mais uma vez deixar bem claro que esse tutorial é experimental. Eventualmente algum erro será encontrado, seja numa implementação ou explicação, esse erro será corrigido o mais breve possível. Também não poderei garantir que o código criado fará o que se propõe da melhor forma possível.

Agora vamos ao que interessa.

Leia o resto deste post »


Pygame Tutorial – Parte 2

4 Maio, 2008

Na segunda parte do tutorial sobre Pygame veremos como adicionar e mover objetos na tela. Usaremos principalmente as classes Surface e Rect.
Uma breve descrição das classes.
Surface: Os objetos da classe Surface são usados para manusear imagens. Podem ser criados diretamente através de pygame.surface.Surface ou indiretamente, a partir de uma imagem guardada em disco com pygame.image.load ou na criação da janela do jogo com pygame.display.set_mode.
As imagens carregadas com pygame.image.load podem ser de qualquer tipo, dentre os mais comuns, bmp, jpg, gif, png e alguns outros. As transparências são automaticamente criadas para imagens que as permitem. É recomendado o uso dos métodos convert e convert_alpha que convertem a quantidade de bytes por pixels da imagem para a mesma da tela, o que facilita a impressão.
O método mais importante dessa classe e o blit. Com ele você pode imprimir uma imagem em outra, o que é feito com freqüência na Surface da tela.
Rect: A classe Rect e simplesmente a abstração de um retângulo. Nela há dados como x e y, que são as posições inicias do retângulo, e w e h, que são a largura e altura do seu retângulo. Há também métodos para checagem de colisão, movimentação e união.

Abaixo eu mostro o resultado do programa de exemplo, que é simplesmente uma bola se movendo na tela.

Leia o resto deste post »


Show Me Do

2 Maio, 2008

Programação parece ser uma área bem complicada. Mas deve ser muito excitante descobrir como são feitos aqueles programas que você usa o dia todo (leia-se jogos). Como você não tem “choice (idade, tempo, inteligência, dinheiro, saco)” pra fazer uma faculdade relacionada a isso, você procura aquele seu amigo entendido do assunto e implora pra que ele te explique alguma coisa. Fazendo isso, você só confirma a sua teoria que computação parece ser uma área bem complicada. Seu amigo te explica tudo, pergunta se entendeu, você responde que não, ambos se irritam e ninguém se entende mais.

Uma olhada rápida na Internet resulta numa infinidade de livros com conteúdo bizarro e impossível de acompanhar. Tenta assim mesmo por alguns minutos e desiste logo em seguida por sentir que não esta conseguindo entender mais nada. Baixa alguns códigos simples e lembra quer você não sabe o que é um “while”.

No final do dia, encontra um site chamado Show Me Do, lá tem muitos vídeos-aula sobre programação para iniciantes, principalmente numa linguagem chamado Python que você já ouviu falar muito bem e até mesmo alguns sobre jogos. Engraçado encontrar poucos sobre aquele de fazer jogo pra celular.

Você finalmente consegue começar com os seus estudos e já é capaz de voltar a ler aquele livro que tinha abandonado.

Quando percebe, já esta trabalhando em um grande N japonês que desenvolve alguns dos jogos mais inovadores dos últimos tempos, sem se preocupar com gráficos e outros supérfluos, focando principalmente na jogabilidade.

Depois acorda e vê que o final é mentira.

Kibado do Julião da comunidade GDP Ufes no Orkut.


Intermediate Game Tutorial 1

23 Abril, 2008

Resolvi começar essa série porque tem certas informações que eu realmente gostaria de ter recebido quando estava aprendendo a programar games. Digo isso pois a maioria dos tutoriais te ensinam a fazer um jogo de pong, fazer um boneco se mexer, desenhar coisas na tela, mas quando chega na parte boa, que é estruturar algo levemente mais complexo, todos eles acabam.

Parte I

A primeira coisa que me intrigava era como fazer as coisas acontecerem na tela, simultaneamente (e.g. como dar uma tacada em um jogo de sinuca e fazer todas as bolas se mexerem, colidirem e possivelmente serem mortas). Bom, a grande verdade é que as coisas não acontecem ao mesmo tempo.

O que acontece geralmente é que existe uma classe chamada Engine que reune todas as entidades do jogo e tem um método Run() que faz a mágica em questão. No exemplo do jogo de sinuca, as classes dentro da engine seriam: jogador, bolas, mesa, física, interface. Na tal função “faz tudo”, cada classe teria a oportunidade de executar seus métodos pertinentes.

Como exemplo dessa interação de classes, uma função que executa uma tacada:

// Executa uma tacada
Engine::ExecuteShot ()

   // Seta a velocidada da bola branca
   cueBall.SetSpeed(Player.Shot())   

   // Enquanto as bolas tiverem velocidade
   while (!Physics.Done(BallArray))

      // Para cada bola do jogo
      foreach (ball in BallArray)

         // Move a bola
         ball.Move()
         // Considera o atrito
         Physics.Attrict(ball)

         // Trata colisao com o buraco
         Physics.HoleCollision(Table, ball)
         // Toca o som da colisao
         Interface.PlayHoleSound(Physics.LastCollision())
         // Atualiza a pontuacao
         Player.RefreshScore(Physics.LastCollision())

         // Trata colisao com outras bolas
         Physics.BallCollision(BallArray, ball)
         // Toca o som da colisao
         Interface.PlayBallSound(Physics.CollisionArray())

         // Trata colisao com a mesa
         Physics.TableCollision(Table, ball)
         // Toca o som da colisao
         Interface.PlayTableSound(Physics.LastCollision())

      // Desenha mesa, bolas, pontuacao, etc
      Interface.Draw(BallArray, Player)

   return

Na prática, isso desloca as bolas em pequenas distâncias, verificando colisões com outras bolas, cantos da mesa e buracos. Em cada verificação, as velocidades das bolas são tratadas pelo módulo da física. Além disso, a classe interface é responsavél por tocar os sons e desenhar coisas na tela. Portanto, apesar do resultado final ser algo aparentemente simultâneo, a engine do jogo executa pequenos passos.

Vale lembrar que cada ciclo da engine, como o while do exemplo acima, é executado várias vezes por segundo. Pense, no caso da sinuca, que seriam feitos cerca de 40 frames por segundo (daí o motivo de se mover em curtas distâncias).

O objetivo dessa primeira parte é apenas mostrar como interagir as classes em alto nível. A maneira como cada uma das classes é composta e implementa os métodos não entra nessa discussão inicial.

Até a próxima…


Pygame Tutorial – Parte 1

21 Abril, 2008

Aqui começa a primeira parte do tutorial sobre Python e Pygame. Já falei brevemente sobre esse conjunto num post anterior, então vamos direto ao assunto.

Python pode ser baixado aqui, a última versão no momento é a 2.5.2. Já Pygame pode ser baixado aqui, tive problemas de desempenho com a última versão (provavelmente envolvendo a placa de vídeo), o que diminuiu muito a taxa de frames por segundos, então estou usando a versão 1.7.1, o que não prejudicará a portabilidade do código.

Pra quem já programou em outras linguagens, Python pode ser facilmente aprendida através do manual que vem na instalação (em inglês). Quem nunca programou também pode se dar bem com a própria documentação da linguagem, ou algum dos tutoriais do Python Brasil.

A primeira parte do tutorial e muito simples e aborda somente a inicialização do pygame e estrutura básica de um jogo. No próximo tutorial explicarei mais sobre janelas e mostrarei as primeiras imagens.

O código pode ser baixado aqui, devido a restrições de upload do wordpress, não é possível hospedar arquivos .py ou .zip e afins, logo basta remover a extensão .doc e usar normalmente.


O que fazer?

18 Abril, 2008

Uma das motivações para criar esse blog foi (tentar) criar alguns tutoriais sobre programação de jogos, principalmente para aqueles que nunca fizeram um jogo ou sequer programaram. Lembro quando comecei a brincar com essa área, tudo o que eu mais queria era que alguém aparecesse e falasse o que eu deveria fazer, qual linguagem usar, onde encontrar os recursos, dentre muitas outras dúvidas.

Existem várias linguagens de programação, como também várias A.P.I’s gráficas, e é difícil para o usuário iniciante escolher uma de fácil aprendizado, e que atenda suas necessidades.

Farei uma análise breve de algumas linguagens e bibliotecas que conheço, mostrando os pontos positivos e negativos das que já usei e conheço bem. Quero deixar claro que falarei baseado na minha experiência, que é bem limitada, logo é de se esperar que haja alguns erros ou incoerências. Tentarei deixar claro quando não tiver certeza sobre determinado assunto.

Leia o resto deste post »