Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdbool.h>
- #include <locale.h>
- char navio(int tabuleiro){
- if(tabuleiro == 1){
- return '@';
- }
- if(tabuleiro == 2){
- return '#';
- }
- if(tabuleiro == 3){
- return '$';
- }
- if(tabuleiro == 4){
- return '*';
- }
- if(tabuleiro == -5){
- return '?';
- }
- if(tabuleiro == -6){
- return '!';
- }
- if(tabuleiro < 0 && tabuleiro != -5 && tabuleiro != -6){
- return 'x';
- }
- return '~';
- }
- void mostrarTabuleiroDoJogador(int jogador[10][10]){
- int i, j;
- printf("Seu Tabuleiro: \n");
- printf(" 1 2 3 4 5 6 7 8 9 10\n\n");
- for(i = 0; i < 10; i++){
- if(i < 9){
- printf(" %d ", i + 1);
- } else printf("%d ", i + 1);
- for(j = 0; j < 10; j++){
- printf("%c ", navio(jogador[i][j]));
- }
- printf("\n");
- }
- printf("\n");
- }
- void mostrarTabuleiros(int tabuleiroJogador[10][10], int tabuleiroInimigo[10][10], int player, int player2){
- int i, j, k;
- //Imprime os tabuleiros
- printf("Jogador %d O que sabe do jogador %d:\n", player, player2);
- printf(" 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10\n\n");
- for(i = 0; i < 10; i++){
- if(i < 9){
- printf(" %d ", i + 1);
- } else printf("%d ", i + 1);
- for(j = 0; j < 10; j++){
- printf("%c ", navio(tabuleiroJogador[i][j]));
- }
- if(i < 9){
- printf(" %d ", i + 1);
- } else printf(" %d ", i + 1);
- for(k = 0; k < 10; k++){
- printf("%c ", navio(tabuleiroInimigo[i][k]));
- }
- printf("\n");
- }
- printf("\n");
- }
- void preencher(bool x[10][10], bool y){
- int i, j;
- for(i = 0; i < 10; i++){
- for(j = 0; j < 10; j++){
- x[i][j] = y;
- }
- }
- }
- void preencherInt(int x[10][10], int y){
- int i, j;
- for(i = 0; i < 10; i++){
- for(j = 0; j < 10; j++){
- x[i][j] = y;
- }
- }
- }
- bool pode(bool tab[10][10], int x, int y, int tamanho, int orientacao){
- int i;
- if(orientacao == 1){
- for(i = 0; i < tamanho; i++){
- if(!tab[x + i][y]){
- return false;
- }
- }
- } else {
- for(i = 0; i < tamanho; i++){
- if(!tab[x][y + i]){
- return false;
- }
- }
- }
- return true;
- }
- void deixaFalse(int i, int j, bool x[10][10]){
- if(i > 0 && i < 9){
- if(j > 0 && j < 9){
- x[i + 1][j + 1] = false;
- x[i + 1][j - 1] = false;
- x[i + 1][j] = false;
- x[i - 1][j + 1] = false;
- x[i - 1][j - 1] = false;
- x[i - 1][j] = false;
- x[i][j + 1] = false;
- x[i][j - 1] = false;
- x[i][j] = false;
- } else {
- x[i + 1][j + 1] = false;
- x[i + 1][j] = false;
- x[i - 1][j + 1] = false;
- x[i - 1][j] = false;
- x[i][j + 1] = false;
- x[i][j] = false;
- }
- } else {
- if(j > 0 && j < 9){
- x[i + 1][j + 1] = false;
- x[i + 1][j - 1] = false;
- x[i + 1][j] = false;
- x[i][j + 1] = false;
- x[i][j - 1] = false;
- x[i][j] = false;
- } else{
- x[i + 1][j + 1] = false;
- x[i + 1][j] = false;
- x[i][j + 1] = false;
- x[i][j] = false;
- }
- }
- }
- char navios[5][15] = {"Porta-Aviões","Encouraçado","Cruzador","Submarino"};
- void preencheNavio(int tabuleiro[10][10], bool tabLogica[10][10], int numNavios, int tamNavios, int id){
- int temp,i,j,x,y;
- for(j = 0; j < numNavios; j++){
- if(id < 3){
- do{
- printf("Precione 1 para o %s estar na vertical e 2 para horizontal\n", navios[id]);
- scanf("%d",&temp);
- } while(temp != 1 && temp != 2);
- if(temp == 1){
- do{
- printf("Insira a coordenada da primeira peça do %s\n", navios[id]);
- scanf("%d %d", &x, &y);
- x -= 1;
- y -= 1;
- } while(x > 11 - tamNavios || x < 0 || !pode(tabLogica,x, y, tamNavios, temp));
- for(i = 0; i < tamNavios; i++){
- deixaFalse(x + i, y, tabLogica);
- tabuleiro[x + i][y] = id + 1;
- }
- mostrarTabuleiroDoJogador(tabuleiro);
- } else {
- do{
- printf("Insira a coordenada da primeira peça do %s\n", navios[id]);
- scanf("%d %d", &x, &y);
- x -= 1;
- y -= 1;
- } while(y > 11 - tamNavios || y < 0 || !pode(tabLogica,x, y, tamNavios, temp));
- for(i = 0; i < tamNavios; i++){
- deixaFalse(x, y + i,tabLogica);
- tabuleiro[x][y + i] = id + 1;
- }
- mostrarTabuleiroDoJogador(tabuleiro);
- }
- } else {
- do{
- printf("Insira a coordenada do %s\n", navios[id]);
- scanf("%d %d", &x, &y);
- x -= 1;
- y -= 1;
- } while(y > 11 - tamNavios || y < 0 || !tabLogica[x][y]);
- for(i = 0; i < tamNavios; i++){
- deixaFalse(x + i, y, tabLogica);
- tabuleiro[x + i][y] = id + 1;
- }
- mostrarTabuleiroDoJogador(tabuleiro);
- }
- }
- }
- void preencheTabuleiroJogador(int tabuleiro[10][10], bool tabLogica[10][10], int player){
- int i, j;
- //Porta-Aviões
- preencheNavio(tabuleiro,tabLogica,1,5,0);
- //Encouraçado
- preencheNavio(tabuleiro,tabLogica,2,4,1);
- //Cruzador
- preencheNavio(tabuleiro,tabLogica,3,2,2);
- //Submarino
- preencheNavio(tabuleiro,tabLogica,4,1,3);
- //Testa se é o tabuleiro do jogador 1 ou 2 e salva num arquivo
- if(player == 1){
- FILE *arq = fopen("Save1.txt","w");
- if(arq == NULL){
- exit(1);
- }
- for(i = 0; i < 10; i++){
- for(j = 0; j < 10; j++){
- fprintf(arq,"%d",tabuleiro[i][j]);
- }
- }
- fclose(arq);
- } else {
- FILE *arq = fopen("Save2.txt","w");
- for(i = 0; i < 10; i++){
- for(j = 0; j < 10; j++){
- fprintf(arq,"%d",tabuleiro[i][j]);
- }
- }
- fclose(arq);
- }
- printf("Tabuleiro Salvo com sucesso\n");
- }
- void jogo(int tabuleiro[10][10], int tabuleiroInimigo[10][10], bool partida){
- int numTiros, numTirosInimigo, x, y, qntNavios = 23, qntNaviosInimigo = 23, ptA = 5, enc = 4, cru = 2, sub = 1, ptAJ = 5, encJ = 4, cruJ = 2, subJ = 1;
- bool tabLogica[10][10], tabLogicaInimigo[10][10];
- preencher(tabLogicaInimigo,true);
- preencher(tabLogica,true);
- int tabuleiroInJogador[10][10];
- preencherInt(tabuleiroInJogador,-5);
- int tabuleiroJogInimigo[10][10];
- preencherInt(tabuleiroJogInimigo,-5);
- do{
- numTiros = 3;
- system("clear");
- do{
- do{
- mostrarTabuleiros(tabuleiro, tabuleiroInJogador, 1, 2);
- printf("Dê as coordenadas do tiro\n");
- scanf("%d %d", &x, &y);
- x -= 1;
- y -= 1;
- system("clear");
- if(!tabLogicaInimigo[x][y]){
- printf("Posição Invá¡lida\n");
- }
- } while(x < 0 || x > 9 || y < 0 || y > 9 || !tabLogicaInimigo[x][y]);
- //Se acertar a Água
- if(tabuleiroInimigo[x][y] == 0){
- printf("Água\n");
- tabLogicaInimigo[x][y] = false;
- tabuleiroInJogador[x][y] = 0;
- tabuleiroInimigo[x][y] = -6;
- }
- //Se Acertar um porta-aviões
- if(tabuleiroInimigo[x][y] == 1){
- printf("Acertou\n");
- tabLogicaInimigo[x][y] = false;
- tabuleiroInJogador[x][y] = 1;
- tabuleiroInimigo[x][y] *= -1;
- qntNavios--;
- ptA--;
- if(ptA == 0){
- printf("Porta-Aviões foi destruido\n");
- }
- }
- //Se Acertar um encouraçado
- if(tabuleiroInimigo[x][y] == 2){
- printf("Acertou\n");
- tabLogicaInimigo[x][y] = false;
- tabuleiroInJogador[x][y] = 2;
- tabuleiroInimigo[x][y] *= -1;
- qntNavios--;
- enc--;
- if(enc == 0){
- printf("Encouraçado foi destruido\n");
- }
- }
- //Se Acertar um cruzador
- if(tabuleiroInimigo[x][y] == 3){
- printf("Acertou\n");
- tabLogicaInimigo[x][y] = false;
- tabuleiroInJogador[x][y] = 3;
- tabuleiroInimigo[x][y] *= -1;
- qntNavios--;
- cru--;
- if(cru == 0){
- printf("Cruzador foi destruido\n");
- }
- }
- //Se Acertar um submarino
- if(tabuleiroInimigo[x][y] == 4){
- printf("Acertou\n");
- tabLogicaInimigo[x][y] = false;
- tabuleiroInJogador[x][y] = 4;
- tabuleiroInimigo[x][y] *= -1;
- qntNavios--;
- sub--;
- if(sub == 0){
- printf("Submarino foi destruido\n");
- }
- }
- //Se a quatidade de Navios do Inimigo for reduzida à zero
- if(qntNavios == 0){
- partida = false;
- printf("Jogador 1 Venceu!\n");
- break;
- }
- numTiros--;
- }while(numTiros > 0);
- //Se a quatidade de Navios do Inimigo for reduzida à zero
- if(!partida){
- break;
- }
- system("clear");
- numTirosInimigo = 3;
- do{
- do{
- mostrarTabuleiros(tabuleiroInimigo, tabuleiroJogInimigo, 2, 1);
- printf("Dê as coordenadas do tiro\n");
- scanf("%d %d", &x, &y);
- x -= 1;
- y -= 1;
- system("clear");
- if(!tabLogica[x][y]){
- printf("Posição Inválida\n");
- }
- } while(x < 0 || x > 9 || y < 0 || y > 9 || !tabLogica[x][y]);
- if(tabuleiro[x][y] == 0){
- printf("Água\n");
- tabLogica[x][y] = false;
- tabuleiroJogInimigo[x][y] = 0;
- tabuleiro[x][y] = -6;
- }
- if(tabuleiro[x][y] == 1){
- printf("Acertou\n");
- tabLogica[x][y] = false;
- tabuleiroJogInimigo[x][y] = 1;
- tabuleiro[x][y] *= -1;
- qntNaviosInimigo--;
- ptA--;
- if(ptAJ == 0){
- printf("Porta-Aviões foi destruido\n");
- }
- }
- if(tabuleiro[x][y] == 2){
- printf("Acertou\n");
- tabLogica[x][y] = false;
- tabuleiroJogInimigo[x][y] = 2;
- tabuleiro[x][y] *= -1;
- qntNaviosInimigo--;
- enc--;
- if(encJ == 0){
- printf("Encouraçado foi destruido\n");
- }
- }
- if(tabuleiro[x][y] == 3){
- printf("Acertou\n");
- tabLogica[x][y] = false;
- tabuleiroJogInimigo[x][y] = 3;
- tabuleiro[x][y] *= -1;
- qntNaviosInimigo--;
- cru--;
- if(cruJ == 0){
- printf("Cruzador foi destruido\n");
- }
- }
- if(tabuleiro[x][y] == 4){
- printf("Acertou\n");
- tabLogica[x][y] = false;
- tabuleiroJogInimigo[x][y] = 4;
- tabuleiro[x][y] *= -1;
- qntNaviosInimigo--;
- sub--;
- if(subJ == 0){
- printf("Submarino foi destruido\n");
- }
- }
- //Se a quatidade de Navios do jogador for reduzida à zero
- if(qntNaviosInimigo == 0){
- partida = false;
- printf("Jogador 2 Venceu!\n");
- break;
- }
- numTirosInimigo--;
- } while(numTirosInimigo > 0);
- //Se a quatidade de Navios do jogador for reduzida à zero
- if(!partida){
- break;
- }
- } while(partida);
- }
- void carregaJogo(int tabuleiro[10][10], int player){
- int i,j;
- if(player == 1){
- FILE *arq = fopen("Save1.txt","r");
- if(arq == NULL){
- printf("ERRO AO LER O ARQUIVO");
- exit(1);
- }
- char temp[101];
- fscanf(arq,"%s",temp);
- for(i = 0; i < 10; i++){
- for(j = 0; j < 10; j++){
- tabuleiro[i][j] = (int)temp[i * 10 + j] - 48;
- }
- }
- fclose(arq);
- } else {
- FILE *arq = fopen("Save2.txt","r");
- if(arq == NULL){
- printf("ERRO AO LER O ARQUIVO");
- exit(1);
- }
- char temp[101];
- fscanf(arq,"%s",temp);
- for(i = 0; i < 10; i++){
- for(j = 0; j < 10; j++){
- tabuleiro[i][j] = (int)temp[i * 10 + j] - 48;
- }
- }
- fclose(arq);
- }
- }
- int main(){
- setlocale(LC_ALL, "Portuguese");//habilita a acentuação para o português
- int opcoesMenu, aux = NULL,temp;
- int tabuleiroJogador[10][10];
- preencherInt(tabuleiroJogador, 0);
- bool tabLogica[10][10];
- preencher(tabLogica,true);
- int tabuleiroInimigo[10][10];
- preencherInt(tabuleiroInimigo, 0);
- bool tabLogicaInimigo[10][10];
- preencher(tabLogicaInimigo,true);
- bool partida = true;
- do{
- do{
- printf("[1] - Novo tabuleiro \n[2] - Novo jogo\n[3] - Carregar Jogo Salvo\n[4] - Ajuda\n[5] - Sair\n\n> ");
- scanf("%d",&opcoesMenu);
- switch(opcoesMenu){
- case 1:
- do{
- printf("[1] - Jogador 1\n[2] - Jogador 2\n[3] - Ambos os jogadores\n\n> ");
- scanf("%d",&temp);
- } while(temp < 0 || temp > 3);
- if(temp == 1){
- mostrarTabuleiroDoJogador(tabuleiroJogador);
- preencheTabuleiroJogador(tabuleiroJogador, tabLogica, 1);
- }
- if(temp == 2){
- mostrarTabuleiroDoJogador(tabuleiroInimigo);
- preencheTabuleiroJogador(tabuleiroInimigo, tabLogicaInimigo, 2);
- }
- if(temp == 3){
- mostrarTabuleiroDoJogador(tabuleiroJogador);
- preencheTabuleiroJogador(tabuleiroJogador, tabLogica, 1);
- preencheTabuleiroJogador(tabuleiroInimigo, tabLogicaInimigo, 2);
- }
- break;
- case 2:
- jogo(tabuleiroJogador,tabuleiroInimigo,partida);
- break;
- case 3:
- carregaJogo(tabuleiroJogador, 1);
- carregaJogo(tabuleiroInimigo, 2);
- break;
- case 4:
- printf("[~] - Água \n[@] - Porta-Aviões \n[#] - Encouraçado\n[$] - Cruzador\n[*] - Submarino\n[x] - Destroços\n[!] - Tiro na Água\n\n\n");
- opcoesMenu = 0;
- break;
- case 5:
- exit(1);
- break;
- default:
- aux = 0;
- }
- } while(aux == 0);
- } while(partida);
- return 0;
- }
Add Comment
Please, Sign In to add comment