Vous êtes sur la page 1sur 3

Disciplina:

Lab. de Algoritmos e Estruturas de Dados II 2011. Prof.: Ricardo Wendell Trabalho Final - Jogo Trinta e Um

LIGA DE ENSINO DO RIO GRANDE DO NORTE FACULDADE NATALENSE PARA O DESENVOLVIMENTO DO RIO GRANDE DO NORTE

Para esse projeto o objetivo escrever um programa simulador de um jogo de cartas conhecido como Trinta e Um. O jogo deve ser capaz de suportar a participao de, no mnimo, dois jogadores at, no mximo, dez jogadores. Cada jogador poder ser um participante real ou um jogador automtico. Assim, por exemplo, em uma partida podemos ter 2 jogadores automticos e 1 jogador humano, ou ento 3 jogadores humanos e 1 jogador automtico. Para viabilizar o jogo, seu programa, doravante denominado de TrintaUm, deve ser capaz de gerenciar as jogadas de cada participante (i.e. estabelecer uma ordem de jogadores) e identificar o vencedor de uma rodada. Vrias rodadas podero ser realizadas at que uma partida se encerre. Neste caso, o programa deve manter uma tabela de pontuao que representa o acmulo de pontos de cada rodada. Ao se encerrar o programa, deve-se exibir a tabela de pontuao, indicando o jogador vencedor, i.e. aquele que acumulou mais pontos. A interface do programa dever ser utilizar o terminal em modo texto.

O Jogo

Trinta e Um um jogo de cartas para dois ou mais jogadores. O jogo composto de dois deques de cartas. O objetivo do jogo tentar obter uma mo de cartas cujo valor seja o mais prximo possvel de 31 pontos.

Uma mo consiste de exatamente 3 cartas. Cada carta numerada (2, 3, . . . , 9, 10) vale o mesmo valor escrito na carta em pontos; Valete (J), Dama (Q) e Rei (K) todos valem 10 pontos; enquanto que o s (A) vale 1 ou 11 pontos, dependendo de qual dos dois valores fornea o maior total de pontos sem ultrapassar os 31 pontos.

Regras

Na abertura do jogo deve-se estabelecer quantos participantes iro jogar, bem como a ordem de jogada para cada um deles. Depois deve-se identificar quais participantes sero humanos e quais sero jogadores automticos.

No incio de uma rodada, o simulador deve embaralhar os dois deques de cartas de maneira a criar um deque unico de cartas, que funcionar como se fosse uma pilha (apenas a carta do topo pode ser retirada). O simulador, ento, deve realizar a distribuio de trs cartas (retiradas do topo do deque de cartas) para cada jogador.

Aps completar a distribuio inicial, cada jogador (depois de observar sua mo) tem o direito de substituir (apenas) uma de suas cartas por uma nova carta do deque. Finalizada as

eventuais substituies, o simulador deve indicar qual o vencedor da rodada, contabilizando 2 pontos por vitria.

A seguir, o simulador deve indagar se os participantes desejam uma nova rodada. Em caso afirmativo, deve-se reiniciar a rodada, embaralhando novamente o deque. Lembre-se que a cada nova rodada, deve-se acumular os pontos resultantes em uma tabela que deve ser exibida no final da partida.

Abstrao e Modelagem

A principal sugesto tentar identificar os componentes da simulao, como jogador, deque, partida, controlador do jogo, tabela de pontos, e abstra-los para classes em Java. Para cada componente (ou classe) identificado deve-se procurar definir as aes cabveis, as quais correspondero a mtodos da classe.

Algumas estruturas de dados so bem evidentes. Por exemplo, o deque central de cartas (formado por dois deques de cartas, ou seja, 104 cartas) facilmente representvel por uma pilha. Uma ao cabvel, neste caso, seria a operao de embaralhar as cartas do deque (mtodo shuffle()). Outra operao seria a de retirar uma carta (do topo) do deque.

De maneira similar, cada participante poder armazenar sua mo em uma lista sequencial de cartas. Os prprios participantes (modelados como objetos da classe Jogador, por exemplo) podem estar armazenados em uma fila circular de jogadores, de maneira a se estabelecer uma ordem linear de jogadas.

Uma das classes principais a ser modelada a que deve controlar o jogo. Esta classe dever ser responsvel por gerenciar as rodadas que compem uma partida, verificar qual o vencedor de uma rodada, acumular as pontuaes, distribuir as cartas para cada jogador, etc. Sugere-se que cada carta seja representada por uma cadeia de caracteres. Assim, uma mo pode ser representada por uma string, como em A 10 K, que significa uma mo contendo um As, um 10 de um Rei. O valor total da mo 11 + 10 + 10 = 31. Note que neste caso o As foi considerado com valor 11 ao inves de 1, uma vez que o valor 11 e permitia o maior total de pontos sem ultrapassar 31. Recomenda-se tambm armazenar informaes acerca do naipe da carta: clubs (C), diamonds (D), hearts (H) e spades (S).

Entrega e Avaliao

Este trabalho poder ser desenvolvido em grupos de (at) trs. Para a soluo deste projeto obrigatria a utilizao das classes Pilha, Fila e Lista sequenciais que foram desenvolvidas em trabalhos anteriores.

O programa TrintaUm ser avaliado sob os seguintes critrios: - Permite a definio de jogadores automticos e humanos (15%) - Realiza uma modelagem apropriada para o problema (15%) - Realiza o embaralhamento e distribuio de cartas para os participantes (10%) - Permite que um jogador humano substitua uma carta em uma dada rodada (5%) - Prov uma inteligncia artificial (IA) razovel para o jogador automtico (5%) - Identifica corretamente o vencedor de uma rodada (15%) - Contabiliza a pontuao total para uma partida, composta de 1 a n rodadas (10%) - Indica o vencedor geral da uma partida (10%) - Apresenta uma boa interface textual com o usurio (15%)

- [PontoExtra] Exibe interface grfica feita em Swing (15%)


- Presena de erros de compilao e/ou execuo (at 20%) - Falta de documentao do programa com comentrios nas classes e mtodos (at 10%) - Fuga dos padres de nomenclatura em Java (at 10%)

A apresentao ser feita por todas as equipes no dia 06/12. Ela consistir da demonstrao do programa e entrevista com os membros da equipe. O objetivo de tal entrevista comprovar a verdadeira autoria do cdigo entregue. Assim, qualquer um dos componentes da dupla deve ser capaz de explicar qualquer trecho de cdigo do projeto. Trabalhos plagiados recebero nota zero automaticamente.

Proposta de trabalho adaptada de material do prof. Selan Rodrigues (UFRN)