Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

letpeluchi

[Resolvido] Problema impressão de tabuleiro

Recommended Posts

to fazendo um joguinho de batalha naval..so que nao consigo imprimir o tabuleiro o joguinho e feito em uma matriz 5x5. onde o avios submarinos e etc... sao dispostos aleatoriamente..

 

'╒═╤═╤═╤═╤═╕';

'╞═╪═╪═╪═╪═╡';
'╞═╪═╪═╪═╪═╡';
'╞═╪═╪═╪═╪═╡';
'╞═╪═╪═╪═╪═╡';
'╘═╧═╧═╧═╧═╛';

#include<iostream>
#include <cstdlib>
#include <ctime>
#include<cstdio>
using namespace std;
int const N = 5; //linhas e colunas que serao o tabuleiro
bool navios[N][N]; //indicara onde os navios estarao (true: tem navio, false: nao tem)
char naviosAtacados[N][N];
int tiros = 20; //se o jogador chegar a 0, ele nao tem mais tiros e perde
int acertos = 0; //numero de acertos. Quando chegar a 15, o jogador venceu
int armazenaPortaAvioes[5][2], contadorPortaAvioes = 0;
int armazenaEncouracado[4][2], contadorEncouracado=0;
int armazenaCruzador[2][2], contadorCruzador=0;
//funcao que verificara qual dos navios foi o atacado e enviara a mensagem para o jogador
//quando este afunda o navio
bool verificaNavio(int linha, int coluna)
{
bool submarino = true;
//primeiro varificamos do porta avioes
for (int i =0; i<5; i++)
if(linha == armazenaPortaAvioes[0] || coluna == armazenaPortaAvioes[5])
{
contadorPortaAvioes++;
submarino = false;
}
if (contadorPortaAvioes ==5)
cout<<"Navio Porta Avioes Destruido!"<<endl;
for (int i=0; i<4; i++)
if(linha == armazenaEncouracado[0] || coluna == armazenaEncouracado[4])
{
contadorEncouracado++;
submarino = false;
}
if(contadorEncouracado == 4)
cout<<"Navio Encouracado Destruido!"<<endl;
for (int i=0; i<2; i++)
if(linha == armazenaCruzador[0] || coluna == armazenaCruzador[3])
{
contadorCruzador++;
submarino = false;
}
if(contadorCruzador==2)
cout<<"Navio Encouracado Destruido!"<<endl;
return submarino; //se retornar falso, eh porque era um submarino
}
void mostraTabuleiroFimDeJogo()
{
char charArray[] = {'A', 'B', 'C', 'D', 'E'};
cout<<" ";
for (int i =0; i<N; i++)
cout<<" "<<i+1;
cout<<endl;
for (int i =0; i<N; i++)
{
cout<<endl<<charArray<<" ";
for (int j=0; j<N; j++)
cout<<navios[j]<<" ";
}
}
//funcao simplesmente para imprimir o tabuleiro na tela
void imprimeTabuleiro()
{
char charArray[] = {'A', 'B', 'C', 'D', 'E'};
cout<<" ";
for (int i =0; i<N; i++)
cout<<" "<<i+1;
cout<<endl;
for (int i =0; i<N; i++)
{
cout<<endl<<charArray<<" ";
for (int j=0; j<N; j++)
cout<<naviosAtacados[j]<<" ";
}
}
//inicializara a matriz navios com true o false, indicando onde os navios estarao
void iniciaNavios()
{
for (int i =0; i<N; i++)
for (int j=0; j<N; j++)
{
naviosAtacados[j] = '-';
}
int horizontalOuVertical; //Decidira se o navio sera horizontal ou vertical
//Se for 0 eh horizontal, se for 1 eh vertical
int linha, coluna; //irao decidir em que linha ou coluna o navio esta
//inicializamos tudo como se nao tivesse nenhum navio
int linhaPortaAvioes, colunaPortaAvioes;
for (int i =0; i<N; i++)
for (int j=0; j<N; j++)
{
navios[j] = false;
}
//comecamos pelo porta avioes:
horizontalOuVertical = rand()%2;
if(horizontalOuVertical == 0) //ele eh colocado em uma linha
{
linha = rand()%N;
linhaPortaAvioes = linha;
colunaPortaAvioes = -1;
for (int i=0; i<N; i++)
{
navios[linha] = true;
armazenaPortaAvioes[0]=linha;
armazenaPortaAvioes[1]=i;
}
}
else //eh colocado em uma coluna
{
coluna= rand()%N;
linhaPortaAvioes = -1;
colunaPortaAvioes = coluna;
for (int i=0; i<N; i++)
{
navios[coluna] = true;
armazenaPortaAvioes[0]=i;
armazenaPortaAvioes[1]=coluna;
}
}
//agora faremos para o encouracado
bool liberado;
if(horizontalOuVertical==0)
{
do
{
liberado = true;
linha = rand()%N;
for (int i=0; i<N-1; i++)
{
if(navios[linha])
{
liberado = false;
break;
}
navios[linha] = true;
armazenaEncouracado[0]= linha;
armazenaEncouracado[1] = i;
}
}
while(!liberado);
}
else
{
do
{
liberado = true;
coluna = rand()%N;
for (int i=0; i<N-1; i++)
{
if(navios[coluna])
{
liberado = false;
break;
}
navios[coluna] = true;
armazenaEncouracado[0]= i;
armazenaEncouracado[1] = coluna;
}
}
while(!liberado);
}
//agora faremos o cruzador:
//para ele aleatoriamente procuramos uma sequencia de dois lugares vagos
//quando eles forem achados, colocamos o cruzador neles.
int linhaAleatoria, colunaAleatoria;
horizontalOuVertical = rand()%2;
do
{
liberado = true;
linhaAleatoria = rand()%N;
colunaAleatoria = rand()%N;
if(horizontalOuVertical==0)
if(navios[linhaAleatoria][colunaAleatoria] || navios[linhaAleatoria+1][colunaAleatoria])
liberado = false;
else
{
if(linhaAleatoria>3)
liberado = false;
else
{
navios[linhaAleatoria][colunaAleatoria] = true;
navios[linhaAleatoria+1][colunaAleatoria] = true;
armazenaCruzador[0][0] =linhaAleatoria;
armazenaCruzador[0][1] =colunaAleatoria;
armazenaCruzador[1][0] =linhaAleatoria+1;
armazenaCruzador[1][1] =colunaAleatoria;
}
}
else if(navios[linhaAleatoria][colunaAleatoria] || navios[linhaAleatoria][colunaAleatoria+1])
liberado = false;
else
{
if(colunaAleatoria>3)
liberado = false;
else
{
navios[linhaAleatoria][colunaAleatoria]= true;
navios[linhaAleatoria][colunaAleatoria+1]=true;
armazenaCruzador[0][0] =linhaAleatoria;
armazenaCruzador[0][1] =colunaAleatoria;
armazenaCruzador[1][0] =linhaAleatoria;
armazenaCruzador[1][1] =colunaAleatoria+1;
}
}
}
while(!liberado);
//Finalmente distribuimos os submarinos:
int contador = 0;
do
{
linhaAleatoria = rand()%N;
colunaAleatoria = rand()%N;
if(!navios[linhaAleatoria][colunaAleatoria])
{
navios[linhaAleatoria][colunaAleatoria]= true;
contador++;
}
}
while(contador<4);
imprimeTabuleiro();
}
//sera chamado apos o ataque para mostrar o "novo tabuleiro" para o jogador apos o ataque
void atualizarTabuleiro(int linha, int coluna)
{
if (navios[linha][coluna])
{
acertos++;
naviosAtacados[linha][coluna] = '*';
navios[linha][coluna] = false; //tornamos ele falso para evitar que jogadores o ataquem duas vezes
bool submarino = verificaNavio(linha, coluna);
if (submarino)
cout<<"Submarino Destruido!"<<endl;
}
imprimeTabuleiro();
}
void atacar()
{
int coluna;
char linha;
//ficara rondando ate que o jogador digite apenas os numeros de 1 a 5
do
{
cout<<endl<<"Digite o numero da coluna que deseja atacar"<<endl;
cin>>coluna;
if(coluna>5)
cout<<"Por favor digite um numero de 1 a 5"<<endl;
}
while(coluna>5||coluna ==0);
//ficara rodando ate que o jogador digite apenas as letras A a E
do
{
cout<<"Digite a linha que deseja atacar"<<endl;
cin>>linha;
if(linha!='A' &&linha!='B' &&linha!='C' &&linha!='D' &&linha!='E')
cout<<"Por favor digite as letras de A a E"<<endl;
}
while(linha!='A' &&linha!='B' &&linha!='C' &&linha!='D' &&linha!='E');
//esse switch sera usado para "converter" a letra para um numero
int linhaNum;
switch (linha)
{
case 'A':
linhaNum =0;
break;
case 'B':
linhaNum =1;
break;
case 'C':
linhaNum =2;
break;
case 'D':
linhaNum =3;
break;
case 'E':
linhaNum =4;
break;
}
atualizarTabuleiro(linhaNum, coluna-1);
}
int main()
{
srand (time(NULL)); //inicializamos o gerador de numeros aleatorios
cout<<"*****************************************************"<<endl;
cout<<"******************* BATALHA NAVAL *******************"<<endl;
cout<<"*****************************************************"<<endl;
cout<<"\n";
cout<<" Objetivo Destruir o inimigo.\n";
cout<<" Use Letras maiusculas com a Tecla CAPS LOOK ou FIXA.\n";
cout<<" Depois defina a NUMERACAO da COLUNA e a LETRA da LINHA para da um tiro.\n";
cout<<" Voce tem 20 tentativas.\n";
cout<<"\n";
iniciaNavios();
while(1)
{
cout<<endl<<"Tiros restantes: "<<tiros;
atacar();
tiros--;
if(tiros <= 0 || acertos>=15)
break;
}
if (acertos >=15)
{
cout<<endl<<"*****************************************************"<<endl;
cout<<"Parabens! Voce derrotou todos os inimigos!!"<<endl;
cout<<endl<<"*****************************************************"<<endl;
}
if(tiros <= 0)
{
cout<<endl<<"Que pena! Seus tiros acabaram!"<<endl;
cout<<"Eis aqui onde os navios se encontravam:"<<endl;
cout<<"Obs: Os 1s representam onde os navios se encontravam e os 0s sao os espacos vazios entre eles"<<endl;
mostraTabuleiroFimDeJogo();
cout<<endl<<"*****************************************************"<<endl;
cout<<"******************** GAME * OVER! *******************"<<endl;
cout<<"*****************************************************"<<endl;
}
return 0;
}
help!!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites


Por favor, utilize a tag CODE quando for postar códigos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.