Voltar para a
Página Inicial

 

aula 1 - versão 1.0 para Visual Basic - 08 setembro 2000

Tutorial: Noções Básicas de Programação de Jogos
endereço atual: http://www.geocities.com/victormsantanna/

Criando jogos quase sem código

Victor M. Sant'Anna - victor@america.com

Introdução

Com o advento das linguagens do tipo RAD (rapid application development) baseadas em forms (janelas ou formulários, como preferir) como o Visual Basic, o C++ Builder ou o Delphi, onde botões e imagens podem ser arrastados e posicionados em janelas "docilmente", fica fácil criar jogos sem acréscimo de grandes trechos de código, desde que não estejamos interessados em fazer jogos muito complexos. Para o programador iniciante isso é muito importante, já que pode permitir a criação e, ao mesmo tempo, o exercício de programação de jogos. Enquanto aprende a programar, o estudante exercita sua capacidade de criação, frente as limitações que encontrará por ser um programador iniciante. O requisito mínimo passa a ser apenas conhecimento geral do ambiente que irá utilizar, ou seja, saber compilar o programa após posicionar elementos em uma janela e acrescentar algumas poucas linhas de código. O futuro programador de jogos não ficará decepcionado com a lentidão e monotonia que é aprender a programar, já que, normalmente, existe um longo tempo de aprendizado antes que o estudante consiga chegar da elaboração de um jogo à sua implementação sem interrupções causadas pela falta de conhecimento em programação. Por este enfoque, ao invés de "aprender a programar para criar o jogo dos seus sonhos", o programador tenta "criar jogos baseado no conhecimento atualmente disponível". Isso quer dizer que ao invés de ir atrás de "como fazer", ele poderá simplesmente escolher, dentro das suas limitadas possibilidades, "o que fazer". A mudança de paradigma é importante: a percentagem de jogos nunca terminados é muito maior dos que a de jogos terminados, mas não existe jogo bom se, em primeiro lugar, o jogo sequer existir. Terminar um jogo simples é mais importante do que criar um jogo maravilhoso que jamais será implementado!

Vamos começar com programas de uma linha só, usando o Visual Basic. Como é nosso primeiro programa e não sei em que nível de programação você está, vou tentar descrever os detalhes passo a passo, mas nas próximas lições espero ir direto ao ponto e escrever menos - sou meio preguiçoso. Aliás, é por isso que crio programas pequenos, com pouco código: 1000 programas feitos em 10 minutos podem ser tão divertidos quanto 10 programas que levaram 1000 anos para serem desenvolvidos, principalmente se você estiver esperando estes mil anos para começar a jogar... pelo menos, enquanto espera, terá algum "joguinho" para se divertir, não é?

Sorteando valores

Uma das funções mais importantes para quem cria jogos, é a função que gera uma série de números pseudo-randômicos. Com essa função, temos como retorno números aparentemente "sorteados", permitindo que simulemos resultados de lançamento de moedas, dados, geração de labirintos não planejados, comportamento aleatório de personagens, etc.

A função que retorna números pseudo-randômicos no Visual Basic, vale a pena dar uma olhada no help, é a função rnd():

Syntax:

Rnd[(number)]

To produce random integers in a given range, use this formula:

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

O exemplo que vem no help do Visual Basic é muito ilustrativo:

MyValue = Int((6 * Rnd) + 1) ' Generate random value between 1 and 6.

Vamos usar isso para gerar lances de dados e de moedas, mas antes um detalhe importante: freqüentemente estamos interessados em produzir uma série de números randômicos que seja a mesma a partir do início de um programa (ou de uma fase de nosso jogo), pois queremos que um certo evento (um labirinto específico para cada fase do jogo, por exemplo) seja o mesmo sempre, mas, ao mesmo tempo, gostaríamos que a geração fosse aleatória, isto é, não precisássemos criar manualmente os eventos de cada fase. Para gerar números "totalmente" aleatórios, usamos a sentença randomize no início de nosso programa (apenas uma vez), que inicializa a função randômica com um valor retirado do temporizador. O help do VB diz:

Syntax

Randomize [number]

O exemplo do VB:

Randomize ' Initialize random-number generator.

MyValue = Int((6 * Rnd) + 1) ' Generate random value between 1 and 6.

Com isso podemos começar nosso primeiro jogo, o "cara ou coroa".

Cara ou Coroa

1) Crie um projeto novo e coloque no form1 criado:

a) um botão (CommandButton) e

b) uma caixa de figura (PictureBox).

2) Selecione a caixa de figura criada (PictureBox1) e modifique (através da caixa de propriedades, a janela properties):

a) a propriedade AutoSize para True e

b) a propriedade Visible para False.

3) Dê um "copiar" (copy) nessa caixa de figura através do menu (edit/copy), do botão direito do mouse ou do teclado (Ctrl-C).

4) Cole no form a caixa de figura copiada: o Visual Basic pergunta se você quer criar um "array" de caixas de figura (array control), responda que não.

Devemos ter agora no form criado duas caixas de figuras (Picture1 e Picture2) e um botão (Command1):


Vamos colocar umas imagens nas caixas de figuras, desenho de uma moeda, cara na primeira caixa de figura e coroa na segunda. Como não sou um bom desenhista, passei no scanner uma moeda dos dois lados.

5) Dê copiar/colar nas figuras abaixo, cada uma na caixa de figura correspondente:


Ao invés de copiar uma figura de um programa (como o Paint) e colar numa caixa de figura do Visual Basic, alternativamente isso pode ser feito lendo bitmaps gravados (.bmp) através da propriedade Picture de cada caixa de figura.

6) Após ter as figuras corretamente mostradas no form, posicione as mesmas uma sobre a outra. Para facilitar, use a caixa de propriedades e modifique diretamente as propriedades top e left, ao invés de tentar sobrepor as figuras manualmente.

Nosso programa terá apenas um comando:

7) Dê um duplo clique no botão de comando para inserir as linhas de código que permitem tornar visível um controle e invisível o outro. O código deve ser algo assim:

Private Sub Command1_Click()

If Int((2 * Rnd)) = 1 Then

Picture1.Visible = True

Picture2.Visible = False

Else

Picture1.Visible = False

Picture2.Visible = True

End If

End Sub

8) Teste tudo, não esquecendo de salvar o programa antes de rodar. Agora você já tem um programinha que simula o lançamento de uma moeda.

9) Termine o programa

a) modificando o nome do form de form1 (propriedade Caption) para outro nome mais interessante (como "cara ou coroa" ou "lançamento da moeda", etc.),

b) mudando o nome do botão para "jogar moeda" (é a propriedade Caption do CommandButton) e

c) alterando o ícone do form (propriedade icon) por algum outro (o Visual Basic tem uma galeria de ícones). Se quiser, pode usar este ícone:

10) Crie o executável.

Eis o resultado:

Você deve estar se perguntando: isto é um jogo? Realmente, não: é apenas uma maneira de simular o lançamento de uma moeda para cima, mas, "cá pra nós", não é culpa minha se jogar moedas para cima é considerado um jogo por alguns. De um ponto de vista mais formal, isso que criamos não é um jogo, é um brinquedo. Podemos apostar com amigos, mas o fato de não termos placar, bolsa de apostas ou algo que nos incentive a jogar torna esse projeto um tanto "sem sal". Mas já é um começo!

Dados

Agora que o programa está funcionando, tente imaginar o que deve mudar para transformá-lo em um programa que simula o lançamento de dados ao invés de uma moeda. Consegue?

Você deve usar 6 figuras (não deve ser difícil desenhá-las no Paint), mas antes de dar um simples copiar/colar nas caixas de figura do form no Visual Basic, faça o seguinte:

1) se estiver usando o mesmo projeto anterior (pode gravar com outro nome), delete a caixa de figura 2 (PictureBox2). Se estiver começando um novo projeto, adicione um botão de comando e uma caixa de figura (PictureBox1).

2) Selecione e copie a caixa de figura criada no passo anterior (PictureBox1) e certifique-se (através da caixa de propriedades) que

a) sua propriedade AutoSize é True e

b) a propriedade Visible é False.

3) Dê um "copiar" (copy) nessa caixa de figura.

4) Cole no form a caixa de figura copiada: o Visual Basic pergunta se você quer criar um "array" de caixas de texto (array control), responda que sim. Esse passo é diferente do programa anterior, pois queremos ter um array com 6 caixas de figura, portanto repita o "colar" até ter as 6 caixas de figura. Cuidado para não colar as caixas de figura dentro umas das outras, mas sim no form criado.

Devemos ter agora no form 6 caixas de figuras (Picture1(0) a Picture1(5)) e um botão (Command1).

5) Cole as imagens dos dados abaixo (ou leia os bitmaps através da propriedade Picture) e ajuste as 6 caixas de figuras para ocuparem a mesma posição.

6) Apague o código do CommandButton criado anteriormente (caso tenha copiado o projeto anterior) e coloque esse:

valor = Int((6 * Rnd))

For i = 0 To 5

If i = valor Then

Picture1(i).Visible = True

Else

Picture1(i).Visible = False

End If

Next i

7) Salve e teste o programa. Se estiver tudo certo, mude nomes dos botões, do formulário e mude o ícone, salvando tudo outra vez. O ícone poderá ser inspirado nesse:

8) Crie o executável.

O programa ficará mais ou menos assim:


Melhorias

Observe que nos dois programas, a seqüência que é sorteada (de cara ou coroa ou dos números dos dados), apesar de aparentemente aleatória, é sempre a mesma cada vez que o programa é reiniciado. Quer dizer que, se o primeiro número dos dados quando o programa inicia for um 5, ele sempre será um 5 para o resto da vida... Para resolver esse problema em ambos programas, acrescente a sentença randomize em algum ponto do programa que é realizado apenas uma vez, como, por exemplo, em form_load():

1) dê um "duplo clique" no form de seu programa. A função Form_Load() deve surgir

2) acrescente a sentença randomize deixando o código assim:

Private Sub Form_Load()

Randomize

End Sub

Algum tipo de interação maior tais como permitir gravar os resultados e aceitar apostas, além de acrescentar som e música seriam ótimos aperfeiçoamentos para os programas acima. Veremos como fazer isso nas próximas lições.

Conclusão

Nenhum desses programas pode ser considerado um jogo, afinal não passam de brinquedos, mas alguns conceitos interessantes já podem ser testados e utilizados, principalmente sobre como mostrar resultados através de imagens e como produzir programas com pouco código. Além disso, parte dessas idéias estão presentes em vários programas. Como exercício imagine como modificar os programas acima para criar os seguintes jogos:

  • caça-níqueis
  • roleta
  • jogo da velha
  • batalha (jogo de cartas para duas pessoas em que a carta mais alta vence)
  • loteria esportiva
  • bingo
  • jogo de perguntas e respostas (sorteio aleatório das perguntas)

Alguns jogos podem não ser exclusivamente para computador. No meu caso em particular, a elaboração jogos educativos freqüentemente exige que jogos utilizem interação entre computador e objetos físicos (tabuleiros de jogos onde as crianças movimentem peões ou peças diversas). Imagine que poderia criar um jogo de bingo ou de roleta usando esses artifícios, o computador geraria os resultados pseudo-aleatórios e o resto do jogo seria realizado em tabuleiros impressos (ou em kit a ser impresso pelo usuário, por exemplo). Pense nisso!

 

Notas Importantes - LEIA!

© Victor M. Sant'Anna - victor@samerica.com - setembro de 2000

A utilização deste material implica na aceitação das condições exibidas neste quadro.

Autoria:

Este texto é de autoria de Victor M. Sant'Anna. O texto não deve ser alterado. Usamos a versão 4.0 do Visual Basic, mas os conceitos e comandos devem servir para todas as versões disponíveis. Caso encontre erros ou detalhes que gostaria de ver corrigidos, entre em contato no endereço acima. Seu nome figurará na lista de colaboradores nas próximas atualizações.

Objetivo e limitações:

Este texto deve ser utilizado somente para o aprendizado de noções básicas de programação de jogos. Não é um tutorial completo e nem pretende ensinar noções básicas de computação ou programação em geral. É aconselhável que o estudante tenha noções de programação antes de tentar utilizar este texto para aprendizado. Não nos responsabilizamos pelos erros advindos do mau uso das noções explanadas ou de problemas provocados por informações incompletas ou equivocadas.

Utilização do código-fonte:

O código exibido neste texto é de autoria de Victor M. Sant'Anna. Pode ser alterado e utilizado para fins de aprendizado ou comercialmente. Entretanto, caso venha a utilizar o código do autor, apesar de não ser obrigatório, gostaríamos de uma breve citação de fonte de origem (nosso nome ou endereço) na documentação ou nos programas confeccionados: isso poderia beneficiar novos estudantes de programação de jogos!

Utilização das imagens e sons:

É vedada a utilização das imagens ou sons contidos ou vinculados a esse texto ou ao material (software) que o acompanha. Ou seja: as imagens (desenhadas ou digitalizadas) e sons (criados ou digitalizados) não podem ser utilizados na confecção de novos programas ou material. Essa restrição é devida a diversidade de autoria do material aqui utilizado, parte das imagens ou sons tem seus direitos de cópia reservados e/ou pertencem a outros autores (sons e parte do material gráfico foi cedido por seus autores exclusivamente para a confecção deste texto e dos programas criados). Lista de autores responsáveis pela cessão de material sonoro e/ou gráfico vinculados à confecção deste texto: Vinícius Stein, Cesar Galvarros Juventino, Rogério de Almeida e Silva, Jorge Luiz Foques, Paulo Cesar Kielling Franco e Tatiane Ragazzon Sant'Anna.

Publicação e utilização deste material:

Este texto foi desenvolvido para uso individual (auto-aprendizado): não é recomendada sua utilização em aulas ministradas em cursos e/ou por terceiros. Apesar de não recomendável, a cópia e utilização deste texto, para fins de ilustração de conceitos em aulas ministradas em cursos e/ou por terceiros, pode ser realizada, sem permissão do autor, somente se cumpridas integralmente as condições de uso e restrições abaixo relacionadas:

1) Condições de Uso

1.1) este texto ("página www") deve ser mantido integralmente;

1.2) a utilização desse material deve utilizar o computador como mídia:

1.2.1) on-line (Internet usando navegador para exibição em tempo real) ou

1.2.1) off-line: a página pode ser gravada em meio eletrônico, ou seja, disquetes, DVD, CD-ROM, disco rígido ou outro meio "eletrônico" qualquer;

1.3) não pode ser cobrado do aluno, pela utilização deste material, nenhum tipo de taxa direta ou indiretamente. Isso significa que o uso deste material não deve fazer parte do número de horas-aula remuneradas do curso ou aulas ministradas por terceiros. Ou, em outras palavras o uso deste material só é permitido em caso de "aula extra gratuita".

2) Restrições

2.1) Este texto não pode ser impresso para utilização como material didático por instituições ou em aulas particulares, aulas de qualquer tipo ou projetos de qualquer natureza.

2.2.1) Observação: para uso individual (auto-aprendizado) são permitidas cópias impressas em qualquer quantidade.

Colabore com a boa utilização deste material

Use os conhecimentos adquiridos responsavelmente

© Victor M. Sant'Anna - setembro de 2000