Exemplo de listas encadeadas
Jogo de cartas com perguntas e respostas do mundo Nerd.
O jogo inicia com um menu de opções. Uma das opções é para jogar, e o jogo propriamente se inicia.
A cada 5 respostas certas, o jogador avança de nível. São três níveis, e se o jogador passar do terceiro vence.
Se o jogador vencer ou desistir, o jogo termina e o menu inicial reaparece.
O jogo apresentará um menu inicial com as opções:
1. ler arquivo
2. inserir novo nodo
3. buscar um nodo
4. alterar um nodo
5. apagar um nodo
6. jogar
7. sair
Para cada item do menu tem-se as operações como descritas a seguir.
enter
sem escolher um arquivo. Se o nome não for dado, um arquivo padrão deverá ser usado.Ler de um menu qual a categoria da pergunta. As categorias são:
Entre parênteses estão as palavras-chaves que devem ser usadas como enumeração (enum
).
Se escolhido 1, deve-se perguntar o nível e então passar um a um cada item do nível escolhido, até que o usuário confirme que encontrou o que ele queria. O item selecionado fica guardado no ponteiro pbusca. Se não encontrar, pbusca deve ser nulo. Ao fim, retornar ao menu principal.
Se escolhido 2, analogamente ao item 1, pergunta-se a categoria (mostrando o menu de categorias), apresentam-se todas as cartas da categoria escolhida, uma por vez, perguntando a cada passo se é a carta escolhida. O ponteiro pbusca deve apontar para a carta escolhida ou para nulo ao final do processo, e retorna ao menu principal.
Se o ponteiro pbusca for nulo, deve-se primeiro pedir para o usuário buscar um elemento no menu de buscas, e retornar ao menu principal.
Caso contrário, imprime-se o cartão, confirma se é realmente o que se quer alterar, e então pergunta-se novamente as informações do cartão. Se o nível ou a categoria for alterado, a lista deve ser re-organizada a contento.
Se o ponteiro pbusca for nulo, deve-se retornar ao menu principal, indicando ao usuário que primeiro ele deve escolher o nodo a ser apagado.
Apresenta-se o nodo, pede-se confirmação, e se confirmado, apaga-se o nodo, re-organizando a lista com os nodos restantes, caso pbusca tenha um nodo válido já escolhido.
Como já colocado na introdução, o jogo é simples: apresenta-se perguntas e aguarda-se que o usuário pense na resposta.
A resposta correta é então apresentada e deve-se perguntar ao usuário se ele confirma que acertou ou não. É o usuário que diz se acertou. Se ele aceitou, soma-se um ponto em sua pontuação.
A cada cinco pontos o usuário avança de nível, iniciando no 1 até o 3.
Se atingir 15 pontos, o jogo termina e o usuário vence. O menu principal deve ser mostrado ao final.
Se o usuário desistir, o jogo termina sem vitória e volta ao menu principal. O usuário poderá desistir a cada vez que lhe for perguntado se acertou ou não, em um menu:
Digite:
- 'a' para acertei
- 'e' para errei
- 'd' para desistir
Ao entrar neste menu, um novo submenu será mostrado com as opções:
1. Salvar e sair
2. Sair sem salvar
3. Voltar ao menu principal
Caso a opção 1 for escolhida, deve-se perguntar o nome do arquivo (e imprimir um nome default caso o usuário prefira não digitar nada e apenas teclar ENTER
). Então o programa salva toda a informação da lista no arquivo indicado, e um laço passando por todos elementos também libera a memória da lista com a função free()
.
Caso a opção 2 seja escolhida, basta liberar todos os nodos da memória e terminar o programa.
E finalmente, a opção 3 aborta o menu de sair, voltando ao menu principal.
Este é um programa sobre listas encadeadas e alocação de memória. As perguntas inseridas não fazem parte do programa, cujo fim é apenas educacional.
As questões de conhecimento público sobre temas famosos “nerds” (filmes, conhecimento científico e ficção, etc.) são encontradas em diversos foruns e podem ser utilizadas como “dados” para fomentar o programa.
As perguntas usadas aqui como exemplo, bem como a classificação em categorias e níveis, são retiradas do baralho NERD QUIZ, e tem autorização dos autores para seu uso na forma deste programa educacional. Para outros usos, contate diretamente a editora em editorial@pandabooks.com.br
Este repositório e o trabalho aqui desenvolvido não é responsável e nem dá autorização para trabalhos derivados.