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 ProblemaConsidere 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. 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. 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. 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çãoO trabalho prático consiste em escrever um programa em C, C++, 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çãoA avaliação consiste em uma apresentação oral em sala com a execução do programa e um trabalho escrito. Apresentação OralOs 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 EscritoOs alunos deverão entregar um relatório escrito com os seguintes tópicos:
Para ajudar na preparação do relatório apresentamos um modelo de exemplo: Modelo de Relatório |