#include #include #include int posicao [15][15]; int testa_retangulo(int xmin, int ymin, int xmax, int ymax, int ok){ int xloc = xmin; while (ymin <= ymax){ xmin = xloc; while (xmin <= xmax){ printf("\nxmin %d ymin %d xmax %d ymax %d",xmin,ymin,xmax,ymax); if (posicao[ymin][xmin] == 0){ ok = 1; }else{ return 0; } xmin++; } ymin++; } return 1; } int poehidro(int navio){ int ok,xmin,xmax,ymin,ymax,randcoluna,randlinha,aleatorioc,aleatoriol,Xnavio,Ynavio,sentidoale; randlinha = 13; randcoluna = 13; xmax = 1; ymax = 1; xmin = -1; ymin = -1; sentidoale = rand() % 4; aleatorioc = rand() % randcoluna + 1; aleatoriol = rand() % randlinha + 1; xmax = aleatorioc + xmax; ymax = aleatoriol + ymax; xmin = aleatorioc + xmin; ymin = aleatoriol + ymin; if (testa_retangulo(xmin,ymin,xmax,ymax,ok)){ switch (sentidoale){ case 0: xmax = 2; ymax = 2; xmin = -2; ymin = 0; Xnavio = 1; Ynavio = 1; break; case 1: xmax = 2; ymax = 0; xmin = -2; ymin = -2; Xnavio = 1; Ynavio = -1; break; case 2: xmax = 2; ymax = 2; xmin = 0; ymin = -2; Xnavio = 1; Ynavio = 1; break; case 3: xmax = 0; ymax = 2; xmin = -2; ymin = -2; Xnavio = -1; Ynavio = 1; break; } xmax = aleatorioc + xmax; ymax = aleatoriol + ymax; xmin = aleatorioc + xmin; ymin = aleatoriol + ymin; if (testa_retangulo(xmin,ymin,xmax,ymax,ok)){ if (sentidoale == 2 || sentidoale == 3){ while (Ynavio >= -1){ if (Ynavio == 0 ){ posicao[aleatoriol][aleatorioc] = -navio; printf("\ncoloca hidronavio:%d,%d = 1",aleatoriol,aleatorioc); }else{ posicao[aleatoriol + Ynavio][aleatorioc + Xnavio] = -navio; printf("\ncoloca hidronavio:%d,%d = 1",aleatoriol,aleatorioc); } Ynavio--; } }else{ while (Xnavio >= -1){ if (Xnavio == 0 ){ posicao[aleatoriol][aleatorioc] = -navio; printf("\ncoloca hidronavio:%d,%d = 1",aleatoriol,aleatorioc); }else{ posicao[aleatoriol + Ynavio][aleatorioc + Xnavio] = -navio; printf("\ncoloca hidronavio:%d,%d = 1",aleatoriol,aleatorioc); } Xnavio--; } } }else{ poehidro(navio); printf("\ncoloca hidroavio: %d,%d = 0",aleatoriol,aleatorioc); } }else{ poehidro(navio); printf("\ncoloca hidronavio: %d,%d = 0",aleatoriol,aleatorioc); } } int poenavio(int navio){ int ok,xmin,xmax,ymin,ymax,randcoluna,aleatoriol,aleatorioc,randlinha,Xnavio,Ynavio,sentidoale,Xnavioloc; sentidoale = rand () % 2; switch (navio){ case 2: randlinha = 15; randcoluna = 15; xmax = 1; ymax = 1; xmin = -1; ymin = -1; Xnavio = 0; Ynavio = 0; break; case 3: if (sentidoale){ randlinha = 15; randcoluna = 14; xmax = 2; ymax = 1; Xnavio = 1; Ynavio = 0; }else{ randlinha = 14; randcoluna = 15; xmax = 1; ymax = 2; Xnavio = 0; Ynavio = 1; } xmin = -1; ymin = -1; break; case 4: if (sentidoale){ randlinha = 15; randcoluna = 13; xmax = 3; ymax = 1; Xnavio = 2; Ynavio = 0; }else{ randlinha = 13; randcoluna = 15; xmax = 1; ymax = 3; Xnavio = 0; Ynavio = 2; } xmin = -1; ymin = -1; break; case 5: if(sentidoale){ randlinha = 15; randcoluna = 11; xmax = 5; ymax = 1; Xnavio = 4; Ynavio = 0; }else{ randlinha = 11; randcoluna = 15; xmax = 1; ymax = 5; Xnavio = 0; Ynavio = 4; } xmin = -1; ymin = -1; break; } Xnavioloc = Xnavio; aleatorioc = rand() % randcoluna; aleatoriol = rand() % randlinha; xmax = aleatorioc + xmax; ymax = aleatoriol + ymax; xmin = aleatorioc + xmin; ymin = aleatoriol + ymin; if (testa_retangulo(xmin,ymin,xmax,ymax,ok)){ while (Ynavio >= 0){ Xnavio = Xnavioloc; while (Xnavio >= 0){ posicao[aleatoriol + Ynavio][aleatorioc + Xnavio] = -navio; printf("\ncoloca navio:%d,%d = 1",aleatoriol,aleatorioc); Xnavio--; } Ynavio--; } }else{ poenavio(navio); printf("\ncoloca navio:%d,%d = 0",aleatoriol,aleatorioc); } } int submarino(){ int cont = 0; while (cont < 4){ poenavio(2); cont++; } } int cruzador(){ int cont = 0; while (cont < 3){ poenavio(3); cont++; } } int encuracado(){ int cont = 0; while (cont < 2){ poenavio(4); cont++; } } int portaviao(){ int cont = 0; while (cont < 1){ poenavio(5); cont++; } } int hidroaviao(){ int cont = 0; while (cont < 5){ poehidro(6); cont++; } } int testa_posicao(int c,int l){ int cont = 0; while (cont == 0){ if (c >= 1 && c < 16){ if (l >= 'a' && l < 'o'){ cont = 1; }else{ return 0; } }else{ return 0; } } } int questao(int *c, int *l,int *tiros, int *acertos){ int nl,nc,cont = 0; printf("\n---------------------\nTiros = %d\nAcertos = %d\n---------------------\n",*tiros,*acertos); while (cont == 0){ printf("\nInforme a coluna que voce quer atirar: "); scanf("%d",&*c); printf("\nInforme a linha que voce quer atirar: "); scanf(" %c",&*l); if (testa_posicao(*c,*l)){ cont = 1; }else{ printf("\nVoce digitou a posicao no formato incorreto. Faca igual o Ex: coluna: 1, linha: f"); } } nc = *c - 1 ; nl = *l - 'a'; if (posicao[nl][nc] == 0 || posicao[nl][nc] >= 1){ if (posicao[nl][nc] > 0){ printf("\n\n\n\n\nVoce já atirou nessa posicao, tente novamente!!"); }else{ printf("\n\n\n\n\nVoce errou o alvo, acertou apenas agua!!"); posicao[nl][nc] = 1; } }else{ switch (posicao[nl][nc]){ case -2: posicao[nl][nc] = 2; break; case -3: posicao[nl][nc] = 3; break; case -4: posicao[nl][nc] = 4; break; case -5: posicao[nl][nc] = 5; break; case -6: posicao[nl][nc] = 6; break; } printf("\n\n\n\n\nVoce acertou o tiro, confira no tabuleiro!!"); (*acertos)++; } (*tiros)++; system("clear"); } int tabuleiro(int * c, int * l){ printf("\n\n\n\n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n"); *l = 0; while ( *l < 15 ) { printf ("%2c |", *l + 'a'); *c = 0; while ( *c < 15 ){ if (posicao[*l][*c] <= 0){ printf("__|"); }else{ switch (posicao[*l][*c]){ case 1: printf("_~|"); break; case 2: printf("_S|"); break; case 3: printf("_C|"); break; case 4: printf("_E|"); break; case 5: printf("_P|"); break; case 6: printf("_H|"); break; } } (*c)++; } printf ("\n"); (*l)++; } } int main(int argc, char** argv) { int tiros = 0,acertos = 0; int c,l; srand ( time(NULL) ); submarino(); cruzador(); encuracado(); portaviao(); hidroaviao(); while (acertos < 36){ tabuleiro(&c, &l); questao(&c, &l, &tiros, &acertos); } }