Campo Minado modo Texto

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

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 :smiley:

[code]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);
}
}

[/code]

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

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

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:

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

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.

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

[quote=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

[/quote]

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

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