Problema com jogo

11 respostas
ursodamongolia

Gente to precisando de ajuda : eu to tendo que fazer o jogo batalha naval em java e nao to conseguindo

ta ai o codigo pra quem quiser da uma olhada.
import java.io.*;
import java.util.*;
class batalhanaval
{
    public static void main(String args[])
    {
        try
        {
            int i=0,j=0,max=8,min=8,coluna=0,linha=0; 
            double tabuleiro[][] = new double[max][min];
            double posicao[][] = new double[max][min];
            //int escolha = posicao[i][j]; //{"a","b","c","d","e","f","g","h","i","j","l","m","n","o","p"};
            //Random ramdom = new Random(4);
        for(i=0;i<tabuleiro.length;i++){
              for(j=0;j<tabuleiro.length;j++){  
              posicao[i][j] = 0;
              }
        }
            
        for(i=0;i<tabuleiro.length;i++){
              for(j=0;j<tabuleiro.length;j++){
                 	//SUBMARINO 1//
	                posicao[1][2] = 1;
		            //SUBMARINO 2//
	                posicao[1][0] = 1;
 		            //SUBMARINO 3//
	                posicao[6][7] = 1;
            		//SUBMARINO 4//
	                posicao[4][6] = 1;
            		//SUBMARINO 5//
                   posicao[3][1] = 1;
                   
                   
                 	//DISTROYER 1//
	                posicao[0][6] = 3;
	                posicao[0][7] = 3;
		            //DISTROYER 2//
 		            posicao[3][6] = 3;
	                posicao[3][7] = 3;
	                //DISTROYER 3//
	                posicao[5][0] = 3;
	                posicao[5][1] = 3;
            		//DISTROYER 4//
	                posicao[4][2] = 3;
	                posicao[4][3] = 3;
	                
	                //CRUZADOR 1//
		            posicao[5][3] = 5;
			        posicao[5][4] = 5;
		 	        posicao[5][5] = 5;
	                //CRUZADOR 2//
		            posicao[1][5] = 5;
			        posicao[1][6] = 5;
		 	        posicao[1][7] = 5;
	                //CRUZADOR 3//
		            posicao[2][4] = 5;
			        posicao[2][5] = 5;
		 	        posicao[2][6] = 5;
	                
            		//NAVIO 1//
		 	  		posicao[0][0] = 7;
				 	posicao[0][1] = 7;
		 	  		posicao[0][2] = 7;
		 	  		posicao[0][3] = 7;
		 	  		//NAVIO 2//
		 	  		posicao[6][2] = 7;
				 	posicao[6][3] = 7;
		 	  		posicao[6][4] = 7;
		 	  		posicao[6][5] = 7;
		 	  		
		 	  		//PORTA AVIAO//
		 	  		posicao[7][3] = 9;
				 	posicao[7][4] = 9;
		 	  		posicao[7][5] = 9;
		 	  		posicao[7][6] = 9;
		 	  		posicao[7][7] = 9;
		 	  		
		 	  		tabuleiro[i][j] = posicao[i][j];
              }
        }
         
            Scanner tec = new Scanner(System.in);
            
                  System.out.print("Digite a linha: ");
                  if(linha >=0 && linha <=7){
                     linha = tec.nextInt(); //0 + ramdom.nextInt(10);
                    }else{
                        System.out.print("Linha Invalida");
                    }
                    
                 System.out.print("Digite a Coluna: ");
                 if(coluna >= 0 && coluna <= 7){
                     coluna = tec.nextInt();
                    }else{
                        System.out.print("Coluna Invalida");
                    }
        
                 //if(tabuleiro[i][j] == " "){
                for(i=0;i<tabuleiro.length;i++){
                    for(j=0;j<tabuleiro.length;j++){
                     posicao[i][j] = linha && coluna;
                    }
                }
                     switch(linha && coluna == posicao[i][j]){
                         case 0:
                           System.out.println("voce atirou na agua, tente novamente");
                           tabuleiro[i][j] = "X";
                           
                     case 1:
                           System.out.println("voce acertou um submarino");
                           tabuleiro[i][j] = "1";
                           
                     case 3:
                           System.out.println("voce acertou um distroyer");
                           tabuleiro[i][j] = "3";
                           
                     case 5:
                           System.out.println("voce acertou um cruzador");
                           tabuleiro[i][j] = "5";
                           
                     case 7:
                           System.out.println("voce acertou um navio");
                           tabuleiro[i][j] = "7";
                           
                     case 9:
                           System.out.println("voce acertou um porta-avioes");
                           tabuleiro[i][j] = "9";
                           
                         } 
                    //}   
                    
        for(i=0;i<tabuleiro.length;i++){
            for(j=0;j<tabuleiro[0].length;j++)
                System.out.print(tabuleiro[i][j]+" ");
                System.out.println();
        }
        
        }
        catch(Exception erro)
        {
            System.exit(0);
        }
    }
}

valew

11 Respostas

guisantogui

Onde esta apontando erro?

E uma coisinha o nome da sua Classe deve ser em maiusculo

BatalhaNaval

não esqueça q JAVA tem case SenSiTivE

ursodamongolia

o erro ehh na linha 101

operator && cannot be applied to int , int

mais assim como eu vou fazer pra posicao reconhecer a linha e coluna pra fazer o switch case

Poneis123

Realmente, posicao[i][j] = linha && coluna;não existe… esse operadpr && é pra ser usado em um if, while, etc… o q vc ta querendo fazer com esse comando ai?

ursodamongolia
tipo assim se a linha e coluna estiverem certas ,
System.out.print("Digite a linha: ");  
                  if(linha >=0 && linha <=7){  
                     linha = tec.nextInt(); //0 + ramdom.nextInt(10);  
                    }else{  
                        System.out.print("Linha Invalida");  
                    }  
                      
                 System.out.print("Digite a Coluna: ");  
                 if(coluna >= 0 && coluna <= 7){  
                     coluna = tec.nextInt();  
                    }else{  
                        System.out.print("Coluna Invalida");  
                    }

depois disso entende???

a matriz posiçao pegara as duas variaveis e vai verificar se o cara acertou algum barco no jogo

pra depois mostrar:

switch(linha && coluna == posicao[i][j]){  
                         case 0:  
                           System.out.println("voce atirou na agua, tente novamente");  
                           tabuleiro[i][j] = "X";  
                             
                     case 1:  
                           System.out.println("voce acertou um submarino");  
                           tabuleiro[i][j] = "1";  
                             
                     case 3:  
                           System.out.println("voce acertou um distroyer");  
                           tabuleiro[i][j] = "3";  
                             
                     case 5:  
                           System.out.println("voce acertou um cruzador");  
                           tabuleiro[i][j] = "5";  
                             
                     case 7:  
                           System.out.println("voce acertou um navio");  
                           tabuleiro[i][j] = "7";  
                             
                     case 9:  
                           System.out.println("voce acertou um porta-avioes");  
                           tabuleiro[i][j] = "9";  
                             
                         }

e depois o tabuleiro com o lugar onde ele indicou

Poneis123

Entendi… mas assim, como vc já populou a matriz posição, vc nesse código q ta dando erro vc ta tentando atribuir um valor para a matriz, não entendi pq nesse laço vc ta querendo atribuir valores para a matriz…

vc precisa validar se na matriz na linha e coluna q o cara digitou, qual valor existe lá… certo?

Então vc terá algo assim, sem aquele for que ta o código errado:

switch(posicao[linha][coluna]){ //posicao[linha][coluna] vai retornar o valor q contem na matriz na linha e coluna digitada... e ai entra nos cases.

Ve se é isso… se não for, me explica o q vc quer fazer naquele for q ta com o código errado.

ursodamongolia
valew cara era isso mesmo , so que assim eu to com outro problema : o tabuleiro é impresso no começo mais depois da jogada ele nao imprime novamente com a jogada mais sim so a jogada sem o tabuleiro, codigo abaixo:
import java.io.*;
import java.util.*;
class batalhanaval
{
    public static void main(String args[])
    {
        try
        {
            int i=0,j=0,max=8,min=8,coluna=0,linha=0; 
            String tabuleiro[][] = new String[max][min];
            int posicao[][] = new int[max][min];
            int escolha = posicao[linha][coluna]; //{"a","b","c","d","e","f","g","h","i","j","l","m","n","o","p"};
            //Random ramdom = new Random(4);
        for(i=0;i<tabuleiro.length;i++){
              for(j=0;j<tabuleiro.length;j++){  
              posicao[i][j] = 0;
              tabuleiro[i][j]=" ";
              }
        }
              System.out.println("    a   b   c   d   e   f   g   h"); //numero da coluna
              System.out.println("  _________________________________");
              for(i=0;i<tabuleiro.length;i++){//preenche as linhas com elementos de 0 a 7//
                    System.out.print(i + " ");   //numero da linhas do lado do tabuleiro
                   for(j=0;j<tabuleiro.length;j++){//preenche as colunas com elementos de 0 a 7//
                        System.out.print("| "+tabuleiro[i][j]+" ");
                   }
                   System.out.println("|");
                   System.out.println("  _________________________________");
               }
               
        for(i=0;i<tabuleiro.length;i++){
              for(j=0;j<tabuleiro.length;j++){
                 	//SUBMARINO 1//
	                posicao[1][2] = 1;
		            //SUBMARINO 2//
	                posicao[1][0] = 1;
 		            //SUBMARINO 3//
	                posicao[6][7] = 1;
            		//SUBMARINO 4//
	                posicao[4][6] = 1;
            		//SUBMARINO 5//
                   posicao[3][1] = 1;
                   
                   
                 	//DISTROYER 1//
	                posicao[0][6] = 3;
	                posicao[0][7] = 3;
		            //DISTROYER 2//
 		            posicao[3][6] = 3;
	                posicao[3][7] = 3;
	                //DISTROYER 3//
	                posicao[5][0] = 3;
	                posicao[5][1] = 3;
            		//DISTROYER 4//
	                posicao[4][2] = 3;
	                posicao[4][3] = 3;
	                
	                //CRUZADOR 1//
		            posicao[5][3] = 5;
			        posicao[5][4] = 5;
		 	        posicao[5][5] = 5;
	                //CRUZADOR 2//
		            posicao[1][5] = 5;
			        posicao[1][6] = 5;
		 	        posicao[1][7] = 5;
	                //CRUZADOR 3//
		            posicao[2][4] = 5;
			        posicao[2][5] = 5;
		 	        posicao[2][6] = 5;
	                
            		//NAVIO 1//
		 	  		posicao[0][0] = 7;
				 	posicao[0][1] = 7;
		 	  		posicao[0][2] = 7;
		 	  		posicao[0][3] = 7;
		 	  		//NAVIO 2//
		 	  		posicao[6][2] = 7;
				 	posicao[6][3] = 7;
		 	  		posicao[6][4] = 7;
		 	  		posicao[6][5] = 7;
		 	  		
		 	  		//PORTA AVIAO//
		 	  		posicao[7][3] = 9;
				 	posicao[7][4] = 9;
		 	  		posicao[7][5] = 9;
		 	  		posicao[7][6] = 9;
		 	  		posicao[7][7] = 9;
		 	  		

              }
        }
         
            Scanner tec = new Scanner(System.in);
            
                  System.out.print("Digite a linha: ");
                  if(linha >=0 && linha <=7){
                     linha = tec.nextInt(); //0 + ramdom.nextInt(10);
                    }else{
                        System.out.print("Linha Invalida");
                    }
                    
                 System.out.print("Digite a Coluna: ");
                 if(coluna >= 0 && coluna <= 7){
                     coluna = tec.nextInt();
                    }else{
                        System.out.print("Coluna Invalida");
                    }
        
                    System.out.println(escolha);
                 if(tabuleiro[linha][coluna] == " "){
                
                     switch(escolha){
                     case 0:
                           System.out.println("voce atirou na agua, tente novamente");
                           tabuleiro[linha][coluna] = "X";
                           break;
                     case 1:
                           System.out.println("voce acertou um submarino");
                           tabuleiro[linha][coluna] = "1";
                           break;
                     case 3:
                           System.out.println("voce acertou um distroyer");
                           tabuleiro[linha][coluna] = "3";
                           break;
                     case 5:
                           System.out.println("voce acertou um cruzador");
                           tabuleiro[linha][coluna] = "5";
                           break;
                     case 7:
                           System.out.println("voce acertou um navio");
                           tabuleiro[linha][coluna] = "7";
                           break;
                     case 9:
                           System.out.println("voce acertou um porta-avioes");
                           tabuleiro[linha][coluna] = "9";
                           break;
                         } 
                    }   
                    
        for(i=0;i<tabuleiro.length;i++){
            for(j=0;j<tabuleiro[0].length;j++)
                System.out.print(tabuleiro[i][j]+" ");
                System.out.println();
        }
        
        }
        catch(Exception erro)
        {
            System.exit(0);
        }
    }
}
ursodamongolia

tudo bem mais mesmo assim o tabuleiro nao aparece nem ferrando

ursodamongolia

entao ehh isso mesmo tem q mostrar o tabuleiro juntamente com a opçao do usuario fazendo com q se ele acerte ou nao mostre o tabuleiro com o erro ou acerto e faz com que o usuario continue com o jogo

WellingtonRamos
ursodamongolia:
a matriz posiçao pegara as duas variaveis e vai verificar se o cara acertou algum barco no jogo

pra depois mostrar:

switch(linha && coluna == posicao[i][j]){  
                         case 0:  
                           System.out.println("voce atirou na agua, tente novamente");  
                           tabuleiro[i][j] = "X";  
                             
                     case 1:  
                           System.out.println("voce acertou um submarino");  
                           tabuleiro[i][j] = "1";  
                             
                     case 3:  
                           System.out.println("voce acertou um distroyer");  
                           tabuleiro[i][j] = "3";  
                             
                     case 5:  
                           System.out.println("voce acertou um cruzador");  
                           tabuleiro[i][j] = "5";  
                             
                     case 7:  
                           System.out.println("voce acertou um navio");  
                           tabuleiro[i][j] = "7";  
                             
                     case 9:  
                           System.out.println("voce acertou um porta-avioes");  
                           tabuleiro[i][j] = "9";  
                             
                         }

e depois o tabuleiro com o lugar onde ele indicou

O switch não recebe um comparador mas um valor que ele, internamente, compara com os cases seguintes.
Então se a variavel tem o valor 1, ele comparará com o case que tenha valor igual a 1 e executará as instruções seguintes.

Obs.: se fosse, por exemplo:
int codigo = 1;
switch(codigo) {
  case 1:
  //Faz algo
  case 2:
  //Faz algo
  case 3:
  //Faz algo
}
Ele executaria todos os cases (1,2,3,etc). Para que ele execute exclusivamente o case 1, deve haver no fim um break.
int codigo = 1;
switch(codigo) {
  case 1:
  //Faz algo
  break;
  case 2:
  //Faz algo
  break;
  case 3:
  //Faz algo
  break;
}

da forma como você fez, acabaria aparecendo:

"seu programa":
voce atirou na agua, tente novamente
voce acertou um submarino
voce acertou um distroyer
voce acertou um cruzador
voce acertou um navio
voce acertou um porta-avioes

WellingtonRamos

Não analisei com muito cuidado o seu código, mas me parece faltar uma coisa…

Um jogo simples segue uma regrinha (pode até ser um pouco diferente, mas aí não seria tão simples :stuck_out_tongue: ):

Um loop “infinito” (em geral termina quando o jogo acaba):
Dentro do loop:
1 Desenha a tela
2 Obtêm a ação do usuário
3 Processa a ação do usuário
4 Volta a 1 (ou seja, volta ao início do loop)

Me parece que esse loop que envolve todo o processamento restante não existe no teu caso.

WellingtonRamos

Seu código possui diversos problemas além da não continuidade do jogo, mas a correção q necessita segue:

import java.io.*;   
import java.util.*;   
class batalhanaval   
{   
    public static void main(String args[])   
    {
    	//Faltava este WHILE....
    	while(true){
    		processar();
    	}
    }

	private static void processar() {
		try   
		{   
			int i=0,j=0,max=8,min=8,coluna=0,linha=0;   
			String tabuleiro[][] = new String[max][min];   
			int posicao[][] = new int[max][min];   
			int escolha = posicao[linha][coluna]; //{"a","b","c","d","e","f","g","h","i","j","l","m","n","o","p"};   
			//Random ramdom = new Random(4);   
			for(i=0;i<tabuleiro.length;i++){   
				for(j=0;j<tabuleiro.length;j++){     
					posicao[i][j] = 0;   
					tabuleiro[i][j]=" ";   
				}   
			}   
			System.out.println("    a   b   c   d   e   f   g   h"); //numero da coluna   
			System.out.println("  _________________________________");   
			for(i=0;i<tabuleiro.length;i++){//preenche as linhas com elementos de 0 a 7//   
				System.out.print(i + " ");   //numero da linhas do lado do tabuleiro   
				for(j=0;j<tabuleiro.length;j++){//preenche as colunas com elementos de 0 a 7//   
					System.out.print("| "+tabuleiro[i][j]+" ");   
				}   
				System.out.println("|");   
				System.out.println("  _________________________________");   
			}   
			
			for(i=0;i<tabuleiro.length;i++){   
				for(j=0;j<tabuleiro.length;j++){   
					//SUBMARINO 1//   
					posicao[1][2] = 1;   
					//SUBMARINO 2//   
					posicao[1][0] = 1;   
					//SUBMARINO 3//   
					posicao[6][7] = 1;   
					//SUBMARINO 4//   
					posicao[4][6] = 1;   
					//SUBMARINO 5//   
					posicao[3][1] = 1;   
					
					
					//DISTROYER 1//   
					posicao[0][6] = 3;   
					posicao[0][7] = 3;   
					//DISTROYER 2//   
					posicao[3][6] = 3;   
					posicao[3][7] = 3;   
					//DISTROYER 3//   
					posicao[5][0] = 3;   
					posicao[5][1] = 3;   
					//DISTROYER 4//   
					posicao[4][2] = 3;   
					posicao[4][3] = 3;   
					
					//CRUZADOR 1//   
					posicao[5][3] = 5;   
					posicao[5][4] = 5;   
					posicao[5][5] = 5;   
					//CRUZADOR 2//   
					posicao[1][5] = 5;   
					posicao[1][6] = 5;   
					posicao[1][7] = 5;   
					//CRUZADOR 3//   
					posicao[2][4] = 5;   
					posicao[2][5] = 5;   
					posicao[2][6] = 5;   
					
					//NAVIO 1//   
					posicao[0][0] = 7;   
					posicao[0][1] = 7;   
					posicao[0][2] = 7;   
					posicao[0][3] = 7;   
					//NAVIO 2//   
					posicao[6][2] = 7;   
					posicao[6][3] = 7;   
					posicao[6][4] = 7;   
					posicao[6][5] = 7;   
					
					//PORTA AVIAO//   
					posicao[7][3] = 9;   
					posicao[7][4] = 9;   
					posicao[7][5] = 9;   
					posicao[7][6] = 9;   
					posicao[7][7] = 9;   
					
					
				}   
			}   
			
			Scanner tec = new Scanner(System.in);   
			
			System.out.print("Digite a linha: ");   
			if(linha >=0 && linha <=7){   
				linha = tec.nextInt(); //0 + ramdom.nextInt(10);   
			}else{   
				System.out.print("Linha Invalida");   
			}   
			
			System.out.print("Digite a Coluna: ");   
			if(coluna >= 0 && coluna <= 7){   
				coluna = tec.nextInt();   
			}else{   
				System.out.print("Coluna Invalida");   
			}   
			
			System.out.println(escolha);   
			if(tabuleiro[linha][coluna] == " "){   
				
				switch(escolha){   
				case 0:   
					System.out.println("voce atirou na agua, tente novamente");   
					tabuleiro[linha][coluna] = "X";   
					break;   
				case 1:   
					System.out.println("voce acertou um submarino");   
					tabuleiro[linha][coluna] = "1";   
					break;   
				case 3:   
					System.out.println("voce acertou um distroyer");   
					tabuleiro[linha][coluna] = "3";   
					break;   
				case 5:   
					System.out.println("voce acertou um cruzador");   
					tabuleiro[linha][coluna] = "5";   
					break;   
				case 7:   
					System.out.println("voce acertou um navio");   
					tabuleiro[linha][coluna] = "7";   
					break;   
				case 9:   
					System.out.println("voce acertou um porta-avioes");   
					tabuleiro[linha][coluna] = "9";   
					break;   
				}   
			}     
			
			for(i=0;i<tabuleiro.length;i++){   
				for(j=0;j<tabuleiro[0].length;j++)   
					System.out.print(tabuleiro[i][j]+" ");   
				System.out.println();   
			}   
			
		}   
		catch(Exception erro)   
		{   
			System.exit(0);   
		}
	}   
}

Deixarei as pontas, que identifiquei soltas, para que você continue tentando.
Mas seus próximos problemas estão:
- na variável escolha
- No loop das posições
- Na impressão da posição do X, 1, 2, etc.

Criado 13 de abril de 2010
Ultima resposta 13 de abr. de 2010
Respostas 11
Participantes 4