Campo Minado modo Texto

7 respostas
A

Buenas pessoal
Sou o Lucas e estou no 1º semestre do curso de Sistema de Informação :D

Venho pedir ajuda no meu Campo Minado em modo Texto(que ainda nao está pronto)...
Bom, o problema que está acontecedendo é o seguinte:
Quando O jogador acerta um campo sem nada, ele faz a leitura para ver quantas bombas ha ao redor, porém ao invés de escolher apenas um modo de análise(CIMA/BAIXO/MEIO/ESQUERDA/DIREITA) ele escolhe todos...
gostaria de saber oq posso mudar para que apenas 1 desses modos seja utilizado...

Bom, a principio é isso, se acharem mais algo que eu possa mudar, estou aceitando sujestões...
Obrigado :D

public class CampoMinadov2
{
  public static void verificaTiro(int aux[][], int mat[][],int l , int c)
  {
    while(l>6||c>6||l<0||c<0) //Numeros Solicitados Novamente Caso Sejam invalidos
    {
      System.out.println("numeros invalidos");
      l=Entrada.leiaInt("linha do tiro");
      c=Entrada.leiaInt("coluna do tiro");
    }
    int cont=0;
    if(mat[l][c]==9)//se for bomba, jogo acaba
    {
      System.out.println("Você acertou uma Mina");
        imprimeMatriz(mat);//Mostra todas as posições no final do jogo
    }else{
      if(l==7&&c==1)//Analisa canto esquerdo inferior
      {
        //System.out.println("VERIFICO ESQUERDO BAIXO");
        if(mat[l-1][c]==9)
        {
          cont++;
        }
        if(mat[l][c+1]==9)
        {
          cont++;
        }
        if(mat[l-1][c+1]==9)
        {
          cont++;
        }
      }
      if(l==1&&c==1)   //Analisa canto esquerdo superior
        //System.out.println("VERIFICO ESQUERDO CIMA");
      {
        if(mat[l+1][c]==9)
        {
          cont++;
        }
        if(mat[l][c+1]==9)
        {
          cont++;
        }
        if(mat[l+1][c+1]==9)
        {
          cont++;
        }
      }
      if(l==1&&c==7)//Analisa canto direito Superior
        //System.out.println("VERIFICO DIREITO CIMA");
      {
        if(mat[l-1][c]==9)
        {
          cont++;
        }
        if(mat[l][c-1]==9)
        {
          cont++;
        }
        if(mat[l+1][c-1]==9)
        {
          cont++;
        }
      }
      if(l==7&&c==7)//Analisa canto direito inferior
        //System.out.println("VERIFICO DIREITO BAIXO");
      {
        if(mat[l-1][c]==9)
        {
          cont++;
        }
        if(mat[l][c-1]==9)
        {
          cont++;
        }
        if(mat[l-1][c-1]==9)
        {
          cont++;
        }
      }
      if(l<7||l>1&&c<7||c>1) //verifica os campos do meio
      {
        //System.out.println("VERIFICO MEIO");
        if(mat[l-1][c]==9)
        {
          cont++;
        }
        if(mat[l+1][c]==9)
        {
          cont++;
        }
        if(mat[l][c-1]==9)
        {
          cont++;
        }
        if(mat[l][c+1]==9)
        {
          cont++;
        }
        if(mat[l-1][c-1]==9)
        {
          cont++;
        }
        if(mat[l+1][c-1]==9)
        {
          cont++;
        }
        if(mat[l+1][c+1]==9)
        {
          cont++;
        }
        if(mat[l-1][c+1]==9)
        {
          cont++;
        }
      }
      if(c==1&&l<7||l>1)//Analisa lado esquerdo
      {
        //System.out.println("VERIFICO ESQUERDO ");
        if(mat[l-1][c]==9)
        {
          cont++;
        }
        if(mat[l+1][c]==9)
        {
          cont++;
        }
        if(mat[l][c+1]==9)
        {
          cont++;
        }
        if(mat[l+1][c+1]==9)
        {
          cont++;
        }
        if(mat[l-1][c+1]==9)
        {
          cont++;
        }
      }
      if(c==7&&l<7||l>1)//Analisa lado Direito
      {
        //System.out.println("VERIFICO DIREITO");
        if(mat[l-1][c]==9)
        {
          cont++;
        }
        if(mat[l+1][c]==9)
        {
          cont++;
        }
        if(mat[l][c-1]==9)
        {
          cont++;
        }
        if(mat[l+1][c-1]==9)
        {
          cont++;
        }
        if(mat[l-1][c-1]==9)
        {
          cont++;
        }
      }
      if(l==1&&c<7||c>1)// Analisa em cima
      {
        //System.out.println("VERIFICO CIMA");
        if(mat[l][c-1]==9)
        {
          cont++;
        }
        if(mat[l+1][c-1]==9)
        {
          cont++;
        }
        if(mat[l+1][c]==9)
        {
          cont++;
        }
        if(mat[l+1][c+1]==9)
        {
          cont++;
        }
        if(mat[l][c+1]==9)
        {
          cont++;
        }
      }
      if(l==7&&c<7||c>1)// analisa em baixo
      {
        //System.out.println("VERIFICO BAIXO");
        if(mat[l][c-1]==9)
        {
          cont++;
        }
        if(mat[l-1][c-1]==9)
        {
          cont++;
        }
        if(mat[l-1][c]==9)
        {
          cont++;
        }
        if(mat[l-1][c+1]==9)
        {
          cont++;
        }
        if(mat[l][c+1]==9)
        {
          cont++;
        }
      }
    }
    mat[l][c]=cont; //se o campo nao for bomba imprime o numero de bombas ao redor
    aux[l][c]=mat[l][c];
    imprimeMatriz(aux);
  }
  
  public static void imprimeMatriz(int mat[][])
  {
    for(int i=0;i<7;i++)
    {
      for(int j=0;j<7;j++)
      {
        System.out.print(mat[i][j]+" ");
      }
      System.out.println(" ");
    }
  }    
  public static void main(String[]args)
  {
    int aux[][]=new int[7][7];
    int mat[][]=new int[7][7]; //Cria a Matriz do campo minado
    for(int i=0;i<7;i++)
    {
      for(int j=0;j<7;j++)
      {
        mat[i][j]=(int)(Math.random()*5);//sorteia numeros de 0 a 4
      }
    }
    for(int i=0;i<7;i++)
    {
      for(int j=0;j<7;j++)
      {
        if(mat[i][j]<2)//onde houver numeros abaixo de 2 na matriz
        {              //essa posição recebera o valor 9 que representará bomba
          mat[i][j]=9;
        }else{
          mat[i][j]=0;//caso for maior que 3 recebe numero 0 que equivale a campo vaziu
        }
      }
    }
    System.out.println("De um tiro, escolha dois numeros entre 1~7");
    imprimeMatriz(aux);
    int l=Entrada.leiaInt("linha do tiro");
    int c=Entrada.leiaInt("coluna do tiro");
    l=l-1;
    c=c-1;
    verificaTiro(aux, mat, l, c);      
  }
}

Caso alguem jogue Diablo 3... só chama que é nóis ò.ó \m/

7 Respostas

G

Tenta dar um break no final de cada if pra ver o que acontece.

InicianteJavaHenriqu

Já ouviu falar de [color=darkblue]switch case[/color] :?:

Ele irá funcionar perfeitamente junto com o [color=darkblue]break[/color] que o Gears citou.

:thumbup:

G

troque esse:

if(l==7&&c==1)//Analisa canto esquerdo inferior { //System.out.println("VERIFICO ESQUERDO BAIXO"); if(mat[l-1][c]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } if(mat[l-1][c+1]==9) { cont++; } } if(l==1&&c==1) //Analisa canto esquerdo superior //System.out.println("VERIFICO ESQUERDO CIMA"); { if(mat[l+1][c]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } if(mat[l+1][c+1]==9) { cont++; } } if(l==1&&c==7)//Analisa canto direito Superior //System.out.println("VERIFICO DIREITO CIMA"); { if(mat[l-1][c]==9) { cont++; } if(mat[l][c-1]==9) { cont++; } if(mat[l+1][c-1]==9) { cont++; } } if(l==7&&c==7)//Analisa canto direito inferior //System.out.println("VERIFICO DIREITO BAIXO"); { if(mat[l-1][c]==9) { cont++; } if(mat[l][c-1]==9) { cont++; } if(mat[l-1][c-1]==9) { cont++; } } if(l<7||l>1&&c<7||c>1) //verifica os campos do meio { //System.out.println("VERIFICO MEIO"); if(mat[l-1][c]==9) { cont++; } if(mat[l+1][c]==9) { cont++; } if(mat[l][c-1]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } if(mat[l-1][c-1]==9) { cont++; } if(mat[l+1][c-1]==9) { cont++; } if(mat[l+1][c+1]==9) { cont++; } if(mat[l-1][c+1]==9) { cont++; } } if(c==1&&l<7||l>1)//Analisa lado esquerdo { //System.out.println("VERIFICO ESQUERDO "); if(mat[l-1][c]==9) { cont++; } if(mat[l+1][c]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } if(mat[l+1][c+1]==9) { cont++; } if(mat[l-1][c+1]==9) { cont++; } } if(c==7&&l<7||l>1)//Analisa lado Direito { //System.out.println("VERIFICO DIREITO"); if(mat[l-1][c]==9) { cont++; } if(mat[l+1][c]==9) { cont++; } if(mat[l][c-1]==9) { cont++; } if(mat[l+1][c-1]==9) { cont++; } if(mat[l-1][c-1]==9) { cont++; } } if(l==1&&c<7||c>1)// Analisa em cima { //System.out.println("VERIFICO CIMA"); if(mat[l][c-1]==9) { cont++; } if(mat[l+1][c-1]==9) { cont++; } if(mat[l+1][c]==9) { cont++; } if(mat[l+1][c+1]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } } if(l==7&&c<7||c>1)// analisa em baixo { //System.out.println("VERIFICO BAIXO"); if(mat[l][c-1]==9) { cont++; } if(mat[l-1][c-1]==9) { cont++; } if(mat[l-1][c]==9) { cont++; } if(mat[l-1][c+1]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } }

por isso:

for (int y = Math.max(0, l-1); y < Math.min(mat.length, l+1); y++) { for (int x = Math.max(0, c-1); x < Math.min(mat[y].length, c+1); x++) { if(mat[y][x]==9) cont++; } }

ai ja fica mais facil continuar lendo o codigo

G

seu codigo tava errado aki:

if(l<7||l>1&&c<7||c>1) //verifica os campos do meio

deveria ser:

if(l<7&&l>1&&c<7&&c>1) //verifica os campos do meio

pq l<7||l>1 sempre será verdaderio.

pq se não for menor q 7, com certeza será maior q 1.

A

puts, verdade cara… vlw :smiley:
vo arrumar e ver como fica agora

A

GilsonNunes:
troque esse:

if(l==7&&c==1)//Analisa canto esquerdo inferior { //System.out.println("VERIFICO ESQUERDO BAIXO"); if(mat[l-1][c]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } if(mat[l-1][c+1]==9) { cont++; } } if(l==1&&c==1) //Analisa canto esquerdo superior //System.out.println("VERIFICO ESQUERDO CIMA"); { if(mat[l+1][c]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } if(mat[l+1][c+1]==9) { cont++; } } if(l==1&&c==7)//Analisa canto direito Superior //System.out.println("VERIFICO DIREITO CIMA"); { if(mat[l-1][c]==9) { cont++; } if(mat[l][c-1]==9) { cont++; } if(mat[l+1][c-1]==9) { cont++; } } if(l==7&&c==7)//Analisa canto direito inferior //System.out.println("VERIFICO DIREITO BAIXO"); { if(mat[l-1][c]==9) { cont++; } if(mat[l][c-1]==9) { cont++; } if(mat[l-1][c-1]==9) { cont++; } } if(l<7||l>1&&c<7||c>1) //verifica os campos do meio { //System.out.println("VERIFICO MEIO"); if(mat[l-1][c]==9) { cont++; } if(mat[l+1][c]==9) { cont++; } if(mat[l][c-1]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } if(mat[l-1][c-1]==9) { cont++; } if(mat[l+1][c-1]==9) { cont++; } if(mat[l+1][c+1]==9) { cont++; } if(mat[l-1][c+1]==9) { cont++; } } if(c==1&&l<7||l>1)//Analisa lado esquerdo { //System.out.println("VERIFICO ESQUERDO "); if(mat[l-1][c]==9) { cont++; } if(mat[l+1][c]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } if(mat[l+1][c+1]==9) { cont++; } if(mat[l-1][c+1]==9) { cont++; } } if(c==7&&l<7||l>1)//Analisa lado Direito { //System.out.println("VERIFICO DIREITO"); if(mat[l-1][c]==9) { cont++; } if(mat[l+1][c]==9) { cont++; } if(mat[l][c-1]==9) { cont++; } if(mat[l+1][c-1]==9) { cont++; } if(mat[l-1][c-1]==9) { cont++; } } if(l==1&&c<7||c>1)// Analisa em cima { //System.out.println("VERIFICO CIMA"); if(mat[l][c-1]==9) { cont++; } if(mat[l+1][c-1]==9) { cont++; } if(mat[l+1][c]==9) { cont++; } if(mat[l+1][c+1]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } } if(l==7&&c<7||c>1)// analisa em baixo { //System.out.println("VERIFICO BAIXO"); if(mat[l][c-1]==9) { cont++; } if(mat[l-1][c-1]==9) { cont++; } if(mat[l-1][c]==9) { cont++; } if(mat[l-1][c+1]==9) { cont++; } if(mat[l][c+1]==9) { cont++; } }

por isso:

for (int y = Math.max(0, l-1); y < Math.min(mat.length, l+1); y++) { for (int x = Math.max(0, c-1); x < Math.min(mat[y].length, c+1); x++) { if(mat[y][x]==9) cont++; } }

ai ja fica mais facil continuar lendo o codigo

humm, vou testar isso tbm…
caramba, vai diminuir mto o codigo…brigadão :smiley:
ficou mto melhor de ver mas nao intend como funciona esses “fores”…se tiver como explicar :B

G

for (int y = Math.max(0, l-1); y < Math.min(mat.length, l+2); y++) { for (int x = Math.max(0, c-1); x < Math.min(mat[y].length, c+2); x++) { if(mat[y][x]==9) cont++; } }

l+1 para l+2
e
c+1 para c+2

Criado 28 de junho de 2012
Ultima resposta 28 de jun. de 2012
Respostas 7
Participantes 4