JOGO DE UNO

 

Por Alessandro Girardi

 

 

 

O Uno é um jogo de cartas muito popular, jogado principalmente no Hemisfério Norte. Consiste basicamente em descartar uma carta da mesma cor ou mesmo número daquela que está na mesa, e o objetivo final é ser o primeiro a se livrar de todas as cartas da mão.

 

Cada jogador inicia a rodada com 7 cartas, sendo que as demais permanecem na pilha de compras com a face virada para baixo. A carta de cima do bolo é colocada na pilha de descarte com a face virada para cima. O jogador, na sua vez, deve jogar uma carta da mesma cor ou mesmo valor da carta da mesa. Por exemplo, se a carta da mesa é um 7 vermelho, o jogador deve jogar uma carta vermelha de qualquer valor ou um 7 de qualquer cor. Pode jogar também um coringa (Wild). Se o jogador não possuir na mão nenhuma carta que atenda a essas exigências, deve comprar uma nova carta. Se ele puder jogar a carta que comprou, muito bem. Senão, a vez passa para o próximo jogador.

 

Quando tiver somente uma carta na mão, o jogador deve dizer "UNO!" (que significa "um"), sob a pena de ter de comprar 4 cartas do bolo se não o fizer por alguns segundos depois de descartar a penúltima carta. A rodada termina no momento em que um jogador não tiver mais nenhuma carta na mão. Os pontos são somados de acordo com os valores das cartas que ficaram nas mãos dos demais jogadores.

 

As cartas da mão do jogador humano estão posicionadas na parte de baixo da tela, com as faces voltadas para cima. Para jogar uma carta, basta clicar duas vezes com o mouse sobre a carta desejada. Para comprar uma carta do bolo, clique com o mouse sobre a última carta do bolo. Para passar a vez, deve-se clicar no botão "Passar", localizado acima das cartas da mão.    As cartas da mão dos jogadores virtuais estão localizadas nas laterais da tela, com a face voltada para baixo. O jogador humano não tem acesso a elas.

 

Um quadro vermelho ao redor das cartas do jogador indica de quem é a vez de jogar. Os jogadores virtuais jogam automaticamente. Quando chega a vez do jogador humano, o computador espera até que a jogada seja efetuada.

           

O jogo de Uno é composto por 108 cartas de em um baralho específico, divididas em 4 grupos iguais, cada um identificado por uma cor diferente: azul, amarelo, vermelho e verde. Somente os coringas (Wild e Draw four) não possuem cores. As cartas disponíveis no jogo são as seguintes:

 

 

 

 

Quando um jogador possuir somente uma carta na mão, deve dizer "Uno!". O jogador humano pode dizer “Uno” a qualquer momento clicando no botão "Uno!". Caso o jogador esqueça de dizer “Uno” quando possuir somente uma carta, é penalizado com a compra de 4 cartas.

           

A construção do jogo

 

A implementação do Jogo de Uno no computador segue os princípios básicos de qualquer jogo de cartas virtual, sendo dois os principais desafios: a interface gráfica e a inteligência artificial dos jogadores virtuais.  Esta versão do jogo foi implementada em linguagem C++ orientada a objetos, utilizando-se o compilador Borland C++ Builder versão 5.0 para Windows. A figura 1 mostra a tela principal do jogo.

 

Figura 1 – Tela principal do Jogo de Uno

 

 

Embaralhando as cartas

 

O embaralhamento das cartas é feito de maneira aleatória, usando a função rand( ). Inicialmente, as cartas estão ordenadas na variável deck[ ], que é um vetor de ponteiros para as cartas, em ordem de cor e numeração. Após, elas são trocadas de posição duas a duas, 109 vezes, de maneira aleatória, segundo o algoritmo abaixo:

 

   srand(time(0));

   for (int i=1; i<109; i++)

   {

      int j = rand() % 109;

      if (j!=0)

      {

         carta temp = deck[i];

         deck[i] = deck[j];

         deck[j] = temp;

      }

   }

 

 

Feito isto, a distribuição das cartas aos jogadores pode ser feita de forma linear, ou seja, as 7 primeiras cartas do vetor deck[ ] para o primeiro jogador, da 8ª à 14ª carta ao segundo jogador, e assim por diante. As cartas restantes vão para a pilha de compras.

 

A jogada do jogador virtual

 

O jogador virtual deve possuir um mínimo de inteligência para que o jogo não se torne monótono e desinteressante. Na sua jogada, o jogador virtual avalia as cartas que possui na mão e verifica qual delas é candidata a ser jogada (de acordo com a cor e o número da carta que está na mesa). Para cada possível carta a ser jogada é atribuído um peso que indica a sua probabilidade de ser descartada. O peso é atribuído de acordo com os seguintes critérios:

 

1)      Quanto maior o número da face da carta, maior o seu peso, pois vale a pena descartar as cartas de número maior primeiro. Cada carta numérica possui como peso o seu valor facial, que vai de 0 a 9;

2)      As cartas de ação do tipo “Reverse”,  Skip” e “Draw Two” possuem peso 20;

3)      As cartas coringa (“Wild” e “Draw Four”) possuem peso 30;

4)      Caso o próximo jogador possua menos de 4 cartas na mão, o peso das cartas coringa e “Draw Two” são multiplicados por 10.

5)      A cada carta é multiplicado um número aleatório entre 0 e 1.

 

A escolha da carta a ser descartada é feita através da verificação, dentre as possibilidades, daquela que possui o maior peso. A multiplicação de um número aleatório faz com que a jogada não se torne tão previsível para o jogador humano. Ou seja, o jogador virtual tem boas chances de descartas a carta com o maior valor facial que possui, mas também pode “enganar” o oponente humano descartando uma carta menor. Esta heurística, na verdade, é baseada em uma estratégia de jogo na qual dá-se preferência ao descarte das cartas de maior peso primeiro, para que no final as cartas na mão não pesem tanto na pontuação.

 

Verificação de jogada válida

 

A cada jogada do jogador humano é preciso que se faça uma verificação se a carta descartada é válida ou não. Para isso, foram introduzidas regras de controle que impedem o descarte de uma carta de cor ou número diferente da que está na mesa. Além disso, também é necessário processar a carta descartada para aplicar alguma eventual penalidade ao próximo jogador (como comprar duas cartas caso um “Draw Two” for descartado) ou inverter o sentido da rodada (no caso do “Reverse”).

 

Interface gráfica

 

A interface gráfica é um dos aspectos principais a serem considerados em jogos interativos. No caso do Jogo de Uno, utilizou-se a área inferior da tela para mostrar as cartas do jogador humano, a área central para as cartas da mesa e as laterais para a representação dos jogadores virtuais. Na sua vez de jogar, um retângulo vermelho envolve as cartas do jogador. Este retângulo permanece até que seja feita uma ação pelo jogador humano ou durante um certo período de tempo quando é a vez do jogador virtual. Neste último caso, o atraso serve apenas para que o jogador humano verifique quem está jogando e qual carta descartou. Para jogar ou comprar da mesa, o jogador humano deve simplesmente clicar com o mouse sobre a carta desejada.

Visando aumentar a sensação de se estar jogando Uno realmente, as cartas foram desenhadas exatamente como na versão em papel do jogo, tanto a face quanto o verso. Estas representações nada mais são do que bitmaps que ficam armazenados no sub-diretório “cartas” da pasta de instalação do jogo.

 

Clique aqui para instalar o programa.

Clique aqui para o código fonte.