Jogos – Introdução

Programação de Jogos

Conceitos básicos

Há diversos tipos de Jogos e formas de interação com eles, por exemplo, nos jogos de tabuleiro e jogos de textos podemos aguardar o comando do jogador para processar o próximo passo do jogo, enquanto que nos jogos de ação e simuladores devemos ter um processamento contínuo para dar fluidez ao jogo mesmo na ausência de comandos do jogador.

Essa diferença pode ser descrita como tratamento dos ciclos (repetições) por Eventos ou por Tempo, onde os por Eventos são os que aguardam as ações do jogador para que as repetições ocorram, e os por Tempo são os que tem continuidade, mesmo sem ações do jogador, com o controle das repetições baseados em tempo, que devem ocorrer sempre, em intervalos regulares

Podemos definir assim: Um jogo é um conjunto de tarefas específicas que se repetem em um determinado conjunto de dados para gerar um entretenimento interativo. Desta definição, gostaria de enfatizar as “tarefas que se repetem” (o ciclo, o processamento), o “conjunto de dados” (o estado atual do jogo) e o “entretenimento interativo” (diversão e participação).

Na área de desenvolvimento de jogos, onde o principal foco são os jogos de ação, é comum ouvir o termo Game Engine – Motor de Jogo – tanto por designers como por desenvolvedores de jogos. Mas o que é e para que serve uma Game Engine? O que preciso para criar um jogo em Java ou outra linguagem qualquer?

Game Engine tem a ver com todo o processo de desenvolvimento do jogo e também existem bibliotecas (APIs)de funções e classes que implementam Games Engines, com suas soluções padrões para vários problemas conhecidos, como tratamento de personagens, imagens, sons, colisões, leis da física, terceira dimensão, interfaces com usuário etc.

Estrutura básica de um jogo

Uma das tarefas mais complicadas para programadores que decidem se aventurar na área de desenvolvimento de jogos é, sem dúvida, organizar a execução de todas as tarefas envolvidas no desenvolvimento de um jogo. Na realidade, você pode ler vários tutoriais relacionados a API que pretende usar, fazer alguns exemplos que encontrar por ai, mas estes tutoriais dificilmente te darão o segredo básico sobre onde colocar cada ferramenta para você ter aquele jogo que você deseja. Todos os jogos parecem simples de desenvolver no começo, mas o nível de dificuldade vai aumentando a medida que decidimos acrescentar as funcionalidades neste jogo.

Muitos jogos são desenvolvidos usando a mesma lógica no início, tendo as mesmas formas de apresentação visual e detalhes iniciais. Num nível mais alto de organização do processo de desenvolvimento de um jogo de computador, podemos agrupar as tarefas do jogo em 3 componentes principais, que serão requisitados durante a execução do jogo. Estas fases podem ser chamadas de Fase de Inicialização, Fase do Jogo em Ação e Fase de Finalização. Basta entender as responsabilidades de cada uma das fases, para entendermos todo o processo por trás dos jogos.

Fase de Inicialização do Jogo

Durante a Fase de Inicialização do Jogo, vários elementos necessários para o jogo são carregados para a memória. Estes elementos incluem imagens, sons, arquivos de dados e todos os outros elementos que serão necessários para o jogo ser executado. Todas as classes que serão usadas no jogo devem ser instanciadas e preparadas para uso nesta fase. Este processo chama-se Caching e é muito comum em jogos criados para plataformas mais limitadas para jogos, como o PC. Carregar dados do disco durante a execução do jogo pode causar problemas de performance, por isso é sempre aconselhável fazer o cache dos elementos necessários na memória, para futuras necessidades. Plataformas mais específicas para jogos oferecem funcionalidades muito melhores que o caching para esta tarefa.

Fase de Finalização do Jogo

A fase de finalização do jogo faz exatamente o contrário da fase de inicialização do jogo, que é remover todos os elementos da memória, para garantir que a execução do jogo seja terminado com sucesso. Em Java, o programador não precisa se preocupar com a gestão da memória, mas quando se programam jogos em particular, existem outros aspectos a ter em consideração na hora da finalização, como escrever logs, gravar preferências dos usuários, recordes alcançados e todos os elementos que serão usados na próxima execução do jogo.

Fase de Execução do Jogo

Deixamos esta fase para o fim, por ser uma fase um pouco mais complicada que as anteriores. A fase de execução do jogo consiste basicamente em controlar o conceito fundamental da programação de um jogo, chamado Game Loop – Ciclo de Jogo. O Ciclo de Jogo é basicamente um ciclo normal, que executa as tarefas do jogo repetidamente até que o utilizador decida terminar o jogo ou o jogo termine por outro motivo qualquer.

Basicamente, um ciclo do jogo é composto por 5 fases. Estas fases são: Ler a opção do utilizador, processar esta informação e atualizar o jogo de acordo com esta informação, verificar finalização, controlar o tempo ou a velocidade do jogo e exibir o resultado na tela.

Em termos de algoritmos, poderiamos representar este ciclo da seguinte maneira:

repetir enquanto o jogo não termina:

  1. Entradas de dados – ler o dado do usuário
  2. Atualizar o Jogo – processamento e movimentações diversas
  3. Verificar finalização – sucesso ou fracasso
  4. Controlar o tempo – quantidade por segundo
  5. Exibir alterações – atualizar a tela

Essa estrutura apresentada é geralmente criada como métodos (funções) separados, pois é claro que cada uma destas etapas deve realizar muitas outras tarefas para a sua realização, como ao ler o dado do usuário, por exemplo, onde devemos pensar no hardware de entrada dos dados, teclado, mouse ou Joystick, como será essa interação, quais comandos serão válidos etc.

Ciclo de Jogo – Game Loop – é a repetição principal da execução de um jogo – o Jogo propriamente dito – é quando você controla a ação, esta jogando, interagindo com os outros personagens e cenário, a animação está sendo realizada etc.

 

Ciclo de Jogo
Após o início do ciclo de jogo, deve-se testar os comandos do jogador, recalcular posições de personagens, cenários, colisões, inimigos etc. Exibir a nova situação do jogo e controlar o tempo de execução para que o jogo não fique muito rápido ou muito lento.
Isso deve ser feito a cada ciclo até que algo que termine o jogo (ou fase) aconteça, como o fim do jogo ou fim das vidas do jogador.
Esta foi apenas uma introdução ao assunto, mas acredito que seja o suficiente para compreender o básico sobre o funcionamento de um jogo e começar a pensar em seus próprios jogos, em Java ou outras linguagens como Python, Lua ou C++

Esquema de um Ciclo de Jogo

Game Loop ou Ciclo de Jogo é a repetição principal da execução de um jogo – é o Jogo propriamente dito – é quando você controla a ação, esta jogando, interagindo com os outros personagens e cenário, a animação está sendo realizada etc.

Após o início do ciclo de jogo, deve-se testar os comandos do jogador, recalcular posições de personagens, cenários, colisões, inimigos etc. Exibir a nova situação do jogo e controlar o tempo de execução para que o jogo não fique muito rápido ou muito lento.
Isso deve ser feito a cada ciclo até que algo que termine o jogo (ou fase) aconteça, como o fim do jogo ou fim das vidas do jogador.

Leave a Reply

Your email address will not be published. Required fields are marked *