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.
[code]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);
}
}
}[/code]
valew
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
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
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?
tipo assim se a linha e coluna estiverem certas ,
[code] 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");
} [/code]
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:
[code]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";
} [/code]
e depois o tabuleiro com o lugar onde ele indicou
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.
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:
[code]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);
}
}
}[/code]
tudo bem mais mesmo assim o tabuleiro nao aparece nem ferrando
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
[quote=ursodamongolia]a matriz posiçao pegara as duas variaveis e vai verificar se o cara acertou algum barco no jogo
pra depois mostrar:
[code]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";
} [/code]
e depois o tabuleiro com o lugar onde ele indicou[/quote]
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:
[quote=“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[/quote]
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
):
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.
Seu código possui diversos problemas além da não continuidade do jogo, mas a correção q necessita segue:
[code]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);
}
}
}
[/code]
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.