Batalha naval em C++
Publicado por Vitor Augusto M. Pio (última atualização em 29/09/2014)
[ Hits: 20.167 ]
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; }
CalDOS - 60 funções em uma calculadora
Exceções em C através de try-throw-catch
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Problema de Comunicação Entre Bridges após Configuração de Links no RB... (0)
Instalação de Drive - USB para HDMI Ubuntu (0)
Meus HDs não aparecem mais no boot da placa mãe (16)
Instalação do Ubuntu 22.04 LTS (6)
Linux Mint com GForce 630 e 2 monitores dos quais só um está na resolu... (6)