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  participação  de,  no  mínimo,   dois  jogadores  até,  no  máximo,  dez  jogadores.     Cada  jogador  poderá    ser  um  participante  real  ou  um  jogador  automático.  Assim,  por  exemplo,   em  uma  partida  podemos  ter  2  jogadores  automáticos  e  1  jogador  humano,  ou  então  3   jogadores  humanos  e  1  jogador  automático.     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.  Várias  rodadas  poderão  ser  realizadas  até  que  uma   partida  se  encerre.  Neste  caso,  o  programa  deve  manter  uma  tabela  de  pontuação  que   representa  o    acúmulo  de  pontos  de  cada  rodada.  Ao  se  encerrar  o  programa,  deve-­‐se  exibir  a   tabela  de  pontuação,  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  mão  de  cartas  cujo  valor  seja  o  mais   próximo  possível  de  31  pontos.  
 

Uma  mão  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  forneça  o   maior  total  de  pontos  sem  ultrapassar  os  31  pontos.  
 

Regras    
 

Na  abertura  do  jogo  deve-­‐se  estabelecer  quantos  participantes  irão  jogar,  bem  como  a  ordem   de  jogada  para  cada  um  deles.  Depois  deve-­‐se  identificar  quais  participantes  serão  humanos  e   quais  serão  jogadores  automáticos.  
 

No  início  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,  então,  deve  realizar  a  distribuição  de  três  cartas   (retiradas  do  topo  do  deque  de  cartas)  para  cada  jogador.  
 

Após  completar  a  distribuição  inicial,  cada  jogador  (depois  de  observar  sua  mão)  tem  o  direito   de  substituir  (apenas)  uma  de  suas  cartas  por  uma  nova  carta  do  deque.  Finalizada  as  

 as   quais  corresponderão  a  métodos  da  classe.eventuais  substituições.     Abstração  e  Modelagem     A  principal  sugestão  é  tentar  identificar  os  componentes  da  simulação.  neste  caso.  distribuir  as  cartas  para  cada  jogador.     Algumas  estruturas  de  dados  são  bem  evidentes.  104  cartas)    é  facilmente  representável  por  uma   pilha.  de  maneira  a  se  estabelecer  uma   ordem  linear  de  jogadas.  verificar  qual  o  vencedor  de   uma  rodada.  Os  próprios  participantes  (modelados  como  objetos  da  classe  Jogador.  seria  a  operação  de  embaralhar  as  cartas  do  deque   (método  shuffle()).  ou  seja.  Lembre-­‐se  que  a   cada  nova  rodada.   partida.  deve-­‐se  reiniciar  a  rodada.     A  seguir.  etc.  acumular  as  pontuações.  O  valor  total  da  mão  é  11  +  10  +  10  =  31.  deve-­‐se  acumular  os  pontos  resultantes  em  uma  tabela  que  deve  ser   exibida  no  final  da  partida.     Entrega  e  Avaliação     Este  trabalho  poderá  ser  desenvolvido  em  grupos  de  (até)  três.  por  exemplo)   podem  estar  armazenados  em  uma  fila  circular  de  jogadores.  Uma  ação  cabível.  o  simulador  deve  indagar  se  os  participantes  desejam  uma  nova  rodada.  o  deque  central  de  cartas   (formado  por  dois  deques  de  cartas.  como  em  “A  10  K”.     Sugere-­‐se  que  cada  carta  seja  representada  por  uma  cadeia  de  caracteres.  contabilizando   2  pontos  por  vitória.  composta  de  1  a  n  rodadas  (10%)   -­‐  Indica  o  vencedor  geral  da  uma  partida  (10%)   -­‐  Apresenta  uma  boa  interface  textual  com  o  usuário  (15%)   .  o  simulador  deve  indicar  qual  é  o  vencedor  da  rodada.  uma  mão   pode  ser  representada  por  uma  string.  embaralhando  novamente  o  deque.     Uma  das  classes  principais  a  ser  modelada  é  a  que  deve  controlar  o  jogo.  uma  vez  que  o  valor  11  e  permitia  o  maior  total  de   pontos  sem  ultrapassar  31.  e  abstraí-­‐los  para  classes  em  Java.  Em  caso   afirmativo.  tabela  de  pontos.  cada  participante  poderá  armazenar  sua  mão  em  uma  lista  sequencial  de   cartas.  Esta  classe  deverá  ser   responsável  por  gerenciar  as  rodadas  que  compõem  uma  partida.  deque.   Para  cada  componente  (ou  classe)  identificado  deve-­‐se  procurar  definir  as  ações  cabíveis.  Recomenda-­‐se  também  armazenar  informações  acerca  do  naipe  da   carta:  clubs  (C).  Outra  operação  seria  a  de  retirar  uma  carta  (do  topo)  do  deque.  Fila  e  Lista  sequenciais  que  foram  desenvolvidas  em   trabalhos  anteriores.  Note  que  neste  caso  o  As  foi   considerado  com  valor  11  ao  inves  de  1.  como  jogador.  Assim.  que  significa  uma  mão  contendo  um   As.       O  programa  TrintaUm  será  avaliado  sob  os  seguintes  critérios:   -­‐  Permite  a  definição  de  jogadores  automáticos  e  humanos  (15%)   -­‐  Realiza  uma  modelagem  apropriada  para  o  problema  (15%)   -­‐  Realiza  o  embaralhamento  e  distribuição  de  cartas  para  os  participantes  (10%)   -­‐  Permite  que  um  jogador  humano  substitua  uma  carta  em  uma  dada  rodada  (5%)   -­‐  Provê  uma  inteligência  artificial  (IA)  razoável  para  o  jogador  automático  (5%)   -­‐  Identifica  corretamente  o  vencedor  de  uma  rodada  (15%)   -­‐  Contabiliza  a  pontuação  total  para  uma  partida.  Por  exemplo.  um  10  de  um  Rei.  hearts  (H)  e  spades  (S).     De  maneira  similar.  Para  a  solução  deste  projeto  é   obrigatória  a  utilização  das  classes  Pilha.  diamonds  (D).  controlador  do  jogo.

 qualquer  um  dos  componentes  da   dupla  deve  ser  capaz  de  explicar  qualquer  trecho  de  código  do  projeto.  O  objetivo  de  tal  entrevista  é   comprovar  a  verdadeira  autoria  do  código  entregue.  Selan  Rodrigues  (UFRN)   .                                                                                           Proposta  de  trabalho  adaptada  de  material  do  prof.  Trabalhos  plagiados   receberão  nota  zero  automaticamente.-­‐  [PontoExtra]  Exibe  interface  gráfica  feita  em  Swing  (15%)     -­‐  Presença  de  erros  de  compilação  e/ou  execução  (até  −20%)   -­‐  Falta  de  documentação  do  programa  com  comentários  nas  classes  e  métodos  (até  −10%)   -­‐  Fuga  dos  padrões  de  nomenclatura  em  Java  (até  −10%)     A  apresentação  será  feita  por  todas  as  equipes  no  dia  06/12.  Assim.  Ela  consistirá  da  demonstração   do  programa  e  entrevista  com  os  membros  da  equipe.

Sign up to vote on this title
UsefulNot useful