Especificação do Trabalho Prático O trabalho prático da disciplina consiste em desenvolver um programa utilizando a linguagem de programação C. A seguir, encontram-se a descrição do problema, a forma de submissão do trabalho e os critérios de avaliação. 1. Descrição do problema Uma empresa gostaria de oferecer a seus funcionários um jogo no estilo quebra-cabeça que permita a eles passarem o tempo no horário de almoço. Desenvolva o programa de acordo com as especificações desta seção. Foi escolhido o famoso jogo de quebra-cabeça da década de 80, o Racha Cuca (Figura 1). Neste jogo, tenta-se achar a sequência de ordenação com a menor quantidade de movimentos possível. Ganha quem for o mais eficiente. Visando estimular o uso do jogo, a empresa decidiu criar uma classificação com por número de jogadas (quanto menos jogadas, melhor no ranking). Figura 1- Jogo Racha Cuca A empresa decidiu que o jogo será instalado em apenas uma máquina e que todos os funcionários irão usá-la. Para incentivar o uso do jogo, a empresa decidiu oferecer bonificações aos funcionários que jogarem. Devido a isso e com receio de que algum funcionário alterasse o código do jogo a fim de trapacear, a empresa solicitou que fosse criado uma rotina de segurança, onde ela pudesse passar alguns arquivos de modelos para o jogo e ações de resolução válidas a fim de testar se o jogo está funcionando de forma correta. Você foi o programador contratado para implementar este jogo. Utilizando o mini-mundo acima e as informações descritas em sequência, implemente um pré-jogo (uma versão com todas as funcionalidades contratadas, apenas para a empresa) utilizando a linguagem C. Uma observação importante no contrato com a empresa é de que todos as boas práticas de programação deverão ser usadas. Por isso, caso seja solicitado o uso de alguma funcionalidade especifica da linguagem C (como estruturas, vetores, matrizes, leitura e escrita de arquivos), esta será cobrada e o não uso acarretará em penalizações. Em sequência é apresentado as funcionalidades solicitadas pela empresa contratante.
2. Menu de opções Ao ser iniciado, seu programa deve exibir um menu de opções (utilize o modelo abaixo). As opções possíveis são: 1. Novo Jogo; 2. Testar Jogo; 3. Sair. Seu programa deve ler a opção escolhida e proceder como descrito nas demais seções, abaixo. Caso o usuário digite qualquer coisa diferente dos números de 1 a 3, você deve informar que a opção não existe e exibir o menu novamente. Para sair do jogo, basta que o usuário escolha a opção 3 do menu. O programa deve ser encerrado sem imprimir nenhuma mensagem. 2.1. Novo jogo Escolhida a opção 1, seu programa deve começar um novo jogo. O tabuleiro do jogo consiste em uma tabela 3x3 com uma posição especial (chamaremos de ## está posição). Ao informar uma das ações W (mover ## uma posição a cima), S (mover ## uma posição a baixo), A (mover ## uma posição a esquerda) ou D (mover ## uma posição a direita), a posição ## é alterada para a posição indicada e o valor na posição indicada passa a existir a onde ## estava. Em sequência um exemplo de como isso funciona: 04 06 03 05 02 ## Ação: W 04 06 ## 05 02 03 Ação: A 04 ## 06 05 02 03 Ação: A definição dos valores a serem inseridos na matriz devem ser calculados de forma aleatória. Ou seja, a cada novo jogo, espera-se que a matriz seja diferente. Para isso, foi solicitado o uso da função rand() da linguagem C. Como demonstrado a cima, a cada ação informada uma alteração da matriz é feita e ela é novamente impressa (atenção para o padrão de impressão: XX, onde XX será um número de 1 a 8). Vale ressaltar que não serão aceitos comandos de ações diferentes das pré-definidas (W, A, S, D). Além disso, não será possível executar ações fora dos limites lógicos da matriz (ex.: não se pode mover ## para esquerda uma vez que ela esteja na primeira coluna, ou
mover a direita uma vez que ## esteja na última coluna). Na sequência exemplos de ações inválidas. 05 ## 03 Ação: F > Ação Inválida 05 ## 03 Ação: S > Ação Inválida 05 ## 03 Ação: A ## 05 03 Ação: A > Ação Inválida ## 05 03 Ação: O jogo termina quando a matriz está totalmente ordenada da posição 0,0 até a posição 2,1 (estando ## na posição 2,2). Após isso, deve-se mostrar a mensagem Parabéns você finalizou o jogo! e exibir novamente o menu de entrada. 2.2. Testar Jogo Como mencionado anteriormente, a empresa conduzirá uma série de testes automatizados para garantir que o programa funciona corretamente. Tais testes consistem em fornecer arquivos de entrada com valores para matriz e sequência de ações afim de analisar a saída produzida pelo programa. Para isso, foi estabelecido o nome do arquivo de teste como teste_entrada.dat. Ao escolher a opção 2 deve-se verificar a existência do arquivo, caso não existe, informar Não existe arquivo de entrada disponível, caso exista, deve-se ler a matriz da forma que consta no exemplo abaixo e aplicar, uma-a-uma e na sequência apresentada no arquivos, as ações pré-definidas (note que o elemento ## está demarcado pelo valor -1 na leitura). Após a leitura da matriz, deve-se ler a sequencia de ações até o fim do arquivo de leitura. Por fim, deve-se exibir o resultado final da matriz, a quantidade de jogadas efetuadas e informar se a matriz está ordenada ou não. Deve-se lembrar que: i) podem haver ações
inválidas no arquivo de entrada, ii) não é necessário que as ações resolvam toda matriz e iii) ao menos uma ação estará definida no arquivo de teste). Abaixo um exemplo para arquivo teste_entrada.dat. 8 7 1 4 2 6-1 5 3 W W D D W A F Após selecionado a opção 4, o arquivo será lido, executado todas as ações e exibido a matriz resultante e a quantidade de jogadas. O resultado esperado será como na sequência. Matriz de entrada: ## 05 03 Matriz de saída: 07 ## 01 08 02 06 04 05 03 Total de movimentos válidos: 5 A matriz não está ordenada. Para facilitar o seu trabalho, a empresa irá fornecer alguns arquivos de entrada de testes para que você possa verificar se o seu programa está de acordo com o esperado. No entanto, a empresa reserva o direito de não compartilhar todos os seus arquivos de testes, de modo a garantir que os programas não estarão viciados nos arquivos existentes. 2.3. Sair Apenas finalize a execução do programa. 3. Avaliação do trabalho A avaliação do trabalho será realizada analisando cada requisito da especificação. Na tabela abaixo, é apresentado cada funcionalidade os pontos de avaliação e a
correspondente pontuação, caso todos os pontos de avaliação tenham sido feito corretamente. Pontuações parciais podem ocorrer caso os pontos de avaliação tenham sido implementados de forma parcial. Além disso, haverá uma entrevista a ser agendada junto ao monitor para averiguar os conhecimentos individuais sobre o trabalho. Esta entrevista poderá acarretar na mudança da nota final de cada aluno. Funcionalidade Pontos de Avaliação Pontuação Novo Jogo Testar Jogo 4. Entrega do trabalho Criar o menu de seleção com as opções; Criação da matriz de forma aleatória; Validação das entradas; Exibição da matriz; Finalização correta do jogo. Realizar a leitura correta do arquivo para teste; Processar corretamente as informações do arquivo; Exibir a matriz final e a quantidade de jogadas válidas. As informações de data de envio e email para envio estão no arquivo em anexo no site da disciplina (www.inf.ufes.br/~victor.amsantos). A entrega será feita via email. A versão final do trabalho deverá ser enviada para o email especificado até as 23:50 do dia da entrega. O envio deste email deve obedecer as seguintes regras: Entrega individual: Assunto: Entrega Trabalho Programação em C 2017/1 - #TURMA# Corpo da mensagem: Turma: #TURMA# Nome Aluno: #NOME# Matrícula: #MATRICULA_ALUNO# Anexo: #MATRICULA_ALUNO#.c Entrega em grupo: Assunto: Entrega Trabalho Programação em C 2017/1 - #TURMA# Corpo da mensagem: Turma: #TURMA# Integrantes: #NOME# - #MATRICULA_ALUNO# Anexo: #MATRICULA_ALUNO_1#.c 7.0 3.0
Onde, #NOME# é o nome completo do aluno, #MATRICULA_ALUNO# é o código de matrícula do aluno na universidade, #MATRICULA_ALUNO_1# é a matrícula de um (apenas um) dos alunos do grupo e #TURMA# a turma do aluno (e.g. [EngMec], [EngCieCom], [EngCiv], [Fisica]). 5. Considerações Finais Quaisquer alterações neste documento será devidamente registrada no página da disciplina (http://www.inf.ufes.br/~victor.amsantos/) e é de responsabilidade do aluno a verificação destas mudanças.