Jogo Campo Minado — Enunciado e Implementação | Herez

Jogo Campo Minado

Divulgação do enunciado: 02/05/2026 — Prazo de entrega: 27/06/2026 — Disciplina: Introdução ao desenvolvimento de jogos digitais e javascript

Enunciado completo do jogo Campo Minado (Minesweeper): regras, especificações das classes a implementar (Tabuleiro, JogadorHumano, JogadorAutomatico), exemplos de uso, dicas de implementação e critérios de avaliação e entrega. Leia também o jogo hospedado em herez.com.br/campo-minado/.

1. Introdução

O objetivo é implementar uma versão do jogo Campo Minado, incluindo a construção do tabuleiro e a implementação de jogadores (humano e automático). Antes de começar, recomenda-se jogar algumas partidas em uma implementação conhecida para compreender as regras.

😂 Piadas sobre o jogo Campo Minado

  • 1. Por que o programador levou uma pá para o jogo? Porque ouviu que ia ter muitas minas para depurar. 😂
  • 2. Jogador automático: “Escolho a posição (1,1)!” Tabuleiro: “Surpresa!” Jogador automático: “Era só um teste unitário.” 😂
  • 3. Como o Campo Minado pede feedback? “Clique aqui para reportar um bug… e aqui para explodir ele.” 😂
  • 4. Por que o primeiro clique nunca é uma mina? Porque o jogo também acredita em segundas chances. 😉
  • 5. Dica de otimização: se o seu algoritmo sempre perde, troque o nome da função para ganhar() — pelo menos o log vai ficar bonito. 😂
  • 6. O que disse o tabuleiro ao jogador indeciso? “Relaxa, eu já marquei suas dúvidas com uma bandeira.” 😂
  • 7. Por que o professor pediu o código do Tabuleiro? Para ver se o aluno sabia lidar com exceções… e com explosões. 😉
  • 8. Se a IA do jogo perder no xadrez, ela culpa o tabuleiro; se perder no Campo Minado, culpa o RNG. 😂

💣 Piadas rápidas — Campo Minado & Programadores

  • 1. Por que o programador adora o Campo Minado? Porque é o único lugar onde marcar uma bandeira é considerado progresso. 😂
  • 2. Primeiro clique seguro: quando o jogo garante que a primeira jogada não explode, é o equivalente a um teste unitário que passa na primeira execução. 😂
  • 3. O jogador automático disse que ia usar heurística — na prática, virou um gerador de números aleatórios com diploma. 😂
  • 4. Como o programador chama uma posição suspeita? “TODO: verificar depois” — e marca com uma bandeira para lembrar. 😂
  • 5. Dica de debugging: se o seu algoritmo sempre encontra minas, talvez o bug esteja no RNG — ou no karma. 😂
  • 6. Professor: “Mostre o código.” Aluno: “Mostre o tabuleiro.” Ambos esperam que ninguém exploda durante a demonstração. 😂
  • 7. Por que o tabuleiro é um bom colega de trabalho? Porque sempre revela o que precisa ser melhorado — às vezes com muita energia. ⚡️
  • 8. Se a IA perde no xadrez, culpa a estratégia; se perde no Campo Minado, culpa o RNG — o clássico “não é bug, é aleatoriedade”. 😂

2. Regras do jogo

O jogo é jogado em um tabuleiro quadriculado (matriz n × m) com k minas posicionadas aleatoriamente. O jogador revela posições até encontrar todas as minas ou até revelar uma posição com mina (perdendo).

Comportamento ao revelar uma posição

  • Se a posição contém uma mina → jogador perde; o tabuleiro revela todas as minas.
  • Se a posição não contém mina → a posição é rotulada com o número de minas nas oito posições adjacentes.
  • Se esse número for zero → todas as posições adjacentes são reveladas recursivamente (efeito “expansão”).
Observação: o jogo deve garantir que a primeira escolha do jogador nunca seja uma posição com mina.

3. Especificação do exercício

Implementar as seguintes classes em Java, respeitando as interfaces pedidas para permitir testes automáticos:

3.1 Classe Tabuleiro

A classe Tabuleiro deve oferecer os construtores e métodos abaixo.

// Construtores:
public Tabuleiro(int n, int m, int k);
public Tabuleiro(int i);

// Métodos de acesso:
public int numLinhas();
public int numColunas();
public int numMinas();

// Métodos de usuário:
public int numPosRestantes();
public int numPosReveladas();
public int numJogadas();
public boolean fim();
public boolean ganhou();
public boolean perdeu();
public void recomeca();
public void imprimeTabuleiro();
public int jogada(int i, int j);

Comportamento do construtor: Tabuleiro(int i) cria níveis predefinidos:

  • Fácil: n=8, m=8, k=10 (i = 1)
  • Médio: n=16, m=16, k=40 (i = 2)
  • Difícil: n=16, m=30, k=99 (i = 3)

Se os parâmetros do construtor com três inteiros não forem viáveis, criar um tabuleiro de nível fácil.

Retorno do método jogada

  • -1 → posição contém mina (jogador perdeu)
  • 0 → todas as posições foram reveladas (jogador venceu)
  • 1 → posição foi revelada com sucesso
  • 2 → posição já havia sido revelada antes
  • -2 → parâmetros inválidos

Após fim da partida, jogada deve sempre devolver o mesmo valor (0 ou -1).

3.1.1 Representação do tabuleiro

Sugestão de representação por matriz de inteiros com valores:

  • -2 → posição contém mina;
  • -1 → posição não contém mina e não foi revelada;
  • i (0 ≤ i ≤ 8) → posição revelada com i minas nas 8 vizinhas.

Dica: crie uma moldura (borda) e use matriz de tamanho (n+2) × (m+2) para simplificar verificações de vizinhança.

3.1.2 Exemplo de uso

> Tabuleiro tab = new Tabuleiro(1);
> tab.jogada(1,7)
1
> tab.imprimeTabuleiro()
1 2 3 4 5 6 7 8
/-----------------\
1 | + + 1 0 0 0 0 0 | 1
2 | + + 3 2 1 1 0 0 | 2
3 | + + + + + 1 0 0 | 3
4 | + + 3 2 1 1 0 0 | 4
5 | + + 1 0 0 0 1 1 | 5
6 | + + 3 2 1 1 2 + | 6
7 | + + + + + + + + | 7
8 | + + + + + + + + | 8
\-----------------/

3.2 Classe JogadorHumano

Permitir que uma pessoa jogue via teclado. Cada objeto deve oferecer o método public void iniciaJogo(), que conduz a partida, pedindo nível (ou tabuleiro personalizado) e coordenadas a cada iteração.

3.3 Classe JogadorAutomatico

Deve fornecer o método public boolean iniciaJogo(Tabuleiro t), que joga a partida no tabuleiro t e retorna true se vencer. Estratégia simples (aleatória) é aceitável; estratégias mais inteligentes são opcionais.

4. Itens opcionais

  • Marcar o tempo do jogo;
  • Adicionar marcação de posições suspeitas (flags);
  • Tornar o jogador automático mais inteligente;
  • Criar interface gráfica.

5. Observações importantes

Sobre elaboração: o trabalho pode ser feito em dupla com programação pareada; siga as regras de cooperação descritas no enunciado.

Sobre entrega: escreva cada classe em arquivo separado e inclua o cabeçalho sugerido no início de cada arquivo.

6. Critérios de avaliação e entrega

  • Exercícios copiados receberão nota ZERO.
  • Exercícios atrasados não serão aceitos.
  • Qualidade de comentários, indentação e clareza das saídas influenciam a nota.
  • Prazo de entrega: 27/06/2026.

7. Cabeçalho sugerido para arquivos

/***********************************************************/
 /**
 Exercício-Programa -- Campo Minado
 Arquivo: <nome do arquivo>
 <nome do(a) aluno(a)>
 <número do(a) aluno(a)>
 <data de entrega>
 /***********************************************************/
Link relacionado: versão hospedada e recursos adicionais em https://herez.com.br/campo-minado/.
Tags sugeridas: Campo Minado Minesweeper Javascript Jogo Online

Herez: Enunciado para programar o jogo Campo Minado

Post gerado e otimizado para SEO por Herez visando a divulgação dos jogos do site e do jogo campo minado hospedado em herez.com.br/campo-minado/.