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.oocities.org/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!
|