Aventura em alto mar!
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 valor1
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 valor32
. 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 valor0
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:
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: