Beruflich Dokumente
Kultur Dokumente
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%)
-
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.