Programação II Trabalho 2 Freecell 1. Objetivo O objetivo deste trabalho é implementar o jogo Freecell utilizando o Tipo Abstrato de Dados (TAD) Pilha (stack). Freecell é um jogo de cartas que tem por finalidade agrupar todas as cartas de mesmo naipe (paus, copas, ouro ou espada) em 4 pilhas, seguindo algumas regras. O primeiro passo para começar o jogo é embaralhar as cartas e distribuí las sobre a mesa. A figura abaixo representa uma configuração inicial da mesa. As cartas são embaralhadas e distribuídas em 8 pilhas (nomeadas aqui como pilhas A, B, C,..., H); Há 4 pilhas na mesa (nomeadas aqui como 0, 1, 2 e 3) onde pode se agrupar as cartas pelo naipe; Há ainda 4 espaços reservas (nomeados aqui como W, X, Y e Z) para que se possa colocar uma carta de quaisquer pilhas; A idéia é movimentar todas as cartas contidas nas pilhas A,..., H para as pilhas 0,..., 3, podendo se utilizar os espaços W,..., Z para armazenamento temporário de cartas. Algumas regras devem ser seguidas: A ordem crescente das cartas é: A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K; A inserção de cartas nas pilhas A,..., H deve respeitar a ordem decrescente e ainda duas cartas adjacentes não devem ter a mesma cor: preta (paus e espada) e vermelha (ouro e copas). Como exemplo, a seguinte ordem de cartas é aceita: Rei de paus (K), Dama de ouro (Q), Valete de espada (J), 10 de ouro, 9 de
espada, 8 de copas. Assim a última carta colocada na pilha é 8 de copas. Se a pilha estiver vazia, qualquer carta é aceita; Em cada uma das pilhas 0,..., 3 deve haver apenas cartas de mesmo naipe e em ordem crescente: por exemplo, na pilha 0, primeiro deve se colocar um às de copas, depois, sobre o às de copas, deve se colocar um 2 de copas, e assim por diante; Cada espaço W,..., Z pode armazenar no máximo uma carta; As cartas devem ser movimentadas seguindo a definição de pilhas: a última carta colocada na pilha deve ser a primeira a ser retirada da pilha. 2. Implemetação O seu trabalho é fazer um programa em C que implemente ao menos um TAD (com métodos push e pop) e simule o jogo Freecell. O nome das 52 cartas já embaralhadas e os comandos de movimentação de cartas serão repassados ao programa pela entrada padrão (stdin). O nome de uma carta é formado por 2 caracteres: o primeiro caracter indica o naipe da carta ('0' = copas, '1' = paus, '2' = ouro, '3' = espada) e o segundo caracter indica o valor da carta ('A' = às, 'B' = 2, 'C' = 3,..., 'J' = 10, 'K' = Valete, 'L' = Dama, 'M' = Rei). Por exemplo, '1K' refere se à carta Valete de paus. Inicialmente, essas cartas devem ser colocadas nas pilhas A,..., H uma a uma, ou seja, a primeira carta do baralho deve ir para a pilha A, a segunda deve ir para a pilha B, e assim por diante até a pilha H e retornando para A. Esse processo deve ser feito para todas as 52 cartas de entrada. Um comando de movimentação de carta de um lugar para outro é também formado por 2 caracteres. O primeiro caracter indica a pilha (ou espaço) de origem (de onde deve se retirar uma carta) e o segundo caracter indica a pilha (ou espaço) de destino (onde a carta deve ser colocada). Por exemplo, o comando 'A0' indica que deve se retirar uma carta da pilha A e colocá la na pilha 0, e o comando '0X' indica que deve se retirar a carta que está na pilha 0 e colocá la no espaço X. Qualquer movimentação inválida deve ser simplesmente ignorada. O comando '' indica que deve ser impresso na tela o estado atual das pilhas A,..., H. O estado de uma pilha é o nome da última carta colocada na pilha ('' indica pilha vazia). Entrada: Veja o exemplo a seguir: 0A 0B 0C 0D 0E 0F 0G 0H 0I 0J 0K 0L 0M 1A 1B 1C 1D 1E 1F 1G 1H 1I 1J 1K 1L 1M 2A 2B 2C 2D 2E 2F 2G 2H 2I 2J 2K 2L 2M 3A 3B 3C 3D 3E 3F 3G 3H 3I 3J 3K 3L 3M HW H0
CX CY CZ C1 C2 Z1 Z3 1H 3G Saída: 3J 3K 3L 3M 3F 3G 3H 3A 3J 3K 3L 3M 3F 3G 3H 2F 3. Documentação Você deverá documentar seu trabalho no arquivo LEIAME.txt. Sua documentação deve conter: Introdução: descricao do problema a ser resolvido e visão geral sobre o funcionamento do programa. Implementação: descrição da implementação do programa (devem ser detalhadas as estruturas de dados implementadas, o funcionamento das principais funções utilizadas, o formato de entrada e saida de dados, bem como as decisões tomadas relativas aos casos e detalhes de especificação que porventura estejam omissos no enunciado). Conclusão: comentarios gerais sobre o trabalho e as principais dificuldades encontradas em sua implementação. Bibliografia: bibliografia utilizada.
4. Avaliação A nota do trabalho terá um total de 10 pontos. A pontuação restante será calculada automaticamente de acordo com a percentagem de erros/acertos em um benchmark pré definido; Serão contemplados com nota zero os trabalhos que se enquadrarem em uma ou mais situações abaixo: Plágio; Programa não compila; Não está de acordo com as especificações (a não utilização de pilhas, por exemplo). 5. Entrega Este trabalho deve ser feito em grupo de até 2 componentes e entregue até o dia 22/11/2011, às 23:59:59hs. Ele deve ser enviado para mberger@inf.ufes.br. O assunto da mensagem deve ser : prog2:trab2:<nome1>:<nome2> Ex: prog2:trab2:jociel Andrade:Mariella Berger O nome do arquivo com o trabalho enviado em anexo deve ser trab2.tar.gz. Ele será descompactado da seguinte forma: tar xvzf trab2.tar.gz e deverá gerar um arquivo chamado trab2.c com o código do programa e o arquivo de documentação LEIAME.txt. Ao digitar: gcc otrab2 trab2.c deve ser gerado um executável chamado trab2. O recebimento dos trabalhos é automatizado. Siga as instruções à risca pois algum erro na submissão pode inviabilizar a entrega do seu trabalho. Não escreva o seu nome com caracteres estendidos (á, ç, etc.). Não utilize contas de e mail do HOTMAIL, TERRA ou BOL pois as mensagens enviadas por esses servidores não seguem o padrão. Assim, o programa de recebimento automático não consegue detectar o seu e mail.
Não deixe para entregar seu trabalho no último instante. Você poderá perder o prazo e ter seu trabalho invalidado. 3. Observação Importante Mais detalhes serão discutidos em sala de aula. Considerações feitas em sala terão mais relevância do que as contidas nesta especificação. 6. Referências 7. Dúvidas KDE Patience Game (KPatience para Linux) 1995, Paul Olav Tvete Em caso de dúvidas no trabalho contate me por email.