Projeto Individual - Aventura em alto mar!#
Data de Entrega: 29/03 (terça-feira) até 21hrs
A entrega do projeto deverá ser feita via Blackboard
Introdução
#
Neste projeto individual o seu objetivo é desenvolver uma versão adaptada e simplificada do jogo Deep Sea Adventure. Neste jogo, o jogador é um mergulhador em busca de tesouros escondidos no fundo do mar. Porém, o tanque de oxigênio não é grande o suficiente para possibilitar um mergulho tranquilo. Com a fonte de oxigênio escassa, os mergulhadores precisam gerenciar bem o tempo debaixo da água. Quanto mais fundo o mergulhador for, maior é a chance de encontrar tesouros mais valiosos. Além disso, a quantidade de tesouros que o mergulhador carrega afeta sua mobilidade. O objetivo do jogo é conseguir trazer para o submarino o maior valor em tesouros.
Regras#
A cada rodada o jogo deve seguir os passos descritos a seguir:
-
Respirar: Jogo verifica se há a necessidade de reduzir o oxigênio. O oxigênio deve ser reduzido de acordo com a quantidade de tesouros que o mergulhador estiver carregando. Ou seja, se o jogador estiver carregando
2
tesouros o nível do oxigênio deve diminuir2
níveis. Se o mergulhador não estiver carregando nenhum tesouro então não há a necessidade de reduzir o oxigênio. Se o oxigênio alcançar o nível0
ou menor, o jogador da vez termina a rodada e o jogo acaba. -
Avançar ou Retroceder?: No início da partida o jogador começa dentro do submarino. Depois de sair do submarino ele deve escolher continuar avançando para o fundo do mar ou voltar para o submarino.
- O mergulhador não pode voltar para o submarino sem tesouros.
- O mergulhador só pode voltar para o submarino uma única vez.
- Quando o mergulhador decidir retornar para o submarino ele não pode avançar de volta para o fundo do mar.
- Depois que o jogador decidir retroceder o jogador não precisa passar por este passo, pois a única opção agora será retroceder.
-
Nadar: Jogador rola dois dados
d3
(Dado de três faces.) para verificar o avanço. A soma dos dois resultados do dadod3
representa a profundidade em que o mergulhador vai nadar.Se o jogador estiver carregando tesouros, então a quantidade de tesouros carregados deve ser subtraído do valor do avanço. (Exemplo: Se um dado sorteou o valor
1
e o outro dado sorteou o valor3
e o jogador está carregando3
tesouros, então o jogador vai avançar somente uma casa.) Note que se o valor for negativo o jogador deve ficar parado. Esse passo se aplica tanto para avançar para o fundo do mar quanto para retornar para o submarino. -
Caça ao tesouro: Neste passo o jogador pode fazer uma busca por tesouros ou decidir soltar um dos tesouros que ele carrega. (Obs.: Este passo pode ser realizado independente da direção que o mergulhador estiver indo. Então se o mergulhador estiver retornando para o submarino ele pode vasculhar a área em busca de tesouros.)
- Se o mergulhador decidir soltar um tesouro, ele pode escolher qual tesouro deve ser descartado. Note que se o mergulhador estiver retornando ao submarino ele não pode soltar o tesouro se for o único que ele carrega.
- Se o mergulhador decidir vasculhar a área:
- O jogo deve informar o valor da recompensa. O valor da recompensa é um número aleatório que depende da profundidade do mar em que o mergulhar se encontra.
- O jogador decide se ele deseja ficar ou não com o tesouro. Note que o jogador só pode carregar no máximo 4 tesouros. Então se ele já estiver com 4 tesouros, o jogador escolhe qual tesouro deve ser descartado.
O jogo acaba quando o mergulhador voltar para o submarino ou se o oxigênio do tanque se esgotar. O mergulhador só receberá a recompensa dos tesouros se conseguir voltar para o submarino. Caso o oxigênio se esgote antes do mergulhador chegar ao submarino os tesouros serão perdidos e os pontos não são computados.
Oxigênio#
O jogo começa com o oxigênio cheio, marcando o nível em 25
. Conforme o jogo avança, o nível do oxigênio irá reduzindo conforme as ações do jogador. Se o nível de oxigênio alcançar o valor 0
o jogador da vez termina a rodada e o jogo acaba.
Profundidade#
A profundidade máxima que o mergulhador pode alcançar em direção ao fundo do mar é representada pelo valor 32
. Onde a profundidade de nível 1
representa a profundidade mais próxima do submarino e a profundidade de nível 32
representa a profundidade mais distante do submarino. E a posição de valor 0
representa o submarino.
Tesouro#
O valor da recompensa de cada tesouro varia de acordo com o nível de profundidade em que o tesouro se encontra. A tabela a seguir descreve os possíveis valores para cada nível:
Níveis | Possíveis valores |
---|---|
1 - 8 | 0 - 3 pontos |
9 - 16 | 4 - 7 pontos |
17 - 24 | 8 - 11 pontos |
25 - 32 | 12 - 15 pontos |
Simulando o jogo#
Para auxiliá-lo no desenvolvimento deste jogo, vamos simular algumas etapas e apresentar um exemplo de como ficaria a implementação deste jogo para a versão para terminal. (Obs.: O exemplo dos vídeos utiliza um print diferente para facilitar a compreensão do exemplo. Desta forma, o seu programa não precisa seguir o mesmo comportamento.)
A seguir vamos apresentar apenas um exemplo para guiá-lo neste projeto, mas você tem a liberdade de fazer alterações no modo que o jogo e o jogador se interagem.
Iniciando o Jogo#
Ao iniciar o jogo, podemos apresentar uma mensagem de recepção ao jogar e até apresentar as regras do jogo.
Etapa para RESPIRAR#
-
Temos o caso em que o jogador não carrega nenhum tesouro e o consumo de oxigênio é
0
: -
Temos o caso em que o jogador já carrega alguns tesouros e ocorre o consumo de oxigênio. No exemplo a seguir, o jogador carrega
4
tesouros e consequentemente ocorre o consumo de4
unidades de oxigênio:
Avançar ou Retroceder?#
Se o jogador não carregar nenhum tesouro a única opção aqui é avançar, caso contrário o jogo deve perguntar se o jogador deseja Avançar ou voltar para o submarino. Lembrando que uma vez escolhido retroceder, o mergulhador não pode mudar o sentido do avanço, ou seja, o jogador não pode mergulhar em direção ao fundo do mar.
Etapa para NADAR#
Esta etapa ocorre da mesma forma se o jogador estiver avançando ou retrocedendo. A única diferença está no sentindo que o jogador está nadando.
A seguir ilustramos alguns cenários:
-
Neste exemplo, o mergulhador está carregando
2
tesouros e tirou4
na rolagem dos dados, resultando no avanço de2
casas (4 - 2
). -
Mergulhador não avança nenhuma casa por conta do peso dos tesouros:
-
Mergulhador não consegue avançar em direção ao submarino por conta do peso:
Etapa da CAÇA AO TESOURO#
Nesta etapa o mergulhador pode explorar a área em busca de tesouros. Esta etapa pode ser realizada tanto se o mergulhador estiver avançando ou retrocedendo:
-
Mergulhador faz busca por tesouros e possui espaço disponível:
-
Mergulhador faz busca e não possui espaço disponível:
-
Mergulhador deseja somente largar tesouro
Fim da rodada#
Nesta etapa é interessante apresentar um resumo do status do jogo para o jogador:
FIM DE JOGO#
-
Mergulhador chega no submarino
-
Oxigênio esgotando:
Atenção
A simulação acima tem o intuito de auxiliar no desenvolvimento do jogo através de alguns exemplos. Ou seja, podem existir cenários que não foram ilustrados através dos gifs.
Rubrica#
O seu jogo vai interagir com o jogador através do terminal, então é importante sempre manter o jogador informado com relação aos momentos em que o oxigênio é consumido, quais valores o jogador rolou nos dados entre outros detalhes. Além disso, ao final de cada rodada o jogo deve mostrar o nível de oxigênio atual e a profundidade atual do jogador.
CONCEITO I#
- Não implementou nenhum dos 4 passos principais do jogo.
- O jogo não possui um loop principal onde é possível jogar rodadas consecutivas.
CONCEITO D#
- Foram implementados algumas funcionalidades do jogo, porém algumas regras do jogo não foram implementadas.
- O jogo apresenta algum erro de execução que não possibilita testá-lo.
- O jogo apresenta comportamentos indesejados. (exemplo: não respeitar alguma escolha do jogador, atualizar as informações do jogo de forma incorreta, ou apresentar algum outro comportamento inesperado).
CONCEITO C#
- Implementou todas as funcionalidades do jogo.
- Jogo descreve em detalhes o que está acontecendo em cada rodada, sempre mantendo o jogador informado acerca das informações relacionadas ao nível de oxigênio, profundidade atual do jogador, números dos dados sorteados, entre outras informações.
- Nos momentos em que o jogo pede para o jogador inserir alguma informação, o jogo sempre deixa claro as opção do jogador e o que o jogador deve digitar.
CONCEITO B#
- Atingiu o nível C e mais os itens listados abaixo.
- Código utiliza bons nomes de variáveis e funções facilitando a legibilidade do código.
- Código utiliza comentários para descrever alguns trechos de código.
- Faz a validação das entradas do usuário.
- Ao término do jogo, o jogador tem a opção de reiniciar a jogo. (Note que o passo de reiniciar o jogo deve ser feito sem parar a execução do código.)
CONCEITO A#
- Atingiu o nível B e mais os itens listados abaixo.
- Implementou o modo multiplayer para 2 jogadores. (Para o modo multiplayer, todos os jogadores compartilham do mesmo oxigênio.)
CONCEITO A+#
- Atingiu o nível A e mais os itens listados abaixo.
- Implementou algum item avançado, tal como:
- Implementou o modo multiplayer para mais jogadores. Para este item, o jogo deve perguntar a quantidade de jogadores desejada. (Para o modo multiplayer, todos os jogadores compartilham do mesmo oxigênio.)
- Utilizou recursos extras (exemplo: ASCII Art) para aprimorar a interface do jogo.
Para INSPIRAR#
Abaixo podemos ver um exemplo de jogo mostrando que mesmo com poucos recursos, é possível fazer uma interface divertida: