Um
dos tipos de jogos mais jogados (e, no entanto, um dos menos discutidos),
os jogos de baralho certamente representam uma área de
conhecimento obscura dentro do cenário de desenvolvimento
de jogos.
Para
resolver alguns desses problemas, o club
TILT está disponibilizando um conjunto
de componentes para o desenvolvimento de jogos de baralho, no
estilo daqueles que acompanham o Windows.
Alternativas
Os
componentes usados nesse artigo são de autoria de Giulio
Ferrari e são distribuídos gratuitamente. Além
desses componentes, pode-se também utilizar as funções
da biblioteca cards.dll, que é uma biblioteca padrão
do windows.
Porém,
os componentes de Ferrari são mais simples de usar e o
resultado é indistinguível daqueles produzidos pelas
funções da cards.dll.
Baralho
e Cartas
O
primeiro componente usado na criação desse jogo
será o TDeck.
Ele representa um baralho, contendo 52 cartas de 4 naipes (suits)
e 13 valores (values) diferentes (lembrando-se de que as cartas
Valete, Rainha e Rei valem respectivamente 11, 12 e 13 e o Ás
vale 1).
Para
criar um baralho, basta criar um objeto desse tipo, passando como
parâmetros um formulário e a posição
onde o baralho deve se encontrar. Pegar uma carta do topo do baralho
também é igualmente simples: basta chamar a função
getNextCard passando
como parâmetro uma variável do tipo TCard.
Essa
classe de objetos é descendente de TGraphicControl,
o que significa que ela é responsável por sua própria
renderização; não é preciso nenhum
código por parte do programador!
Os
principais elementos dessa classe são: "value"
que contém o valor (de 1 à 13) da carta, "suit"
que indica o naipe da carta (respectivamente espadas, ouros, paus
e copas) e, finalmente, showDeck que indica se
o valor da carta está sendo mostrada (valor false) ou se
é o baralho (valor true).
O Jogo
Para
demonstrar como utilizar esses componentes, um pequeno jogo será
criado. Ele consiste em uma rodada de truco simplificado: O jogador
e o computador retiram três cartas do baralho (cada), Em
seguida, o jogador coloca uma carta "na mesa", seguido
pelo computador. Aquele com a maior carta ganha um ponto, e quem
obtiver mais pontos (dentro da rodada), ganha o jogo.
O
primeiro passo do jogo é embaralhar as cartas, limpar a
"mesa" de jogo, selecionar as cartas do jogador e do
computador e zerar as variáveis de pontuação.
Pegar uma carta (para o jogador) consiste em chamar o método
getNextCard do
baralho (que retorna a carta no topo do baralho), colocá-la
na posição adequada (alterando as propriedades left
e top), indicar que esta carta deve ser mostrada
e colocar o evento onClick
da carta para um método do formulário principal
que fará uma jogada quando a carta for clicada. Simplificadamente:
baralho.GetNextCard(jc1);
jc1.Left:= 170;
jc1.top:= 256;
jc1.ShowDeck:= false;
jc1.OnClick:= onCartaJogClick; |
O
código para as cartas do computador é ainda mais
simples: basta pegar a próxima carta do baralho e colocá-la
na posição desejada.
O
próximo passo para o jogo é responder ao evento
onClick das cartas
do jogador, o que será feito dentro do método onCartaJogClick.
Dentro desse método, a carta selecionada é movida
para o meio da mesa, essa carta é definida como a carta
selecionada pelo jogador (que será usada para a decisão
de qual carta o computador irá jogar) e, finalmente, a
rotina de decisão do computador é chamada.
Esse
é o método que faz a maior parte do processamento
do jogo. Em primeiro lugar, o computador decide qual carta jogar
baseado-se no pequeno algoritmo abaixo:
1-
Se uma das cartas do computador é maior que a carta selecionada,
jogar essa carta.
2- Senão, jogar uma carta aleatória.
Esse
algoritmo é implementando como uma série de "ifs",
encadeados, que testam essas condições para a primeira,
a segunda e a terceira carta.
Depois
de decidida qual carta será jogada, ela é movida
para o meio da mesa e eliminada da "mão" do computador.
Finalmente,
após a efetuada a jogada, a condição de vitória
é testada: se a do jogador é maior, ele ganha um
ponto. Se a do computador é maior ele ganha um ponto. E
em caso de empate, ambos ganham um ponto.
Quando
um dos jogadores obtiver 2 pontos de vantagem sobre o outro, ou
quando o número de rodadas terminar, uma vitória
(do jogador ou computador) ou empate é declarado.
Finalizando
Embora
o jogo criado seja bem simples, ele demonstra todos os conceitos
envolvidos na criação de um jogo de baralho comum:
embaralhamento, posicionamento e seleção de cartas.
Algumas
melhorias que podem ser adicionadas: transformar o jogo em uma
partida de truco completa (levando em consideração
as cartas especiais), armazenar uma pontuação através
das partidas ou melhorar o algoritmo de decisão do computador.
Até
mais, e boa programação!
|