Ir ao conteúdo

C++ Batalha naval em c++


Ir à solução Resolvido por Relry,

Posts recomendados

Postado

Bom, na hora de escolher a coordenada do mapa, teria que colocar um '.' ou o objeto relacionado, porém, quando eu coloco uma coordenada de um objeto, também aparece um ponto.
Não sei como resolver isso 😥

#include<stdio.h>
#include<stdlib.h>
//----------------------------DECLARACOES GLOBAIS-----------------------------//
char v[15][15], tabuleiro[15][15];
int lin,col,jogarDeNovo, x = 0, linha, coluna, opcao, y, contador;
//----------------------------------------------------------------------------//

//----------------------------CABEÇALHO DAS FUNÇÕES--------------------------//

void carregarJogo();
void inicio();
void escolha_mapa();



//----------------------------------------------------------------------------//
//Funcao principal do programa

int main()
{

	int  opcao,l,c,contador;
    char resp = 'N';

	
	escolha_mapa();
    carregarJogo(); //executa uma vez a cada rodada, preenchendo todas as posições com espaco em branco ( ' ' )

	system ("cls");
    inicio();
   
    system("cls");
    inicio();

}

//----------------------------------------------------------------------------//
//essa funcao faz a matriz ficar com o estilo do mapa, e também preenche com %c, para que o valor possa ser inserido no mapa
void inicio()
{
	for (contador=75; contador>0; contador--)
	{
	
	printf("    C1  C2  C3  C4  C5  C6  C7  C8  C9  C10 C11 C12 C13 C14 C15 \n");
	for (linha = 0; linha < 9; linha++)
	{
		printf("L%d | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n", linha+1,v[linha][0], v[linha][1],v[linha][2],v[linha][3],v[linha][4],v[linha][5],v[linha][6],v[linha][7],v[linha][8],v[linha][9],v[linha][10],v[linha][11],v[linha][12],v[linha][13],v[linha][14],v[linha][15]);
	}

	for ( ; linha < 15; linha++)
	{
		printf("L%d| %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n", linha+1, v[linha][0], v[linha][1],v[linha][2],v[linha][3],v[linha][4],v[linha][5],v[linha][6],v[linha][7],v[linha][8],v[linha][9],v[linha][10],v[linha][11],v[linha][12],v[linha][13],v[linha][14],v[linha][15]);
	}
	
	printf("Jogadas Restantes: %d\n", contador);
	printf("Digite as coordenadas: ");
  	scanf("%d %d",&linha,&coluna);
   	if (tabuleiro[linha--][coluna--]=' ')
   	{
   		v[linha--][coluna--]='.';
	}
	else
	{
		v[linha--][coluna--]=tabuleiro[linha--][coluna--];
	}
	}
}

//----------------------------------------------------------------------------//
// inicializa a matriz com espaço em branco ( ' ' ).

void carregarJogo()
  {
  	
    int lin, col;
    for(lin = 0; lin < 16 ; lin++)
    {
		    for(col = 0 ; col < 16 ; col++)
		    {
                    v[lin][col] = ' ' ;
            }
	}
}

//------------------------------------------------------------------------------//
//funcao usada para escolher o mapa quando o jogo inicia

void escolha_mapa()
{
	int y, tabuleiro[15][15];
	printf("Escolha o mapa que deseja jogar:\n\nDigite 1 para Mar;\n       2 para Lagoa;\n       3 para Rio;\n");
	scanf("%d",&opcao);
	
	fflush (stdin);
	

	switch (opcao)
	{
		case 1:
		
			//porta aviao
			tabuleiro[9][2]='p'; tabuleiro[9][3]='p'; tabuleiro[9][4]='p'; tabuleiro[9][5]='p'; tabuleiro[9][6]='p';
			//hidroaviao
			tabuleiro[5][1]='h'; tabuleiro[4][2]='h'; tabuleiro[5][3]='h';
			tabuleiro[7][1]='h'; tabuleiro[6][2]='h'; tabuleiro[7][3]='h';
			tabuleiro[15][9]='h'; tabuleiro[14][10]='h'; tabuleiro[15][11]='h';
			//cruzador
			tabuleiro[14][10]='c'; tabuleiro[14][11]='c';
			tabuleiro[3][8]='c';  tabuleiro[3][9]='c';
			tabuleiro[8][8]='c'; tabuleiro[8][9]='c';
			//encouracado
			tabuleiro[1][9]='e'; tabuleiro[1][10]='e'; tabuleiro[1][11]='e'; tabuleiro[1][12]='e';
			tabuleiro[4][3]='e'; tabuleiro[4][4]='e'; tabuleiro[4][5]='e'; tabuleiro[4][6]='e';
			//submarino
			tabuleiro[0][1]='s'; tabuleiro[0][9]='s'; tabuleiro[11][6]='s'; tabuleiro[13][12]='s';
			break;
		
		
		case 2:
			
			//porta aviao
 			tabuleiro[11][2]='p'; tabuleiro[11][3]='p'; tabuleiro[11][4]='p'; tabuleiro[11][5]='p'; tabuleiro[11][6]='p';
			//hidroaviao
 			tabuleiro[5][1]='h'; tabuleiro[4][2]='h'; tabuleiro[5][3]='h';
 			tabuleiro[9][1]='h';  tabuleiro[8][2]='h'; tabuleiro[9][3]='h';
 			tabuleiro[11][9]='h';  tabuleiro[10][10]='h'; tabuleiro[11][11]='h';
 			//cruzador
 			tabuleiro[0][10]='c';  tabuleiro[0][11]='c';
 			tabuleiro[2][10]='c';   tabuleiro[2][11]='c';
 			tabuleiro[9][8]='c';  tabuleiro[9][9]='c';
 			//encouracado
 			tabuleiro[8][2]='e';  tabuleiro[8][3]='e'; tabuleiro[8][4]='e'; tabuleiro[8][5]='e';
 			tabuleiro[10][3]='e';  tabuleiro[10][4]='e'; tabuleiro[10][5]='e'; tabuleiro[10][6]='e';
 			//submarino
 			tabuleiro[0][1]='s';  tabuleiro[11][9]='s'; tabuleiro[6][6]='s'; tabuleiro[12][12]='s';
 			break;
			
		case 3:
			
			//porta aviao
			tabuleiro[13][13]='p'; tabuleiro[13][12]='p'; tabuleiro[13][11]='p'; tabuleiro[13][10]='p'; tabuleiro[13][9]='p';
			//hidroaviao
			tabuleiro[1][2]='h'; tabuleiro[2][1]='h'; tabuleiro[2][3]='h';
			tabuleiro[5][6]='h'; tabuleiro[4][7]='h'; tabuleiro[6][7]='h';
			tabuleiro[14][6]='h'; tabuleiro[13][7]='h'; tabuleiro[14][8]='h';
			//cruzador
			tabuleiro[15][15]='c'; tabuleiro[15][14]='c';
			tabuleiro[3][10]='c';  tabuleiro[3][11]='c';
			tabuleiro[7][2]='c'; tabuleiro[7][3]='c';
			//encouracado
			tabuleiro[6][1]='e'; tabuleiro[7][1]='e'; tabuleiro[8][1]='e'; tabuleiro[9][1]='e';
			tabuleiro[4][3]='e'; tabuleiro[4][4]='e'; tabuleiro[4][5]='e'; tabuleiro[4][6]='e';
			//submarino
			tabuleiro[13][4]='s'; tabuleiro[11][11]='s'; tabuleiro[2][14]='s'; tabuleiro[12][12]='s';
			break;
		
		default:
		{
			printf("\nOpcao invalida!!!\n\n");
			escolha_mapa();
		}
	}
}




//--------------------------------FIM DO PROGRAMA-----------------------------//

 

  • Amei 1
Postado

@RiXaRd cara, me parece que sua função escolha_mapa() esta setando os valores dos objetos do seu tabuleiro na variavel local desta função e não na variavel global tabuleiro, verifica isso amigo.

  • Curtir 2
Postado

@RiXaRd hmm... não estou em casa agr para ver o codigo, mas eu olhei aqui e tenho outra dica pra você, quando você usa os operadores de incremento(++) e decremento(--) nas variaveis você acaba armazenando um novo valor a elas, ou seja...
 

if (tabuleiro[linha--][coluna--]=' ')
{
	v[linha--][coluna--]='.';
}

acima se tivermos o valor de linha = 0 e coluna = 1 ao passar pelo if a verificação estaria tabuleiro[0][1] e logo após isso as suas variáveis teriam um valo a menos atribuído a elas, quando ele entrasse no if aconteceria um erro de memoria pois ele tentaria acessar um array que não existe em v[-1][0]

  • Curtir 2
  • Solução
Postado

@RiXaRd simples cara, o seu unico erro foi ter colocado a atribuição no lugar onde era pra ser uma comparação, veja
 

if (tabuleiro[linha--][coluna--]=' ')
   	{
   		v[linha--][coluna--]='.';
	}

 

eu nem tinha reparado, mas o certo é

if (tabuleiro[linha--][coluna--] == ' ')
   	{
   		v[linha--][coluna--]='.';
	}

com 2(dois) = (iguais)

adicionado 28 minutos depois

@RiXaRd eu cheguei a modificar um pouco seu codigo, caso queira aproveitar alguma coisa esta ai

#include<stdio.h>
#include<stdlib.h>

//----------------------------DEFINIÇÕES--------------------------------------//
#define MAX_LINHA 16
#define MAX_COLUNA 16
#define MAX_JOGADAS 75


//----------------------------DECLARACOES GLOBAIS-----------------------------//
char v[MAX_LINHA][MAX_COLUNA], tabuleiro[MAX_LINHA][MAX_COLUNA];
int lin,col,jogarDeNovo, x = 0, linha, coluna, opcao, y, contador;
//----------------------------------------------------------------------------//

//----------------------------CABEÇALHO DAS FUNÇÕES--------------------------//

void carregarJogo();
void inicio();
void escolha_mapa();



//----------------------------------------------------------------------------//
//Funcao principal do programa

int main()
{

	int  opcao,l,c,contador;
    char resp = 'N';


	carregarJogo(); //executa uma vez a cada rodada, preenchendo todas as posições com espaco em branco ( ' ' )
    escolha_mapa();

	system ("cls");
    inicio();

    system("cls");
    inicio();

}

//----------------------------------------------------------------------------//
//essa funcao faz a matriz ficar com o estilo do mapa, e também preenche com %c, para que o valor possa ser inserido no mapa
void inicio()
{
	for (contador=MAX_JOGADAS; contador>0; contador--)
	{

        printf("     ");
        for(int x = 0; x < MAX_COLUNA; x++){
            printf("C%02d ", x+1);
        }
        printf("\n");

        for (linha = 0; linha < MAX_LINHA; linha++)
        {
            printf("L%02d |", linha+1);
            for (int colV = 0; colV < MAX_COLUNA; colV++){
                printf(" %c |", v[linha][colV]);
            }
            printf("\n");
            //printf("L%02d | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n", linha+1,v[linha][0], v[linha][1],v[linha][2],v[linha][3],v[linha][4],v[linha][5],v[linha][6],v[linha][7],v[linha][8],v[linha][9],v[linha][10],v[linha][11],v[linha][12],v[linha][13],v[linha][14],v[linha][15]);
        }
        /*
        for ( ; linha < 15; linha++)
        {
            printf("L%d| %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n", linha+1, v[linha][0], v[linha][1],v[linha][2],v[linha][3],v[linha][4],v[linha][5],v[linha][6],v[linha][7],v[linha][8],v[linha][9],v[linha][10],v[linha][11],v[linha][12],v[linha][13],v[linha][14],v[linha][15]);
        }//*/

        printf("Jogadas Restantes: %d\n", contador);
        printf("Digite as coordenadas: ");
        scanf("%d %d",&linha,&coluna);
        if (tabuleiro[linha-1][coluna-1]==' ')
        {
            v[linha-1][coluna-1]='.';
        }
        else
        {
            v[linha-1][coluna-1]=tabuleiro[linha-1][coluna-1];
        }
	}
}

//----------------------------------------------------------------------------//
// inicializa a matriz com espaço em branco ( ' ' ).

void carregarJogo()
  {

    int lin, col;
    for(lin = 0; lin < MAX_LINHA ; lin++)
    {
		    for(col = 0 ; col < MAX_COLUNA ; col++)
		    {
                    v[lin][col] = ' ' ;
                    tabuleiro[lin][col] = ' ' ;
            }
	}
}

//------------------------------------------------------------------------------//
//funcao usada para escolher o mapa quando o jogo inicia

void escolha_mapa()
{
	int y;
	printf("Escolha o mapa que deseja jogar:\n\nDigite 1 para Mar;\n       2 para Lagoa;\n       3 para Rio;\n");
	scanf("%d",&opcao);

	fflush (stdin);


	switch (opcao)
	{
		case 1:

			//porta aviao
			tabuleiro[9][2]='p'; tabuleiro[9][3]='p'; tabuleiro[9][4]='p'; tabuleiro[9][5]='p'; tabuleiro[9][6]='p';
			//hidroaviao
			tabuleiro[5][1]='h'; tabuleiro[4][2]='h'; tabuleiro[5][3]='h';
			tabuleiro[7][1]='h'; tabuleiro[6][2]='h'; tabuleiro[7][3]='h';
			tabuleiro[15][9]='h'; tabuleiro[14][10]='h'; tabuleiro[15][11]='h';
			//cruzador
			tabuleiro[14][10]='c'; tabuleiro[14][11]='c';
			tabuleiro[3][8]='c';  tabuleiro[3][9]='c';
			tabuleiro[8][8]='c'; tabuleiro[8][9]='c';
			//encouracado
			tabuleiro[1][9]='e'; tabuleiro[1][10]='e'; tabuleiro[1][11]='e'; tabuleiro[1][12]='e';
			tabuleiro[4][3]='e'; tabuleiro[4][4]='e'; tabuleiro[4][5]='e'; tabuleiro[4][6]='e';
			//submarino
			tabuleiro[0][1]='s'; tabuleiro[0][9]='s'; tabuleiro[11][6]='s'; tabuleiro[13][12]='s';
			break;


		case 2:

			//porta aviao
 			tabuleiro[11][2]='p'; tabuleiro[11][3]='p'; tabuleiro[11][4]='p'; tabuleiro[11][5]='p'; tabuleiro[11][6]='p';
			//hidroaviao
 			tabuleiro[5][1]='h'; tabuleiro[4][2]='h'; tabuleiro[5][3]='h';
 			tabuleiro[9][1]='h';  tabuleiro[8][2]='h'; tabuleiro[9][3]='h';
 			tabuleiro[11][9]='h';  tabuleiro[10][10]='h'; tabuleiro[11][11]='h';
 			//cruzador
 			tabuleiro[0][10]='c';  tabuleiro[0][11]='c';
 			tabuleiro[2][10]='c';   tabuleiro[2][11]='c';
 			tabuleiro[9][8]='c';  tabuleiro[9][9]='c';
 			//encouracado
 			tabuleiro[8][2]='e';  tabuleiro[8][3]='e'; tabuleiro[8][4]='e'; tabuleiro[8][5]='e';
 			tabuleiro[10][3]='e';  tabuleiro[10][4]='e'; tabuleiro[10][5]='e'; tabuleiro[10][6]='e';
 			//submarino
 			tabuleiro[0][1]='s';  tabuleiro[11][9]='s'; tabuleiro[6][6]='s'; tabuleiro[12][12]='s';
 			break;

		case 3:

			//porta aviao
			tabuleiro[13][13]='p'; tabuleiro[13][12]='p'; tabuleiro[13][11]='p'; tabuleiro[13][10]='p'; tabuleiro[13][9]='p';
			//hidroaviao
			tabuleiro[1][2]='h'; tabuleiro[2][1]='h'; tabuleiro[2][3]='h';
			tabuleiro[5][6]='h'; tabuleiro[4][7]='h'; tabuleiro[6][7]='h';
			tabuleiro[14][6]='h'; tabuleiro[13][7]='h'; tabuleiro[14][8]='h';
			//cruzador
			tabuleiro[15][15]='c'; tabuleiro[15][14]='c';
			tabuleiro[3][10]='c';  tabuleiro[3][11]='c';
			tabuleiro[7][2]='c'; tabuleiro[7][3]='c';
			//encouracado
			tabuleiro[6][1]='e'; tabuleiro[7][1]='e'; tabuleiro[8][1]='e'; tabuleiro[9][1]='e';
			tabuleiro[4][3]='e'; tabuleiro[4][4]='e'; tabuleiro[4][5]='e'; tabuleiro[4][6]='e';
			//submarino
			tabuleiro[13][4]='s'; tabuleiro[11][11]='s'; tabuleiro[2][14]='s'; tabuleiro[12][12]='s';
			break;

		default:
		{
			printf("\nOpcao invalida!!!\n\n");
			escolha_mapa();
		}
	}
}


//--------------------------------FIM DO PROGRAMA-----------------------------//

 

adicionado 30 minutos depois

@RiXaRd Outra coisa... qualquer duvida ou se precisar de ajuda pra randomizar a posição dos navios só dar um toque.

  • Curtir 1
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...