Estruturas de Dados e Algoritmos I-2012/2013 Trabalho 1

Propaganda
Estruturas de Dados e Algoritmos I-2012/2013
Trabalho 1 - Jogar ”Solitaire”
November 5, 2012
1
Introdução
Utilização da linguagem Java e dos tipos abstratos de dados implementados pelos alunos para
jogar o ”Solitaire”.
Este trabalho é dividido em cinco partes cada uma delas com a cotação que se apresenta no
inı́cio de cada secção. Deverá providenciar as classes e métodos que lhe são pedidos em cada
uma das partes, para que seja possı́vel a realização do jogo, sem obviamente a parte gráfica que
usualmente o acompanha. Como submissão do trabalho realizado, deverá entregar os ficheiros
Figure 1: Jogo do Solitário
dados e completados por si, com as implementações pedidas e ainda uma implementação das
Tipos Abstractos de Dados que forem usados no trabalho.
2
Descrição do Jogo
O jogo do ”Solitário” é uma paciência que se joga com um único baralho de cartas (52 cartas,
13 de cada uma dos 4 naipes diferentes). Uma parte do baralho (24 cartas) está colocado na
Zona A, ver figura 2, estando inicialmente todas as cartas viradas para baixo, e são portanto
desconhecidas. Na Zona B, há espaço para 4 pilhas de cartas, uma para cada naipe. Neste zona,
as cartas serão colocadas viradas para cima e na ordem Ás,2,...,10,J,D,K. Na zona C, há 7 colunas
de cartas. Em cada coluna, inicialmente, há uma única carta virada para cima. Há 6 cartas
desconhecidas, viradas para baixo, na coluna mais à direita desta zona. Há 5 cartas desconhecidas,
na coluna à esquerda desta, havendo sempre menos uma carta virada para baixo, nas colunas mais
à esquerda, até que na coluna mais à esquerda de todas, não há cartas desconhecidas, existindo
uma única carta virada para cima. Assim sendo, nas colunas de zona C há um total de 28 cartas
(7+6+5+4+3+2+1), e portanto o baralho da zona A contem as restantes 24 cartas.
Zona B
Zona A
Zona C
Figure 2: Zonas A, B e C do Solitário
A finalidade do jogo é colocar todas as cartas(as da zona A e as da zona C ) na zona B, de
acordo com as regras de mobilidade das cartas. A mobilidade das cartas entre as diferentes zonas,
faz-se do seguinte modo:
• Na zona A, podem virar-se cartas (por simplicidade uma de cada vez), e somente a carta virada do topo pode ser deslocada para qualquer das outras zonas (B ou C). Para ser deslocada
para a zona B, tem de respeitar as regras destas pilhas; para qualquer das colunas da zona
C, só pode ser colocada numa coluna de modo a formar uma sequência decrescente de cores
alternadas,vermelho e preto. O valor das cartas é por ordem decrescente: K,D,J,10,. . . ,4,3,2.
Por exemplo, na coluna mais à esquerda da Zona C da figura 2, só podem ser colocados
10 pretos(paus ou espadas), na coluna à direita desta (coluna 2), só podem ser colocadas
Damas vermelhas(Ouros ou Copas), etc.
• Só é possı́vel colocar uma carta numa das pilhas da zona B se a carta for do mesmo naipe
da pilha, e fôr a carta imediatamente a seguir à carta no topo da pilha. Quando as pilhas
estão vazias, a única carta admissı́vel é o As. Por exemplo, na figura 3 a carta da zona A,
o Ás do Paus, pode ser colocada em qualquer das pilhas da zona B. Após esta operação, a
pilha escolhida para colocar o Ás de Paus só poderá receber cartas de paus, na sequência
2, 3, 4, etc. Nestas pilhas podem ser colocadas cartas vindas da zona A ou de qualquer das
colunas da zona C, desde que seja uma última carta de alguma destas colunas. Por exemplo,
se alguma das colunas da zona C contivesse o 2 de paus como última carta, poderı́amos
mover primeiro o Ás para uma pilha da zona B, e depois o 2 de paus para o topo da pilha
que contem a Ás.
Figure 3: Colocação de cartas na zona B
• As cartas da zona C, pode ser deslocadas para a zona A(uma a uma), ou podem ser deslocadas subsequências de últimas cartas de uma das colunas da zona C, para outra coluna da
zona C, desde que a sequência a deslocar, complete a sequência na coluna destino.
Por exemplo, na figua 4, é possı́vel mover a sequência das 2 últimas cartas da coluna 4,
para a coluna 7, ou pode mover-se a sequência de 4 cartas da coluna 4 para a coluna 2.
Esta última situação permite que seja descoberta mais uma carta da coluna 4. As cartas
escondidas nas colunas da zona C, são viradas automaticamente quando se retira dessa
coluna toda a sequência de cartas viradas para cima. Quando existirem na zona C, colunas
sem nehuma carta, pode aı́ ser colocados Reis, vindos da Zona A ou uma sequência de cartas
da zona C , que se inicie com um Rei.
Figure 4: Movimemtação de cartas na Zona C
3
Parte I - As cartas e o baralho, 2 pontos em 20
É-lhe fornecida a classe Carta.java. Não é obrigado a usar esta implementação. Caso não pretenda usar a implementação fornecida, substitua a implementação dada pela sua. Em qualquer
dos casos a implemtação das cartas de jogar deve ser dada no ficheiro Carta.java. A implementação de Carta usa enumerações(Tipo enum). Faz parte do seu trabalho aprender a usar este
tipo.
Após a implementação de Carta, deve providenciar a classe Baralho.java. Esta classe deve
providenciar um baralho de 52 cartas. É-lhe igualmente fornecido o ficheiro Baralho.java. Substitua os comentários por implementações e acrescente, se necessitar novos métodos.
4
Parte II - A ZonaA, 5 pontos em 20
Deve providenciar a classe que ZonaA.java. Um esboço desta classe é-lhe fornecido no respectivo
ficheiro. Deverá editar o ficheiro e apresentar as definições que lhe são pedidas. Pode (deve!)
sempre que necessário, recorrer ao uso de excepções e poderá sempre que necessário implementar
outros métodos que sejam fundamentais para a sua implementação. Nesta classe, deverá definir
através das variáves de instância o modo como implementa a pilhas de cartas voltadas para baixo
e a pilha de cartas voltadas para cima.
5
Parte III - A Zona B, 3 pontos em 20
Deve providenciar a classe que ZonaB.java. Um esboço desta classe é-lhe fornecido no respectivo
ficheiro. Deverá editar o ficheiro e apresentar as definições que lhe são pedidas. Nesta classe,
deverá definir através das variáves de instância o modo como implementa as 4 pilhas de cartas
desta zona.
6
Parte IV - A Zona C, 4 pontos em 20
Deve providenciar a classe que ZonaC.java. Um esboço desta classe é-lhe fornecido no respectivo
ficheiro. Deverá editar o ficheiro e apresentar as definições que lhe são pedidas. Nesta classe,
deverá definir através das variáves de instância o modo como implementa as colunas de cartas
desta zona, e a obtenção das sequências que retira duma pilha e transfere para as outras colunas
desta zona.
7
Parte V- O jogo, 2 pontos em 20
Deve providenciar a classe que Solitario.java. Um esboço desta classe é-lhe fornecido no respectivo ficheiro. Deverá editar o ficheiro e apresentar as definições que lhe são pedidas. Nesta
classe, deverá definir através das variáves de instância as diferentes zonas de jogo, e as operações
possı́veis de realizar, de modo a jogar o Solitário.
8
Tipos Abstractos de Dados, 4 pontos em 20
A implementação dos tipos Abstractos de Dados de suporte à implementação do jogo , são cotados
com 4 valores em 20.
9
Submissão do trabalho
O trabalho devem ser realizados individualmente, e ser submetido no moodle, no local apropriado
em data a anunciar, em ficheiro único , de formato zip, ou tgz, ou outro equivalente. O nome do
ficheiro será SolitaireNNNNN.zip, devendo ser substituı́do NNNNN pelo seu número de aluno.
Download