Você está na página 1de 4

Universidade

do Vale do Itajaí
Escola do Mar, Ciência e Tecnologia
NID (Núcleo Integrado de Disciplinas)

Algoritmos e Programação(22760)

Definição do trabalho da M3

Campo Minado

Data de entrega: 07/12/2022. (até 08:00)


Modalidade: grupos de 3 ou 4 integrantes.

Visão Geral:

Campo minado é um popular jogo de computador para um jogador. Foi inventado por Phil Spencer
em 1989 e tem como objetivo revelar um campo de minas sem que alguma seja detonada. Este jogo tem
sido reescrito para as mais diversas plataformas, sendo a sua versão mais popular a que vinha
nativamente nas edições anteriores ao Windows 10.

Descrição
A área de jogo consiste num campo de quadrados retangular. Cada quadrado pode ser revelado
clicando sobre ele, e se o quadrado clicado contiver uma mina, então o jogo acaba. Se, por outro lado, o
quadrado não contiver uma mina, uma de duas coisas poderá acontecer:
• Um número aparece, indicando a quantidade de quadrados adjacentes que contêm minas;
• Nenhum número aparece, indicando que não há nenhuma mina adjacente ao quadrado escolhido;
O jogo é ganho quando todos os quadrados que não têm minas são revelados.

REGRAS PARA O DESENVOLVIMENTO

Antes do jogo começar:


• Deve ser definido no código o número de linhas, colunas e a quantidade de minas do jogo (constantes). A
lógica deve funcionar mesmo com a alteração dos valores para uma nova execução
Deve-se garantir que o mapa tenha pelo menos duas bombas e um número de linhas e colunas
maiores do que um, sendo assim o menor mapa possível terá duas linhas, duas colunas e 2 bombas.
x 2
2 x
• As bombas devem ser colocadas em posições aleatórias no mapa. Dica: use a função rand() para
escolher uma linha e uma coluna aleatória no mapa e lembre-se de impedir que uma bomba seja colocada
em uma posição que já haja uma outra bomba.

• Sempre que colocar uma bomba utilize laço de repetição para somar em um a quantidade de bombas nas
posições adjacentes, isso vai garantir que o mapa indique a quantidade de minas próximas corretamente, por
exemplo:
x

Mapa após inserir uma mina x

x 1
1 1

Mapa após indicar o número de bombas adjacentes nas posições vizinhas

x 1
1 x

Mapa após inserir uma segunda mina x:

x 2 1
2 x 1
1 1 1
Mapa após indicar o número de bombas adjacentes nas posições vizinhas

Agora podemos começar o jogo:

• Antes de cada jogada, deve-se exibir o mapa, somente com todas as posições já reveladas pelo jogador.
• O jogo deve garantir que o jogador escolha uma coordenada válida. Recomenda-se que essas coordenadas
sejam exibidas junto com o mapa.
0 1 2
A
B
C
Informe uma linha: ...
Informe uma coluna: ...

Exemplo de mapa com indicação de coordenadas e entrada do usuário

• O jogo deve encerrar quando uma mina for selecionada ou quando todas as posições livres do mapa forem
reveladas. Dica: O número de posições livres é igual ao número de posições do mapa menos o número de
minas.
• O jogo deve indicar se o jogador venceu ou perdeu e o número de jogadas válidas feitas por ele. Dica: utilize
um contador para somar cada vez que uma posição nova for escolhida e lembre-se de não contar se for uma
mina.

Dicas de desenvolvimento:
O código, a seguir, exemplifica o uso das funções rand() e srand();
• rand() gera um número pseudo-aleatório entre 0 e RAND_MAX, mas essa faixa pode ser facilmente
alterada com o operador de resto da divisão inteira.
• srand() gera uma nova semente aleatória baseada no parâmetro passado entre os parênteses da
função. É comum utilizar a função time(), pois ela pega o horário do sistema que muda a cada
milésimo de segundo. Note que se a função srand() não for utilizada a sequência de números
pseudo-aleatórios gerados pela função rand() será sempre a mesma.

Outros dois comandos bastante úteis no desenvolvimento de programas no console, são os comandos
system(“cls”) e system(“pause”).
• system(“cls”) é um comando que limpa a tela do console (clear screen). Esse comando é bastante
útil, pois em uma tela limpa é mais fácil dar destaque aquilo que se está mostrando no momento.
• system(“pause”) é um comando útil, principalmente quando usado em conjunto com o
system(“cls”), pois ele pausa a execução da aplicação até que o usuário aperte qualquer tecla,
bastante útil quando se quer exibir algo antes de limpar a tela para iniciar uma nova execução.

*Os comandos equivalentes ao system(“cls”) e system(“pause”) no linux/MacOS são respectivamente o system(“clear”) e


system(“read 0 -p”).

Obs.: Para o desenvolvimento do código não poderão ser utilizadas funções ou structs.

Defesa (Obrigatória)

Durante a defesa serão realizados questionamento sobre o trabalho realizado pelo grupo. A
defesa é obrigatória e deverá ser feita pelos integrantes do grupo na aula. Se algum integrante
não estiver presente durante a aula de defesa, deverá justificar a falta, o mesmo defenderá
posteriormente em data a ser agendada com o professor.

Entregas:

• Postar no repositório criado especialmente para o trabalho no material didático: Trabalho


T3
• Código fonte desenvolvido: é de responsabilidade do grupo verificar se o arquivo postado
é o correto.
Critérios de Avaliação:

1. Organização e clareza do código = 5% da nota.


2. Identificação dos autores e Comentários pertinentes e oportunos no código = 10% da nota.
3. Funcionamento correto conforme a especificação = 40% da nota.
4. Recursos da linguagem utilizados = 20% da nota.
5. Apresentação/Desesa do código = 25% da nota.

Obs.: Todas as notas relativas ao código dependem do desempenho na defesa. Sem a defesa o
trabalho terá nota ZERO.

Você também pode gostar