A downloadable game

M1 - Algoritmos para reconhecimento de mãos no Poker Texas Hold'em

1.1 Introdução

Poker é um jogo de cartas amplamente conhecido, jogado com um baralho padrão de 52 cartas. Uma de suas variações mais populares é o Texas Hold'em, no qual cada jogador recebe duas cartas e compartilha cinco cartas comunitárias na mesa. O objetivo do jogo é formar a melhor combinação possível de cartas.

1.2 Estruturas de Dados

Este trabalho tem como objetivo desenvolver algoritmos, em forma de descrição narrativa, capazes de reconhecer as principais combinações do poker.

Para isso, será utilizada uma estrutura de dados baseada em histograma, que organiza as cartas por valor, facilitando a identificação das combinações. Não serão utilizadas linguagens de programação, apenas descrição lógica dos algoritmos.

2.0 Algoritmos

2.1 Par: O algoritmo percorre o histograma de cartas verificando a quantidade de ocorrências de cada valor. Ao identificar um valor que possua duas ou mais cartas, considera-se a existência de um par e o algoritmo retorna verdadeiro. Caso nenhum valor atenda a essa condição completa, retorna valor falso.


2.2 Dois pares: o algoritmo percorre o histograma de cartas verificando a quantidade de ocorrências de cada valor.  Sempre que encontra um valor com duas ou mais cartas, incrementa um contador de pares. Ao final, se o total de pares for maior ou igual a dois retorna verdadeiro; caso contrário, retorna falso.


2.3 Trinca: o algoritmo percorre o histograma de cartas, analisando a quantidade de ocorrências de cada valor. Ao identificar um valor que possua três ou mais cartas, caracteriza-se a formação de uma trinca, retornando verdadeiro. Caso nenhuma posição do histograma atenda a essa condição após a verificação completa, o algoritmo retorna falso.


2.4 Sequência: o algoritmo percorre o histograma de cartas, verificando a presença de valores consecutivos. Para isso, analisa sequencialmente as posições do histograma e conta quantos  valores seguidos possuem pelo menos uma carta. Caso sejam encontrados cinco valores consecutivos com ocorrência maior que zero, caracteriza-se uma sequência, retornando verdadeiro. Caso contrário, retorna falso.


2.5 Flush: o algoritmo verifica se existem pelo menos cinco cartas do mesmo naipe entre as cartas disponíveis. Para isso, percorre todas as cartas presentes no histograma e contabiliza a quantidade de ocorrências de cada naipe. Caso algum naipe possua cinco ou mais cartas, caracteriza-se um Flush, retornando verdadeiro. Caso contrário, retorna falso.


2.6 Full House: o algoritmo percorre o histograma de cartas, analisando a quantidade de cada ocorrência de cada valor. Ao identificar um valor com três ou mais cartas caracteriza-se uma possível trinca, e ao identificar outro valor com duas ou mais cartas, caracterizam um par. Caso ambas condições sejam satisfeitas, em valores distintos forma-se um Full House, retornando valor verdadeiro.


2.7 Quadra(Four of a Kind): O algoritmo percorre o histograma de cartas, analisando a quantidade de ocorrências de cada valor. Ao identificar um valor que possua quatro ou mais cartas, caracteriza-se uma quadra, retornando verdadeiro. Caso nenhuma posição do histograma  atenda a essa condição após a verificação completa, o algoritmo retorna falso.


2.8 Straight Flush: o algoritmo verifica a existência de uma sequência de cinco cartas consecutivas que pertençam ao mesmo naipe. Para isso, percorre o histograma analisando, para cada naipe, a presença de valores consecutivos. Caso sejam encontrados cinco valores consecutivos com pelo menos uma carta do mesmo naipe, caracteriza-se um Straight Flush, retornando verdadeiro. Caso contrário, retorna falso.

3.1 Considerações Finais

Durante o desenvolvimento deste trabalho foi possível compreender melhor a lógica por trás das combinações do poker e como estruturas de dados podem auxiliar na resolução de problemas.

A principal dificuldade encontrada foi a interpretação do problema e a organização dos algoritmos de forma clara e padronizada.

Além disso, pensar na lógica sem o uso de uma linguagem de programação  exigiu maior atenção à descrição dos passos.

Como aprendizado, destaca-se a importância do planejamento antes da implementação de estruturas adequadas para facilitar a solução.

3.2 Referências

Autor

Eduardo Grüdtner de Almeida

Universidade do Vale do Itajaí - UNIVALI

Maurício de Campos | Diretor Escola Politécnica

Giorgio Gilwan | Coordenador do Curso de Design de Games

Rafael Kojiio | Coordenador Gamelab UNIVALI

* Projeto  desenvolvido como requisito parcial para obtenção de aprovação na disciplina de Fundamentos de Programação para Games (professor: m4rc3lo), curso de Design de Games.

** O conteúdo aqui tem direito reservado e pode conter inconsistências conceituais.