HNKYTNK

batnav

Jul 4th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.72 KB | None | 0 0
  1. #ifndef BATNAV_H_INCLUDED
  2. #define BATNAV_H_INCLUDED
  3.  
  4. void get_usr_coords(){
  5.     //gotoxy(x,y);
  6.     int x;
  7.     int y;
  8.  
  9.  
  10.     printf("Type the coordinates for the line to shot(only letters): ");
  11.     x = getch();
  12.  
  13.     x = toupper(x);
  14.  
  15.     printf("%c",x);//imprime a entrada do user
  16.  
  17.     x -= 65;//converte de char para int
  18.  
  19.     while (x < 0 || x > 14) {//caso o usuário não digite um valor válido
  20.  
  21.         printf("\n\nWrong input, try again using valid letters: ");
  22.  
  23.         x = getch();
  24.  
  25.         x = toupper(x);
  26.  
  27.         x -= 65;
  28.  
  29.         printf("%c",x + 65);
  30.  
  31.     }
  32.  
  33.     printf("Type the coordinates for the column to shot (only numbers): ");
  34.  
  35.     y = getch();
  36.  
  37.     y -= 48;
  38.  
  39.     printf("%d",y);
  40.  
  41.    while(y < 0 || y > 14){
  42.  
  43.         scanf("%d",y);
  44.  
  45.     }
  46. }
  47.  
  48. void ins_pa(int **matriz,int code){  //Inserir Porta aviôes
  49. //Formato: [][][][][]
  50.  
  51.     int r;
  52.     int i;
  53.     int j;
  54.  
  55.     r = 1;//rand() % 2; // Se 1 o navio ficará na posicionado verticalmente no tabuleiro, se 2 horizontalmente
  56.  
  57.     if (r){ // Vertical
  58.  
  59.         i = rand() % 10; // impede que passe da margem limite inferior
  60.         j = rand() % 15;
  61.  
  62.         if(i - 1 >= 0){//outline
  63.             matriz[i - 1 ][j] = 66;
  64.             if(j - 1 >= 0)
  65.                 matriz[i - 1][j - 1] = 66;
  66.             if(j + 1 < 15)
  67.                 matriz[i - 1] [j + 1] = 66;
  68.         }
  69.  
  70.         if(i + 5 < 15){//outline
  71.             matriz[i + 5][j] = 66;
  72.             matriz[i + 5][j - 1] = 66;
  73.             matriz[i + 5][j + 1] = 66;
  74.         }
  75.  
  76.  
  77.         for (r = 0; r < 5; r++,i++){
  78.             matriz[i][j] = code;
  79.             if(j - 1 > 0)//outline
  80.                 matriz[i][j-1] = 66;
  81.  
  82.             if(j + 1 < 15)//outline
  83.                 matriz[i][j+1] = 66;
  84.         }
  85.  
  86.     } else{ // Horizontal
  87.  
  88.             i = rand() % 15;
  89.             j = rand() % 10; // impede que passe da margem limite direita
  90.  
  91.  
  92.         if(j - 1 >= 0){//outline
  93.             matriz[i - 1][j] = 66;
  94.             if(i - 1 >= 0)
  95.                 matriz[i - 1][j - 1] = 66;
  96.             if(i + 1 < 15)
  97.                 matriz[i - 1] [j + 1] = 66;
  98.         }
  99.  
  100.         if(i + 5 < 15){//outline
  101.             matriz[i][j + 5] = 66;
  102.             matriz[i - 1][j + 5] = 66;
  103.             matriz[i + 1][j + 5] = 66;
  104.         }
  105.  
  106.         for (r = 0; r < 5; r++,i++){
  107.             matriz[i][j] = code;
  108.             if(i - 1 >= 0)//outline
  109.                 matriz[i - 1][j] = 66;
  110.  
  111.         for (r = 0; r < 5; r++, j++){
  112.             matriz[i][j] = code;
  113.  
  114.             }
  115.         }
  116.     }
  117. }
  118.  
  119. void ins_enc(int **matriz, int code){//inserir Encouraçado
  120. //Formato [][][][]
  121.  
  122.     int r;
  123.     int i;
  124.     int j;
  125.     int space_problem = 1;
  126.     int z;
  127.  
  128.     while (space_problem == 1){//Enquanto não houver espaço suficiente naquela região ele gera outros valores para outras regiões até encontrar espaço suficiente
  129.  
  130.         z=0;
  131.  
  132.         r = rand() % 2;
  133.  
  134.         if (r){ // vertical
  135.  
  136.             i = rand()% 11;//impede que passe da margem limite inferior
  137.             j = rand()% 15;
  138.  
  139.             for (r = 0; r < 4; r++){//Verifica se há espaço disponível na região
  140.                 if (matriz[i+r][j] != 0){
  141.                 } else {
  142.                     z++;//Conta quantos espaços há
  143.                 }
  144.             }
  145.             if (z == 4){//Verifica se os espaços disponíveis coincidem
  146.                 space_problem = 0;//remove do while
  147.                 for (z = 0; z < 4; z++,i++)
  148.                     matriz[i][j] = code;
  149.             }
  150.         } else { // horizontal
  151.  
  152.             i = rand()% 15;
  153.             j = rand()% 11;//impede que passe da margem limite direita
  154.  
  155.             for (r = 0; r < 4; r++){//verificação de espaço livre
  156.                 if (matriz[i][j+r] == 0)
  157.                     z++;
  158.             }
  159.             if (z == 4){// caso haja espaço ele aloca o navio
  160.                 space_problem = 0;
  161.                 for (z = 0; z < 4; z++,j++)
  162.                     matriz[i][j] = code;
  163.             }
  164.         }
  165.     }
  166. }
  167.  
  168. void ins_hid(int **matriz,int code){//inserir Hidraviõess
  169. //Formato:   []
  170. //         []  []
  171.     int space_problem = 1;
  172.     int i;
  173.     int j;
  174.     int r;
  175.  
  176.     while (space_problem == 1){
  177.  
  178.         r = rand() % 2;
  179.  
  180.         if (r){//horizontal
  181.  
  182.             i = rand() % 12 + 1;
  183.             j = rand() % 13;
  184.  
  185.             if (matriz[i][j] == 0 && matriz[i-1][j+1] == 0 && matriz[i][j+2] == 0){
  186.                 matriz[i][j] = code;
  187.                 matriz[i-1][j+1] = code;
  188.                 matriz[i][j+2] = code;
  189.                 if (matriz[i][j+1] == 0)//marca o centro do navio para que nenhum navio se posicione ali
  190.                     matriz[i][j+1] = 76;
  191.                 space_problem = 0;
  192.             }
  193.         } else{//vertical
  194.  
  195.             i = rand() % 12;
  196.             j = rand() % 13;
  197.  
  198.             if (matriz[i][j] == 0 && matriz[i+1][j+1] == 0 && matriz[i+2][j] == 0){
  199.                 matriz[i][j] = code;
  200.                 matriz[i+1][j + 1] = code;
  201.                 matriz[i+2][j] = code;
  202.                 if (matriz[i+1][j] == 0)//marca o centro do navio para que nenhum navio se posicione ali
  203.                     matriz[i+1][j] = 76;
  204.                 space_problem = 0;
  205.             }
  206.         }
  207.     }
  208. }
  209.  
  210. void ins_cru(int **matriz,int code){//inserir Cruzadores
  211. //Formato [][]
  212.  
  213.     int r;
  214.     int i;
  215.     int j;
  216.     int space_problem = 1;
  217.     int z;
  218.  
  219.     while (space_problem == 1){
  220.  
  221.         z=0;
  222.  
  223.         r = rand() % 2;
  224.  
  225.         if (r){ // vertical
  226.  
  227.             i = rand()% 12;//impede que passe da margem limite inferior
  228.             j = rand()% 14;
  229.  
  230.             for (r = 0; r < 2; r++){
  231.                 if (matriz[i+r][j] != 0){
  232.                 } else {
  233.                     z++;
  234.                 }
  235.             }
  236.             if (z == 4){
  237.                 space_problem = 0;
  238.                 for (z = 0; z < 2; z++,i++)
  239.                     matriz[i][j] = code;
  240.             }
  241.         } else { // horizontal
  242.  
  243.             i = rand()% 14;
  244.             j = rand()% 12;//impede que passe da margem limite direita
  245.  
  246.             for (r = 0; r < 2; r++){//verificação de espaço livre
  247.                 if (matriz[i][j+r] == 0)
  248.                     z++;
  249.             }
  250.             if (z == 2){// caso haja espaço ele aloca o navio
  251.                 space_problem = 0;
  252.                 for (z = 0; z < 2; z++,j++)
  253.                     matriz[i][j] = code;
  254.             }
  255.         }
  256.     }
  257. }
  258. void ins_sub(int **matriz, int code){//inserir Submarinos
  259. //Formato []
  260.  
  261.     int i = rand() % 15;
  262.     int j = rand() % 15;
  263.  
  264.     while (matriz[i][j] !=0){
  265.  
  266.         i = rand() % 15;
  267.         j = rand() % 15;
  268.     }
  269.     matriz[i][j] = code;
  270. }
  271.  
  272. void show_board (int **matriz){
  273.  
  274.     int i;
  275.     int j;
  276.     int line;
  277.  
  278.     printf("\n\n\n\t\t---- 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 ----");
  279.  
  280.     for (i = 0, line = 65; i < 15; i++,line++){
  281.         printf("\n\t\t%c - ",line);
  282.         for (j = 0; j < 15; j++){
  283.             printf("%d\t",matriz[i][j]);
  284.         }
  285.             printf("\n");
  286.     }
  287.  
  288.    printf("\n\t\t---- 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 ----\n\n\n");
  289. }
  290.  
  291. void fill_board(int **matriz){//insere todoso o navios no tabuleiro
  292.  
  293.     //Um Porta Aviões
  294.     ins_pa(matriz,5);
  295.  
  296.     //Dois Encouraçados
  297.     ins_enc(matriz,41);
  298.     ins_enc(matriz,42);
  299.  
  300.     // Cinco Hidroaviões // função com alguns bugs desconhecidos
  301.     ins_hid(matriz,31);
  302.     ins_hid(matriz,32);
  303.     ins_hid(matriz,33);
  304.     ins_hid(matriz,34);
  305.     ins_hid(matriz,35);
  306.  
  307.     //Três Cruzadores
  308.     ins_cru(matriz,21);
  309.     ins_cru(matriz,22);
  310.     ins_cru(matriz,23);
  311.  
  312.     //Quatro Submarinos
  313.     ins_sub(matriz,11);
  314.     ins_sub(matriz,12);
  315.     ins_sub(matriz,13);
  316.     ins_sub(matriz,14);
  317. }
  318.  
  319. #endif // BATNAV_H_INCLUDED
Advertisement
Add Comment
Please, Sign In to add comment