Batalha naval em C++
Publicado por Vitor Augusto M. Pio (última atualização em 29/09/2014)
[ Hits: 20.131 ]
Jogue batalha naval com seus amigos através desse simples arquivo em C++.
Ainda existem melhoras à serem feitas (muitas na verdade), a ideia de construir um jogo de batalha naval em C++ veio de um trabalho de faculdade de um amigo.
#include <stdio.h> #include <iostream> #include <stdlib.h> using namespace std; // Constantes nomeadas const int SIZE=15; const int BOAT_SIZE_1=2; const int BOAT_SIZE_2=4; const int TOTAL_POS=8; const int CARA=1; const int COROA=0; // Classe Jogador class Jogador { public: // Atributos publicos string nome; char tabuleiro[SIZE][SIZE]; char tabuleiro_visto[SIZE][SIZE]; int posicoes_restantes; // Construtor Jogador(){ posicoes_restantes=TOTAL_POS; for(int cont1=0;cont1<SIZE;cont1++){ for(int cont2=0;cont2<SIZE;cont2++){ tabuleiro[cont1][cont2]='~'; tabuleiro_visto[cont1][cont2]='~'; } } } // Exibir tabuleiro void exibir_tabuleiro(){ cout<<"Este é o tabuleiro de "<<nome<<"\n\n"; for(int cont1=0;cont1<SIZE;cont1++){ for(int cont2=0;cont2<SIZE;cont2++){ cout<<tabuleiro[cont1][cont2]<<" "; } cout<<"\n"; } cout<<"\n"; cout<<"Legnda:\n"; cout<<"~ [ÁGUA]\n"; cout<<"0 [Navio posicionado]\n"; cout<<"\n"; } // Exibir tabuleiro visto void exibir_tabuleiro_visto(){ cout<<nome<<" sua vez de jogar\n"; cout<<"Este é o tabuleiro do seu oponente\n\n"; for(int cont1=0;cont1<SIZE;cont1++){ for(int cont2=0;cont2<SIZE;cont2++){ cout<<tabuleiro_visto[cont1][cont2]<<" "; } cout<<"\n"; } cout<<"\n"; cout<<"Legnda:\n"; cout<<"~ [ÁGUA]\n"; cout<<"# [Errou]\n"; cout<<"X [Alvo abatido]\n"; cout<<"\n"; } // Posicionar barcos com 2 casas void posicionar_barco_2(){ // Variaveis locais int linha; int coluna; char pos; bool flag=false; // Posicionar barco do{ system("cls"); exibir_tabuleiro(); cout<<"------------------------\n"; cout<<"POSICIONAR BARCO 2 CASAS\n"; cout<<"------------------------\n"; cout<<"Posicao linha (0-14):"; cin>>linha; if(linha < SIZE && linha >=0){ cout<<"Posicao coluna (0-14):"; cin>>coluna; if(coluna < SIZE && coluna >=0){ cout<<"Deseja posicionar o barco na vertical ou horizontal(V/H) ?"; cin>>pos; if(pos == 'V'){ // Verificar se é possivel posicionar um barco if(SIZE-linha!=1){ // Verificar se não há outros barcos lá int times=0; for(int cont=linha;cont<linha+BOAT_SIZE_1;cont++){ if(tabuleiro[cont][coluna]=='~'){ times++; } } // Se o número de espaço com água for igual ao tamaho do barco, então é possivel posicionar o barco if(times==BOAT_SIZE_1){ // Posição legal for(int cont=linha;cont<linha+BOAT_SIZE_1;cont++){ tabuleiro[cont][coluna]='O'; } flag=true; } } }else{ if(pos == 'H'){ // Verificar se é possivel posicionar um barco if(SIZE-coluna!=1){ // Verificar se não há outros barcos lá int times=0; for(int cont=coluna;cont<coluna+BOAT_SIZE_1;cont++){ if(tabuleiro[linha][cont]=='~'){ times++; } } // Se o número de espaço com água for igual ao tamaho do barco, então é possivel posicionar o barco if(times==BOAT_SIZE_1){ // Posição legal for(int cont=coluna;cont<coluna+BOAT_SIZE_1;cont++){ tabuleiro[linha][cont]='O'; } flag=true; } } } } } } if(flag==false){ cout<<"BARCO NÃO PODE SER POSICIONADO, TENTE NOVAMENTE\n"; cout<<"Pressione enter para continuar..."; getch(); }else{ cout<<"BARCO POSICIONADO COM SUCESSO\n"; cout<<"Pressione enter para continuar..."; getch(); } }while(flag==false); } // Posicionar barcos com 4 casas void posicionar_barco_4(){ // Variaveis locais int linha; int coluna; char pos; bool flag=false; // Posicionar barco do{ system("cls"); exibir_tabuleiro(); cout<<"------------------------\n"; cout<<"POSICIONAR BARCO 4 CASAS\n"; cout<<"------------------------\n"; cout<<"Posicao linha (0-14):"; cin>>linha; if(linha < SIZE && linha >=0){ cout<<"Posicao coluna (0-14):"; cin>>coluna; if(coluna < SIZE && coluna >=0){ cout<<"Deseja posicionar o barco na vertical ou horizontal(V/H) ?"; cin>>pos; if(pos == 'V'){ // Verificar se é possivel posicionar um barco if(SIZE-linha>2){ // Verificar se não há outros barcos lá int times=0; for(int cont=linha;cont<linha+BOAT_SIZE_2;cont++){ if(tabuleiro[cont][coluna]=='~'){ times++; } } // Se o número de espaço com água for igual ao tamaho do barco, então é possivel posicionar o barco if(times==BOAT_SIZE_2){ // Posição legal for(int cont=linha;cont<linha+BOAT_SIZE_2;cont++){ tabuleiro[cont][coluna]='O'; } flag=true; } } }else{ if(pos == 'H'){ // Verificar se é possivel posicionar um barco if(SIZE-coluna>2){ // Verificar se não há outros barcos lá int times=0; for(int cont=coluna;cont<coluna+BOAT_SIZE_2;cont++){ if(tabuleiro[linha][cont]=='~'){ times++; } } // Se o número de espaço com água for igual ao tamaho do barco, então é possivel posicionar o barco if(times==BOAT_SIZE_2){ // Posição legal for(int cont=coluna;cont<coluna+BOAT_SIZE_2;cont++){ tabuleiro[linha][cont]='O'; } flag=true; } } } } } } if(flag==false){ cout<<"BARCO NÃO PODE SER POSICIONADO, TENTE NOVAMENTE\n"; cout<<"Pressione enter para continuar..."; getch(); }else{ cout<<"BARCO POSICIONADO COM SUCESSO\n"; cout<<"Pressione enter para continuar..."; getch(); } }while(flag==false); } // Verificar posições(quantas posições já foram destruídas) bool verificar_pos(){ if(posicoes_restantes==0){ return false; }else{ return true; } } // Jogar bool jogar(Jogador *atacado){ // Variávei locais int linha; int coluna; bool flag=false; do{ system("cls"); exibir_tabuleiro_visto(); cout<<"\n"; cout<<"---------------\n"; cout<<"ATACAR OPONENTE\n"; cout<<"---------------\n"; cout<<"Posicao linha (0-14):"; cin>>linha; if(linha < SIZE && linha >=0){ cout<<"Posicao coluna (0-14):"; cin>>coluna; if(coluna < SIZE && coluna >=0){ // Verificar se há um barco na posição if(atacado->tabuleiro[linha][coluna]=='O' && tabuleiro_visto[linha][coluna]=='~'){ tabuleiro_visto[linha][coluna]='X'; atacado->posicoes_restantes--; cout<<"ACERTOU\n"; cout<<"Pressione enter para continuar..."; getch(); return true; }else{ if(atacado->tabuleiro[linha][coluna]=='~' && tabuleiro_visto[linha][coluna]=='~'){ tabuleiro_visto[linha][coluna]='#'; cout<<"ERROU\n"; cout<<"Pressione enter para continuar..."; getch(); return false; } } } } cout<<"ATAQUE NÃO PODE SER EFETUADO, TENTE NOVAMENTE\n"; cout<<"Pressione enter para continuar\n"; getch(); }while(flag==false); return false; } }; int main(){ // Gerar número randicos srand(time(NULL)); // Variáveis string nome_1; string nome_2; int vez; int cont; int jogador_op; bool flag=false; bool fim=false; string op; // Criando jogadores cout<< "Nome do jogador 1:"; cin>>nome_1; cout<< "Nome do jogador 2:"; cin>>nome_2; Jogador *j1 = new Jogador(); j1->nome=nome_1; Jogador *j2 = new Jogador(); j2->nome=nome_2; // Jogador 1 posiciona as peças cout<<"Jogador 1 hora de posicionar os barcos\n"; cout<<"Pressione enter para começar..."; getch(); for(cont=0;cont<2;cont++){ j1->posicionar_barco_2(); } j1->posicionar_barco_4(); // Jogador 2 posiciona os barcos cout<<"Jogador 2 hora de posicionar os barcos\n"; cout<<"Pressione enter para começar..."; getch(); for(cont=0;cont<2;cont++){ j2->posicionar_barco_2(); } j2->posicionar_barco_4(); system("cls"); // Cara ou coroa para decidir quem começa do{ cout<<"Vamos decdir quem começa...\n"; cout<<"Jogador 1 cara ou coroa (cara/coroa)?"; cin>>op; if(op=="cara"){ jogador_op=CARA; flag=true; }else{ if(op=="coroa"){ jogador_op=COROA; flag=true; } } }while(flag==false); if(rand()%2==jogador_op){ vez=1; cout<<"O jogador 1("<<j1->nome<<") começa..."; }else{ vez=2; cout<<"O jogador 2("<<j2->nome<<") começa..."; } cout<<"Pressione enter para começar o jogo\n"; getch(); // Objetos Jogador *atacante = new Jogador(); Jogador *atacado = new Jogador(); Jogador *vencedor = new Jogador(); Jogador *perdedor = new Jogador(); // Jogar até atingir o fim, ou seja, fim=true do{ if(vez==1){ atacante=j1; atacado=j2; }else{ atacante=j2; atacado=j1; } while(atacante->jogar(atacado)){ if(!atacado->verificar_pos()){ vencedor=atacante; perdedor=atacado; fim=true; break; } } if(vez==1){ vez++; }else{ vez--; } }while(fim==false); // Exibir resultado final system("cls"); cout<<"-----------\n"; cout<<"FIM DE JOGO\n"; cout<<"-----------\n\n"; cout<<"O vencedor foi "<<vencedor->nome<<" e o perdedor foi "<<perdedor->nome; return 0; }
Converçor de Decimal para Binario
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (5)
Linux Lite Demorando Muito Para Ligar (2)