How can I add ships of size 2 or more

2

I have the naval battle game done in java. It runs perfectly, the position of the ships is randomly drawn ... But I wanted to make it possible to have ships with more than 1 size. That is, ships of size 3 vertical, horizontal ... What changes do I need to do ??? 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);
        }
    }

}
    
asked by anonymous 14.11.2017 / 17:08

0 answers