How can I add ships of size 2 or more

Asked

Viewed 85 times

2

I have the game of naval battle done in java. It runs perfectly, the position of the ships is randomly drawn... But I wanted to make sure that there could be ships with more than 1 size. That is, ships of size 3 vertical, horizontal... What changes do I need to make??? Thanks for the help, continuation of a good afternoon.

Naval battle code:

import java.util.Random;
import java.util.Scanner;

public class JogodaBatalhanaval {

    private static String[] args;

    public static void main(String[] args) {
        int[][] tabuleiro = new int[5][5];
        int[][] navios = new int[3][2];
        int[] tiro = new int[2];
        int tentativas=0,
            acertos=0;

        inicializaTabuleiro(tabuleiro);
        iniciaNavios(navios);

        System.out.println();

        do{
            mostraTabuleiro(tabuleiro);
            darTiro(tiro);
            tentativas++;

            if(acertou(tiro,navios)){
                dica(tiro,navios,tentativas);
                acertos++;
            }                
            else
                dica(tiro,navios,tentativas);

            alteraTabuleiro(tiro,navios,tabuleiro);


        }while(acertos!=3);

        System.out.println("\n\n\nJogo terminado. Você acertou os 3 navios em "+tentativas+" tentativas");
        menu();
        mostraTabuleiro(tabuleiro);
    }

    public static void inicializaTabuleiro(int[][] tabuleiro){
        for(int linha=0 ; linha < 5 ; linha++ )
            for(int coluna=0 ; coluna < 5 ; coluna++ )
                tabuleiro[linha][coluna]=-1;
    }

    public static void mostraTabuleiro(int[][] tabuleiro){
        System.out.println("\t1 \t2 \t3 \t4 \t5");
        System.out.println();

        for(int linha=0 ; linha < 5 ; linha++ ){
            System.out.print((linha+1)+"");
            for(int coluna=0 ; coluna < 5 ; coluna++ ){
                if(tabuleiro[linha][coluna]==-1){
                    System.out.print("\t"+"-");
                }else if(tabuleiro[linha][coluna]==0){
                    System.out.print("\t"+" ");
                }else if(tabuleiro[linha][coluna]==1){
                    System.out.print("\t"+"X");
                }

            }
            System.out.println();
        }

    }

    public static void iniciaNavios(int[][] navios){
        Random sorteio = new Random();

        for(int navio=0 ; navio < 3 ; navio++){
            navios[navio][0]=sorteio.nextInt(5);
            navios[navio][1]=sorteio.nextInt(5);

            //agora vamos checar se esse par não foi sorteado
            //se foi, so sai do do...while enquanto sortear um diferente
            for(int anterior=0 ; anterior < navio ; anterior++){
                if( (navios[navio][0] == navios[anterior][0])&&(navios[navio][1] == navios[anterior][1]) )
                    do{
                        navios[navio][0]=sorteio.nextInt(5);
                        navios[navio][1]=sorteio.nextInt(5);
                    }while( (navios[navio][0] == navios[anterior][0])&&(navios[navio][1] == navios[anterior][1]) );
            }

        }
    }

    public static void darTiro(int[] tiro){
        Scanner entrada = new Scanner(System.in);

        System.out.print("Linha: ");
        tiro[0] = entrada.nextInt();
        tiro[0]--;

        System.out.print("Coluna: ");
        tiro[1] = entrada.nextInt();
        tiro[1]--;

    }

    public static boolean acertou(int[] tiro, int[][] navios){

        for(int navio=0 ; navio<navios.length ; navio++){
            if( tiro[0]==navios[navio][0] && tiro[1]==navios[navio][1]){
                System.out.printf("Você acertou o tiro (%d,%d)\n",tiro[0]+1,tiro[1]+1);
                return true;
            }
        }
        return false;
    }

    public static void dica(int[] tiro, int[][] navios, int tentativa){
        int linha=0,
            coluna=0;

        for(int fila=0 ; fila < navios.length ; fila++){
            if(navios[fila][0]==tiro[0])
                linha++;
            if(navios[fila][1]==tiro[1])
                coluna++;
        }
        for (int i = 0; i < 50; i++) {
            System.out.println("");
        }
        System.out.printf("\nDica %d: \nlinha %d -> %d navios\n" +
                                 "coluna %d -> %d navios\n",tentativa,tiro[0]+1,linha,tiro[1]+1,coluna);
    }

    public static void alteraTabuleiro(int[] tiro, int[][] navios, int[][] tabuleiro){
        if(acertou(tiro,navios))
            tabuleiro[tiro[0]][tiro[1]]=1;
        else
            tabuleiro[tiro[0]][tiro[1]]=0;
    }

    public static void menu() {
        Scanner scan = new Scanner(System.in);
        int tecla;
        System.out.println("");
        System.out.println("");
        System.out.println("");
        System.out.println("Clique 0 para sair");
        System.out.println("Clique 1 para voltar ao menu");
        System.out.println("Clique 2 para repetir");
        System.out.println("");
        System.out.print("Opcao: ");
        tecla = scan.nextInt();

        if (tecla == 1) {
            for (int i = 0; i < 50; i++) {
                System.out.println("");
            }
            Exe.main(args);
        }
        if (tecla == 2) {
            for (int i = 0; i < 50; i++) {
                System.out.println("");
            }
            JogodaBatalhanaval.main(args);
        }

        if (tecla == 0) {
            for (int i = 0; i < 50; i++) {
                System.out.println("");
            }
            System.out.print("Obrigado");
            System.exit(0);
        }
    }

}
  • From what I understood your code the position of the ships is chosen randomly with the Random giving two positions [] [], to place ships of two sizes just make a loop with the value of the Random +1, for example, [random + 1] [], but I’m not sure that’s all

  • It can be done, but it will be necessary to restructure the code. Is there a reason why you made the structured code? You are using an object-oriented language and built the code as if you were programming in c. Your problem will be solved easier by creating some objects. The size of the ship will be random too?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.