A downloadable game

1. Introdução

O objetivo desse projeto da matéria de Estrutura de Dados, do 3º período do curso de Design de Jogos e Entretenimento Digital, da Universidade do Vale do Itajaí (UNIVALI), campus Florianópolis é  programar, utilizando da linguagem C#, uma simulação de um jogo de pôquer na variante Texas hold'em funcional que possa ser utilizado no prompt de comando! 

Esse projeto foi feito para que pudéssemos colocar em prática o que aprendemos sobre C#, as estruturas de dados e os pilares da programação orientada a objetos, além de exercitar as capacidades de interpretação e lógica de programação dos alunos.

2. Desenvolvimento

Esse projeto foi feito para a disciplina de Estrutura de Dados, que visa ensinar a programar com C#, além de abordar aspectos mais teóricos da programação (pilares da programação orientada a objetos, sistemas de organização de dados, passos a tomar antes de começar a programar, bons hábitos de programação, etc).

O desenvolvimento do projeto em si foi dividido em 3 fases:

1. Entender os conceitos-chave de estruturas de dados (árvores, pilhas, polimorfismo, etc) de forma teórica e entender como cada mão do pôquer funciona, visando representar as mesmas com fluxogramas ou em forma de descrição narrativa.

2. Baseando-se em um programa inicial disponibilizado pelo professor Marcelo Dornbusch Lopes, se deveria elaborar um protótipo de cada mão, em C#, sendo que a máquina deveria conseguir identificar qual mão era apresentada e se ela existia na sequencia de cartas escolhida.

3. Finalmente, o código teve de ser finalizado, adicionado a função de mais um jogador e de determinar um vencedor entre ambos jogadores.

2.1. Conceito

O conceito do projeto é criar uma simulação de jogo de pôquer no estilo Texas Hold'em que pode ser jogado no Prompt de Comando de qualquer computador. Esse jogo não conta com gráficos muito complexos, apenas cartas desenhadas com caracteres comuns e texto.  A jogabilidade é igualmente simples; são dadas 2 cartas para cada jogador, e reveladas 5 cartas para a mesa. O programa então analisa todas as cartas e aponta um vencedor de acordo com as regras do pôquer.

2.2. Programação

A parte de programação do projeto foi elaborada no editor Visual Studio Code, desenvolvido pela Microsoft, usando a linguagem C#.

As classes que mais tivemos dificuldade em acertar foram as seguintes:

A mão Straight:

[Link para a imagem]

Para programar a mão Straight, fizemos o programa verificar se o jogador tinha cartas em sequências numérica. Após isso, era determinado se o jogador tinha ou não como formar um Straight.

A mão Flush:

[Link para a imagem]

Para programar a mão Flush, o programa primeiro conta quantas cartas de cada naipe existem em jogo. Após isso, verifica se existe algum naipe com 5 cartas ou mais. Dessas cartas, pega as 5 mais altas para formar o Flush.

E a mão Straight Flush

[Link para a Imagem]

No Straight Flush, o programa primeiro verificava se existia um flush, usando a lista "find" na classe Ranks. Após isso, verificava se existia uma sequencia de 5 entre as envolvidas no flush, constatando um Straight Flush.

2.3. Discussão dos Resultados

Durante a elaboração do projeto, foram programadas todas as mãos possíveis no pôquer e uma forma de validar as mesmas. Embora tenhamos tentado muito, o grupo infelizmente não conseguiu implementar o segundo jogador ao jogo. 

Entrando em mais detalhes, será feita uma separação entre dificuldades, competências adquiridas e fatores externos que resultaram na entrega do projeto.

  • Dificuldades (as que possuem um "🗸" ao lado foram resolvidas ao longo do desenvolvimento das M2 e M3)
    • Compreender como implementar um segundo jogador
    • Entender como fazer esse segundo jogador ser chamado na classe program
    • Entender como fazer isso tudo rodar sem nada quebrar
    • Compreender o código base disponibilizado pelo professor 🗸
    • Entender por onde começar em cada código 🗸
    • Memorizar a semântica e funcionamento das listas/pilhas/árvores 🗸
    • O código para as mãos Straight, Flush e Straight Flush (que, na M2, foram entregues com erros) 🗸
    • Inicialmente, organização/estruturação interna do grupo 🗸
    • Inicialmente, tirar dúvidas com o professor 🗸
  • Competências adquiridas ao longo da matéria
    • Introdução a como organizar uma equipe de programação
    • Introdução a como iniciar um projeto em C#
    • Introdução a programação orientada a objetos
    • Começar a utilizar o Google Scholar/artigos científicos como fonte de pesquisa
    • Utilizar IA's generativas como forma de rapidamente tirar dúvidas pontuais em programação
    • Creditar fontes de pesquisa de forma acadêmica
    • Leve aprofundamento no Visual Studio Code
    • Conhecimento teórico e prático de estruturas de dados em programação
    • Estruturação de um Trello para organização do grupo de forma visual
Trello
Printscreen da página do trello do grupo
  • Pontos a melhorar
    • Comunicação
      • No início do projeto, tínhamos um pouco de dificuldade de comunicarmo-nos com o professor. Embora ao longo da elaboração do trabalho (especialmente durante a M3), sentimos que ainda temos muito a melhorar nesse âmbito.
    • Eficiência
      • Sentimos que, especialmente na M2, demorávamos muito para escrever pouquíssimas linhas de código. Durante a elaboração, conseguimos melhorar muito nesse quesito, mas ainda constantemente cometemos erros "tolos" (como, por exemplo, não adicionar um  ';' no fim de uma linha quando seria necessário).
    • Conhecimento prático
      • Embora sintamos que o nosso conhecimento teórico sobre os assuntos passados em sala de aula esteja muito bom, notamos ao longo da M3 que nossas capacidades práticas ainda deixam a desejar.

3. Conclusão

Embora as (múltiplas) tentativas do grupo de fazer o código funcionar não tenham se pagado, ainda assim não consideramos o projeto um fracasso. No âmbito de aprender e por em prática os conteúdos estudados ao longo da disciplina (lógica em programação, resolver problemas sistematicamente, aplicar programação em C#, aplicar as estruturas de dados), o projeto foi um grande sucesso. 

Mesmo que o grupo não possua nenhum programador de "ofício", com muito trabalho em equipe, pesquisa e organização, conseguimos passar de um nível não tão bom em relação ao conhecimento teórico do conteúdo, para um nível regular para bom.


Referências

https://github.com/lwrcase/Poker

Lista de exercícios em C# - SatellaSoft

Guia de referência e estudo das estruturas de dados no C# - Tiago Tartari


Conteúdo adicional relevante/interessante:

Michael Bowling et al.  Heads-up limit hold’em poker is solved.Science347,145-149(2015).DOI:10.1126/science.1259433 -> Primeira máquina a "resolver" o Texas hold'em (decifrar em 99% dos casos qual é a melhor escolha).

OBJETOS DE APRENDIZAGEM PARA ENSINO DE ESTRUTURAS DE DADOS FAZENDO USO DE REALIDADE AUMENTADA: SEDRA. (2018). Colloquium Exactarum. ISSN: 2178-833210(1), 62-77. https://revistas.unoeste.br/index.php/ce/article/view/2314 -> Uso de métodos gamificados para aprender estruturas de dados.


Fichas da Equipe

Raísa Duarte de Aguiar - Programação - https://r-a-i.itch.io

Lucas Silveira - Programação -  2lssd - itch.io

Andrei Lucchetti - Programação - https://andrei-lucchetti.itch.io/

-----------------------------------------------

Marcelo Dornbusch Lopes - Orientador - m4rc3lo

Universidade do Vale do Itajaí - UNIVALI

Cesar Albenes Zeferino | Diretor Escola Politécnica

Giorgio Gilwan | Coordenador do Curso de Design de Jogos

Rafael Kojiio | Coordenador Gamelab UNIVALI

-------------------------------------------------

Projeto  desenvolvido como requisito parcial para obtenção de aprovação na disciplina: Estrutura de Dados - Professor - Marcelo Dornbusch Lopes


StatusReleased
Rating
Rated 5.0 out of 5 stars
(1 total ratings)
AuthorR_a_i
GenreCard Game

Download

Download
M3_PoquerCMD_Andrei_LucasSilveira_Raisa.zip 29 kB

Comments

Log in with itch.io to leave a comment.

Joia !