Exercício Programa - Fortuna DesSoft!
Este EP pode ser feito individualmente ou em duplas e deve utilizar o github para registrar o histórico do código e para fazer a entrega (com contribuições de ambos os membros, no caso de duplas).
Caso faça em dupla, defina quais exercícios cada integrante ficará responsável.
Caso faça individualmente, ainda é necessário utilizar o github e fazer commits ao longo do desenvolvimento do projeto.
O objetivo deste exercício programa (EP) é colocar em prática os conceitos intermediários de programação em Python
em um problema um pouco maior do que os exercícios de aula. Este EP deve ser feito em duplas e utilizar o git para registrar o histórico do código e para fazer a entrega (com contribuições de ambos os membros).
Neste EP você vai implementar o jogo de Fortuna DesSoft, descrito a seguir.
Regras do jogo
Você irá implementar um jogo de perguntas e respostas. Cada pergunta tem quatro alternativas e, conforme o jogador responde as perguntas corretamente, tem seu prêmio aumentado. Caso o jogador erre alguma resposta, perde o prêmio e sai sem nada! O jogo acaba quando o jogador atingir o prêmio de 1 milhão ou escolher parar!
Descrição geral dos passos do jogo:
- O jogador deve informar seu nome;
- O computador exibe um pequeno manual do jogo;
- Inicia-se o jogo de perguntas e respostas;
- O computador sorteia uma pergunta aleatória inédita, exibindo a questão e as opções de resposta;
- O usuário escolhe entre as opções:
A
,B
,C
,D
,pula
ouajuda
; - Caso o jogador opte por
ajuda
, sorteie aleatoriamente uma ou duas (quantidade aleatória) respostas sabidamente incorretas e dê a dica de que estas são sabidamente erradas! - Caso o jogador opte por
pula
, se o jogador ainda tiver pulos disponíveis, volte ao passo 4, senão informe que não tem mais pulos e exiba a pergunta novamente - Caso o jogador escolha uma resposta correta, o seu prêmio aumenta. Considere que o usuário inicia com zero reais e que sua premiação aumenta conforme a lista:
- Caso o jogador escolha uma resposta errada, o jogo acaba e ele sai sem nenhum prêmio!
- Pergunte se o jogador quer parar ou continuar.
Observações:
- Inicialmente, o jogador tem direito a
3
pulos e2
ajudas; - O jogo deve validar se a base de dados está consistente;
- O jogo não deve sortear perguntas repetidas;
- no passo 5, valide se o usuário escolheu alguma opção inexistente;
- no passo 6, não é possível pedir ajuda mais de uma vez. Valide e exiba mensagem adequada;
Da vitória:
- O jogo acaba quando o jogador atingir o prêmio de 1 milhão. Após cada pergunta correta, o jogador tem a opção de parar e sair com o prêmio já conquistado.
O que você precisa fazer
Você deve implementar uma versão para terminal (console) do jogo, ou seja, usando print
e input
para interagir com o usuário por meio de texto.
Para te auxiliar nessa tarefa, foram criados os seguintes exercícios (o resultado dos exercícios na Academia Python não afetam a nota, mas as funções criadas neles devem ser utilizadas no EP2):
- EP2 Transforma Base
- EP2 Valida Questão
- EP2 Valida Lista de Questões
- EP2 Sorteia Questão
- EP2 Sorteia Questão Inedita
- EP2 Questão para String
- EP2 Gera Ajuda
Atenção: As funções enviadas para os exercícios acima devem ser utilizadas pelo seu programa no EP2. Dica: crie um ou mais arquivos para adicionar essas funções. A cada modificação nesse arquivo, faça um novo commit. Assim, a evolução do programa fica registrada. As função de impressão em tela e validação de entrada de dados podem ficar em arquivos separados.
Ainda, está sendo disponibilizado um arquivo com uma base de perguntas e resposta, que pode ser utilizado no EP. Sugestão: incremente a base de dados, criando novas perguntas!
Leia também a rubrica atentamente, pois ela pode te ajudar a entender o que precisa ser feito.
Rubrica
A tabela a seguir apresenta os requisitos esperados e seus respectivos conceitos associados para os objetivos de aprendizagem desenvolver de programas de computador e identificar e desenhar estratégias algorítmicas computacionais. Esta tabela deve ser considerada em conjunto com a tabela do objetivo atuar em uma equipe autogerenciada de desenvolvimento.
Conceito | I | D | C | B | A |
---|---|---|---|---|---|
Descrição | Não entregou. | Não entregou todas as sete funções obrigatórias (você pode, e deve, utilizar mais funções, mas as funções listadas no enunciado são obrigatórias). | Entregou as sete funções obrigatórias funcionando, mas o programa não funciona. | O programa funciona conforme o esperado, o jogo sempre apresenta para o jogador o estado atual do seu prêmio, é apresentada uma mensagem ao final de cada jogo indicando se o jogador ganhou ou perdeu e o jogador pode iniciar um novo jogo sem ter que executar o programa novamente. | Atingiu o conceito B, implementou validações para as entradas do usuário (digitou respostas válidas), adicionou mais perguntas à base e implementou alguma forma de visualização mais avançada (ex: cor diferente conforme o valor do prêmio ou de acordo com a importância de cada mensagem). |
A tabela a seguir apresenta a rubrica do objetivo atuar em uma equipe autogerenciada de desenvolvimento.
Conceito | I | D | C | B | A |
---|---|---|---|---|---|
Descrição | Não entregou. | Não possui nenhum commit próprio e nenhuma evidência de trabalho em grupo. | O grupo enviou todo o código de uma vez para o git (em um ou poucos commits enviados em um intervalo curto de tempo). | Todos os membros do grupo enviaram commits com partes do código, mas a evolução do código é artificial. | O grupo fez bom uso do git, enviando commits a cada funcionalidade implementada ou bug corrigido. Os commits são distribuídos ao longo de alguns dias, mostrando a evolução do trabalho. |
O conceito final do EP2 será dado pelo menor entre os conceitos obtidos para cada objetivo acima. Ou seja, se você obtiver conceito C no primeiro objetivo e A no segundo, o conceito final será C. Se você obtiver conceito A+ no primeiro objetivo, mas não possuir nenhum commit e nenhuma outra evidência de trabalho em grupo (conceito D), seu conceito final será D.
Grupos
É indicado fazer em Dupla (mas individual também será aceito ). Caso não tenha time, entre em contato com o professor por email até o dia 08/07.
Utilize o link https://classroom.github.com/a/CuUZQ8K_ para criar o grupo e informe seu colega o nome do grupo. Apenas o primeiro membro cria o grupo, o segundo (caso exista) apenas entra no grupo já criado.
Entrega
Todos os membros do grupo devem responder ao questionário https://forms.gle/udrEhcGTMWNqTTWe9.
Além disso, é obrigatório o envio de um vídeo de até 5 minutos que demonstre seu jogo funcionando (pode ser o mesmo vídeo para a dupla, mas ambos devem enviar o link e responder o formulário).
Não façam commit após a data de entrega, será considerado como atraso.
O prazo é 15/07 às 23:59
EPs entregues com atraso terão seu conceito limitado a D (sem garantia de que será aceito, caso ocorra atraso, converse com os professores de forma urgente).