Problema do Jogo de Cartas








Problema do Jogo de Cartas


O problema do Jogo de Cartas deve desenvolver uma solução para um jogo de pôquer simplificado conhecido como Four-of-a-Kind ou Quadra.




Descrição do Problema

Considere um baralho com 24 cartas, divididas em 6 tipos diferentes, 4 de cada naipe. Para padronizar, consideramos as cartas de 1 a 6 e os naipes O, C, E, P.

As cartas que irão participar são: 1O, 1C, 1E, 1P, 2O, 2C, 2E, 2P, 3O, 3C, 3E, 3P, 4O, 4C, 4E, 4P, 5O, 5C, 5E, 5P, 6O, 6C, 6E e 6P.

Irão jogar 4 jogadores (processos) e cada jogador pode segurar 4 cartas por vez. Entre cada par de jogadores adjacentes (i.e., sentados ao lado do outro), há uma pilha de 2 cartas.

Os nomes dos jogadores são: Ana, Beto, Carla e Daniel.

O jogo começa com a distribuição de quatro cartas aleatórias para cada jogador e distribuindo duas cartas em cada pilha entre cada par de jogadores adjacentes. As pilhas funcionam de forma FIFO (First In, First Out), o jogador não pode escolher a carta que vai pegar.

Deve-se implementar dois tipos de jogos: mão de cinco e mão de quatro.

Jogo 1: Mão de Cinco

Nesse jogo cada jogador pode segurar cinco cartas na mão simultaneamente.

Cada jogador se comporta de acordo com o seguinte algoritmo.

Jogador tem 4 cartas.
While (( mão não contém a quadra) e (ninguém ganhou))
begin
     Pega uma carta da pilha do lado direito;
     Descarta uma carta na pilha do lado esquerdo;
Endwhile;
Se (mão contém quatro cartas de um mesmo tipo), reivindicar a vitória;


As pilhas intermediarias tem tamanho 2, isto é, só podem guardar duas cartas.

Jogo 2: Mão de Quatro

Nesse jogo cada jogador pode segurar apenas quatro cartas na mão simultaneamente.

Cada jogador se comporta de acordo com o seguinte algoritmo.

Jogador tem 4 cartas.
While (( mão não contém a quadra) e (ninguém ganhou))
begin
     Descarta uma carta na pilha do lado esquerdo;
     Pega uma carta da pilha do lado direito;
Endwhile;
Se (mão contém quatro cartas de um mesmo tipo), reivindicar a vitória;


As pilhas intermediarias tem tamanho 3, isto é, só podem guardar até três cartas.

Regras Gerais

Não há vez de cada jogador, todos jogam simultaneamente. Enquanto houver espaço para descartar a carta na pilha esquerda e houver carta disponível na pilha direita, o jogador pode continuar jogando.

O jogador tem liberdade de escolher a carta que vai descartar, dentre as quatro que estão na sua mão. O jogador não pode escolher a carta da pilha.

Os jogadores não podem fraudar o jogo, quando um jogador reivindica a vitória, todos os outros jogadores devem parar. Também não há empate, o primeiro que reivindicar a vitória será o campeão. 

Implementação

O trabalho prático consiste em escrever um programa em CC++Java ou Python para simular o jogo. Não precisa fazer interface gráfica. 

Executar 10 (dez) partidas até ter um ganhador. Ao final da execução de cada partida deve ser exibido: o ganhador, tempo total da partida quantidade de jogadas de cada jogador.

Não poderá haver deadlock nem starvation.

Avaliação

A avaliação consiste em uma apresentação oral em sala com a execução do programa e um trabalho escrito.

Apresentação Oral

Os alunos deverão fazer uma apresentação oral do trabalho realizado para os demais alunos. Na apresentação deverão mostrar a análise do problema, as formas de resolução, as decisões de implementação e a apresentação da execução do programa. 

Considera-se a execução correta se o programa cumprir o determinado sem a ocorrência de deadlocks ou starvation.

O calendário de apresentação será definido futuramente.

Trabalho Escrito

Os alunos deverão entregar um relatório escrito com os seguintes tópicos:
  1. Formulação do problema
  2. Descrição dos algoritmos
  3. Descrição da Implementação (diagrama de classes)
  4. Resultados

Para ajudar na preparação do relatório apresentamos um modelo de exemplo: Modelo de Relatório












Comments