Prazo de entrega recomendado:
Você realizará operações em mapas de minecraft criados a partir de uma seed. Para isso, precisará alocar matrizes dinamicamente, armazenar dados nessas matrizes e manipulá-las através da passagem por referência para funções.
Pedro é um adolescente de 16 anos que, como qualquer outro adolescente nessa idade, só pensa em uma coisa: Minecraft. Acontece que as aulas de Pedro voltaram e agora ele não possui mais tanto tempo para minerar no seu mundo quadrado. Ele está cansado de criar novos mundos no jogo e não encontrar muitos materiais, ou precisar de muito tempo de mineração para encontrar uma boa quantidade, o que não é divertido para quem tem pouco tempo para jogar.
Os mundos de Minecraft são gerados a partir de uma seed (semente). O jogo cria um mundo novo para cada seed escolhida pelo jogador e também permite que o mesmo mundo seja replicado apenas utilizando a mesma seed. Pedro sabe que você conhece a forma como os mundos são gerados e pede sua ajuda. Ele deseja que você faça um programa chamado minecraft.c
que, dadas a seed e as dimensões do mundo, diga quanto de cada material será possível encontrar nele e qual o tempo estimado para toda a mineração. Com isso, ele pretende escolher melhor o mundo antes de jogar.
Como os mundos são gerados?
No Minecraft os mundos são tridimensionais com largura 256
blocos (eixo-256
blocos de altura, isso não significa que todos esses blocos estão ocupados, afinal o jogador precisa de espaço para construir e explorar. Nessa tarefa, dada uma seed
Primeiramente, o jogo calcula a altitude de cada coordenada. A altitude de uma coordenada
Em seguida, para cada coordenada
Observe que todos os blocos acima da altitude recebem o valor
Valor de |
Tipo do Bloco |
---|---|
0 | Diamante |
1 ou 2 | Ouro |
3 a 5 | Ferro |
6 a 11 | Pedra |
12 a 20 | Terra |
21 a 23 | Bloco Vazio |
24 a 28 | Água |
29 a 32 | Lava |
Note que também é possível existir blocos vazios abaixo da terra, como na caverna da imagem a seguir:
Entrada
A primeira linha contém dois inteiros
Exemplo de entrada
3 3
123123
1.5
Saída
A saída deve ser formada por
Exemplo de saída
Total de Blocos: 1311
Tempo total: 1966.50s
Diamantes: 58
Ouros: 123
Ferros: 197
Critérios
É obrigatório utilizar alocação dinâmica de matrizes nessa tarefa e implementar as funções do arquivo minecraft.h
. Você também pode criar novas funções se julgar necessário.
Lembre-se de desalocar toda a memória alocada dinamicamente na tarefa. Dica: use o valgrind para identificar blocos de memória que permaneceram alocados ao final da execução.
Correção
Esta tarefa será corrigida automaticamente sempre que você realizar um
git push
. Depois de terminada a tarefa, deve-se utilizar o botão na
interface de notas para solicitar a correção de um monitor.
Turma AB: O peso desta tarefa é 2.
Turma E: Você deverá apresentar esta tarefa a um monitor PED. Para
isso, você deve procurar atendimento em algum horário com monitor PED
e digitar apresentar 6 no canal fila-apresentar
.