Dando continuidade aos games que estamos fazendo, e ensinando a fazer, vamos agora mostrar como fazer e programar o famoso jogo Campo Minado em Java.
Se não acompanhou os outros jogos feitos em nosso curso de Java, veja:
Como fazer o Jogo da Velha em Java
Como fazer o jogo Batalha Naval em Java
Aqui mostraremos as classes e código do jogo, no próximo artigo vamos explicar em detalhes como programar o jogo:
Código comentado sobre a criação do Campo Minado em Java
Como jogar o nosso Campo Minado em Java
Existe um tabuleiro 8x8, onde estão localizadas 10 minas.
A cada rodada você irá fornecer o número da linha e da coluna (ou seja, números de 1 até 8).
A cada rodada você irá fornecer o número da linha e da coluna (ou seja, números de 1 até 8).
Caso exista uma mina naquele lugar, você perde o jogo.
Caso não exista uma mina naquela posição, será exibido número naquele local e números nos locais vizinhos aquele que você escolheu, exceto onde há minas.
Esses números informam quantos minas existem ao redor daquele local.
Por exemplo, se você escolhe um local e aparece o número '2' lá, é porque existem duas minas nas vizinhanças daquele local. Vale salientar que 'ao redor' e 'vizinhança' significam todos os blocos ao redor, incluindo na diagonais.
Objetivo: Deixar os 10 campos que possuem minas livres. Ou seja, onde você deduzir que existe mina, não marque, simplesmente deixe o '_' lá, pois quando existem 10 underlines você ganhará o jogo.
Código do jogo Campo Minado em Java
-->campoMinado.java
public class campoMinado { public static void main(String[] args) { Jogo jogo = new Jogo(); } }
-->Jogo.java
public class Jogo { private Tabuleiro board; boolean terminar = false; boolean ganhou = false; int[] jogada; int rodada=0; public Jogo(){ board = new Tabuleiro(); Jogar(board); jogada = new int[2]; } public void Jogar(Tabuleiro board){ do{ rodada++; System.out.println("Rodada "+rodada); board.exibe(); terminar = board.setPosicao(); if(!terminar){ board.abrirVizinhas(); terminar = board.ganhou(); } }while(!terminar); if(!board.ganhou()){ System.out.println("Havia uma mina ! Você perdeu!"); board.exibeMinas(); } else { System.out.println("Parabéns, você deixou os 8 campos de minas livres em "+rodada+" rodadas"); board.exibeMinas(); } } }
-->Tabuleiro.java
import java.util.Random; import java.util.Scanner; public class Tabuleiro { private int[][] minas; private char[][] tabuleiro; private int linha, coluna; Random random = new Random(); Scanner entrada = new Scanner(System.in); public Tabuleiro(){ minas = new int[10][10]; tabuleiro = new char[10][10]; iniciaMinas(); // coloca 0 em todas as posições do tabuleiro de minas sorteiaMinas(); //coloca, aleatoriamente, 10 minas no tabuleiro de minas preencheDicas();//preenche o tabuleiro de minas com o número de minas vizinhas iniciaTabuleiro();//inicia o tabuleiro de exibição com _ } public boolean ganhou(){ int count=0; for(int line = 1 ; line < 9 ; line++) for(int column = 1 ; column < 9 ; column++) if(tabuleiro[line][column]=='_') count++; if(count == 10) return true; else return false; } public void abrirVizinhas(){ for(int i=-1 ; i<2 ; i++) for(int j=-1 ; j<2 ; j++) if( (minas[linha+i][coluna+j] != -1) && (linha != 0 && linha != 9 && coluna != 0 && coluna != 9) ){ tabuleiro[linha+i][coluna+j]=Character.forDigit(minas[linha+i][coluna+j], 10); } } public int getPosicao(int linha, int coluna){ return minas[linha][coluna]; } public boolean setPosicao(){ do{ System.out.print("\nLinha: "); linha = entrada.nextInt(); System.out.print("Coluna: "); coluna = entrada.nextInt(); if( (tabuleiro[linha][coluna] != '_') && ((linha < 9 && linha > 0) && (coluna < 9 && coluna > 0))) System.out.println("Esse campo já está sendo exibido"); if( linha < 1 || linha > 8 || coluna < 1 || coluna > 8) System.out.println("Escolha números de 1 até 8"); }while((linha < 1 && linha > 8) && (coluna < 1 && coluna > 8) || (tabuleiro[linha][coluna] != '_') ); if(getPosicao(linha, coluna)== -1) return true; else return false; } public void exibe(){ System.out.println("\n Linhas"); for(int linha = 8 ; linha > 0 ; linha--){ System.out.print(" "+linha + " "); for(int coluna = 1 ; coluna < 9 ; coluna++){ System.out.print(" "+ tabuleiro[linha][coluna]); } System.out.println(); } System.out.println("\n 1 2 3 4 5 6 7 8"); System.out.println(" Colunas"); } public void preencheDicas(){ for(int line=1 ; line < 9 ; line++) for(int column=1 ; column < 9 ; column++){ for(int i=-1 ; i<=1 ; i++) for(int j=-1 ; j<=1 ; j++) if(minas[line][column] != -1) if(minas[line+i][column+j] == -1) minas[line][column]++; } } public void exibeMinas(){ for(int i=1 ; i < 9; i++) for(int j=1 ; j < 9 ; j++) if(minas[i][j] == -1) tabuleiro[i][j]='*'; exibe(); } public void iniciaTabuleiro(){ for(int i=1 ; i<minas.length ; i++) for(int j=1 ; j<minas.length ; j++) tabuleiro[i][j]= '_'; } public void iniciaMinas(){ for(int i=0 ; i<minas.length ; i++) for(int j=0 ; j<minas.length ; j++) minas[i][j]=0; } public void sorteiaMinas(){ boolean sorteado; int linha, coluna; for(int i=0 ; i<10 ; i++){ do{ linha = random.nextInt(8) + 1; coluna = random.nextInt(8) + 1; if(minas[linha][coluna] == -1) sorteado=true; else sorteado = false; }while(sorteado); minas[linha][coluna] = -1; } } }
7 comentários:
Tomara que um dia eu chegue a esse nivel .. nessa parte do curso eu tive que copiar codigo nao resisti!
Excelente tutorial ! O site e o metodo de ensino estão de parabéns, gostaria de ajudá-los a manter esse site sempre disponivel, mas nao posso, na verdade estou sempre clicando nos anuncios para garantir renda a vcs, espero que ajude rsrs.... ;)
A equipe está grata pelo apoio e elogios.
Quanto aos clicks, não há necessidade. O Google invalida-os quando não os considera naturais.
Além do mais, nosso script pode colocar seu IP na lista de leitores banidos por conta desses clicks não-naturais.
Gostaria de tentar criar uma interface mais uma ajudinha seria muito bom.
Gostaria muito de ter o campo minado representado através de diagramas de classe para treinar a codificação. Vou tentar desenhar....rs.
Valeu pelo tutorial.
Tentei fazer o jogo campo minado, não consegui :(
Deixei o meu assim:
package br.com.campominado;
import java.util.Scanner;
public class Tabuleiro {
private int numeroLinha;
private int numeroColuna;
private int matriz[][] = new int[8][8];
private Scanner entrada;
public Tabuleiro(){
}
public Tabuleiro(int numeroLinha, int numeroColuna){
this.numeroLinha = numeroLinha;
this.numeroColuna = numeroColuna;
}
public int getNumeroLinha() {
return numeroLinha;
}
public void setNumeroLinha(int numeroLinha) {
this.numeroLinha = numeroLinha;
}
public int getNumeroColuna() {
return numeroColuna;
}
public void setNumeroColuna(int numeroColuna) {
this.numeroColuna = numeroColuna;
}
public void inicio(){
System.out.println("*****INICIO DO CAMPO MINADO*****");
System.out.println();
for(int linha=0; linha<8; linha++){
for(int coluna=0; coluna<8; coluna++){
System.out.print(" - ");
}
System.out.println();
}
}
//construindo o tabuleiro com números
public void construindoJogo(){
int count = 0;
int aux = 0;
for(int linha = 0; linha<8; linha++){
for(int coluna=0; coluna<8; coluna++){
aux = -1 + (int)(Math.random()*6);
if(count==10 && aux==-1);
else{
if(count!=10 && aux==-1){
matriz[linha][coluna] = aux;
count++;
}
else{
if(count!=-1 && aux!=-1)
matriz[linha][coluna] = aux;
}
}
}
}
System.out.println();
}
public void mostraJogo(){
for(int linha=0; linha<8; linha++){
for(int coluna=0; coluna<8; coluna++){
System.out.print(matriz[linha][coluna]+" ");
}
System.out.println();
}
}
public void usuarioJogando(){
//count começa com 1, pois antes de entrar no while(...) é solicitado que o usuário digite um numeroLinha e um numeroColuna
int count = 1;
entrada = new Scanner(System.in);
System.out.print("Digite a linha (De 0 a 7):");
numeroLinha = entrada.nextInt();
System.out.print("Digite a coluna (De 0 a 7):");
numeroColuna = entrada.nextInt();
while(matriz[numeroLinha][numeroColuna]!=-1){
for(int linha = 0; linha<8; linha++){
for(int coluna = 0; coluna<8; coluna++){
if(linha==getNumeroLinha() && coluna==getNumeroColuna())
System.out.print(matriz[numeroLinha][numeroColuna]+" ");
else
System.out.print(" - ");
}
System.out.println();
}
System.out.print("Digite a linha (0 a 7):");
numeroLinha = entrada.nextInt();
System.out.print("Digite a coluna (0 a 7):");
numeroColuna = entrada.nextInt();
//Sempre que o usuário digitar numeroLinha e numeroColuna, count será incrementado
count++;
}
if(count==54)
System.out.println("Voce encontrou nenhuma bomba. Parabens!!!Ganhou o jogo.");
else
System.out.println("Voce perdeu o jogo!!!!");
}
}
====================================================================
package br.com.campominado;
public class Principal {
public static void main(String[] args){
Tabuleiro tab;
tab = new Tabuleiro();
tab.inicio();
tab.construindoJogo();
tab.usuarioJogando();
}
}
TEM Q SALVAR COM .BAT OU .EXE
Postar um comentário