Advertisement
Guest User

parsingmap

a guest
Apr 10th, 2020
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.29 KB | None | 0 0
  1. #include "cub.h"
  2.  
  3. void    show_map(t_cub cub)
  4. {
  5.     int x;
  6.  
  7.     x = 0;
  8.     while(x < cub.parse.nbline)
  9.     {
  10.         printf("%s\n",cub.parse.map[x]);
  11.         x++;
  12.     }
  13. }
  14.  
  15. int     parsing_map(t_cub *cub, char *line)
  16. {
  17.     int size_map;
  18.     cub->parse.map[cub->parse.i++] = ft_strdup(line);
  19.     return 1;
  20. }
  21.  
  22. void    fill_zero(t_cub *cub)
  23. {
  24.     int i;
  25.     int j;
  26.     int len;
  27.     char *s;
  28.    
  29.     len = 0;
  30.     i = 0;
  31.     j = 0;
  32.     while(j < cub->parse.nbline)
  33.     {
  34.         i = 0;
  35.         len = ft_strlen(cub->parse.map[j]);
  36.         s = ft_strdup(cub->parse.map[j]);
  37.         cub->parse.map[j] = (char *)malloc(sizeof(char) * cub->parse.strlen + 1);
  38.         if(!cub->parse.map[j])
  39.             return((void)NULL);
  40.         while(i < cub->parse.strlen)
  41.         {
  42.             cub->parse.map[j][i] = ' ';
  43.             i++;
  44.         }
  45.         cub->parse.map[j][i] = '\0';
  46.         i = 0;
  47.         while(i < len)
  48.         {
  49.             cub->parse.map[j][i] = s[i];
  50.             i++;
  51.         }
  52.         j++;
  53.     }
  54.     show_map(*cub);
  55.     printf("\n");
  56. }
  57.  
  58. int find_in(char c, char *str)
  59. {
  60.     int i;
  61.  
  62.     i = 0;
  63.     while (str[i])
  64.     {
  65.         if (str[i] == c)
  66.         {
  67.             return 1;
  68.         }
  69.         i++;
  70.     }
  71.     return -1;
  72. }
  73.  
  74. int check_two(t_cub cub, int i, int j)
  75. {
  76.     char *s;
  77.  
  78.     s = ft_strdup("012");
  79.     if ((find_in(cub.parse.map[j][i - 1], s) == 1)
  80.         && (find_in(cub.parse.map[j][i + 1], s) == 1)
  81.         && (find_in(cub.parse.map[j - 1][i], s) == 1)
  82.         && (find_in(cub.parse.map[j + 1][i], s) == 1))
  83.     {
  84.         return 1;
  85.     }
  86.     else
  87.         return 0;
  88. }
  89.  
  90. int check_zr(t_cub cub, int i, int j)
  91. {
  92.     char *s;
  93.  
  94.     //printf("\nCHECKZR Values : i , j : %d , %d\n", i, j);
  95.     s = ft_strdup("012");
  96.     if(i == 0)
  97.     {
  98.         if ((find_in(cub.parse.map[j][i + 1], s) == 1)
  99.             && (find_in(cub.parse.map[j - 1][i], s) == 1)
  100.             && (find_in(cub.parse.map[j + 1][i], s) == 1))
  101.         {
  102.             return 1;
  103.         }
  104.         else
  105.             return 0;
  106.     }
  107.     if(i == cub.parse.strlen - 1)
  108.     {
  109.         if ((find_in(cub.parse.map[j][i - 1], s) == 1)
  110.             && (find_in(cub.parse.map[j - 1][i], s) == 1)
  111.             && (find_in(cub.parse.map[j + 1][i], s) == 1))
  112.         {
  113.             return 1;
  114.         }
  115.         else
  116.             return 0;
  117.     }
  118.     else
  119.     {
  120.         if ((find_in(cub.parse.map[j][i - 1], s) == 1)
  121.             && (find_in(cub.parse.map[j][i + 1], s) == 1)
  122.             && (find_in(cub.parse.map[j - 1][i], s) == 1)
  123.             && (find_in(cub.parse.map[j + 1][i], s) == 1))
  124.         {
  125.             return 1;
  126.         }
  127.         else
  128.             return 0;
  129.     }
  130. }
  131.  
  132. int check_sp(t_cub cub, int i, int j)
  133. {
  134.     char *s;
  135.  
  136.     //printf("\nCHECKSPACE : Values : i , j : %d , %d\n", i, j);
  137.     s = ft_strdup("1 ");
  138.     if(i == 0)
  139.     {
  140.         if ((find_in(cub.parse.map[j][i + 1], s) == 1)
  141.             && (find_in(cub.parse.map[j - 1][i], s) == 1)
  142.             && (find_in(cub.parse.map[j + 1][i], s) == 1))
  143.         {
  144.             return 1;
  145.         }
  146.         else
  147.             return 0;
  148.     }
  149.     if(i == cub.parse.strlen - 1)
  150.     {
  151.         if ((find_in(cub.parse.map[j][i - 1], s) == 1)
  152.             && (find_in(cub.parse.map[j - 1][i], s) == 1)
  153.             && (find_in(cub.parse.map[j + 1][i], s) == 1))
  154.         {
  155.             return 1;
  156.         }
  157.         else
  158.             return 0;
  159.     }
  160.     else
  161.     {
  162.         if ((find_in(cub.parse.map[j][i - 1], s) == 1)
  163.             && (find_in(cub.parse.map[j][i + 1], s) == 1)
  164.             && (find_in(cub.parse.map[j - 1][i], s) == 1)
  165.             && (find_in(cub.parse.map[j + 1][i], s) == 1))
  166.         {
  167.             return 1;
  168.         }
  169.         else
  170.             return 0;
  171.     }
  172.    
  173. }
  174.  
  175. int check_one(t_cub cub, int i, int j)
  176. {
  177.     char *s;
  178.  
  179.     //printf("\nCHECKONE : Values : i , j : %d , %d\n", i, j);
  180.     s = ft_strdup(" 012");
  181.     if(i == 0)
  182.     {
  183.         if ((find_in(cub.parse.map[j][i + 1], s) == 1)
  184.             && (find_in(cub.parse.map[j - 1][i], s) == 1)
  185.             && (find_in(cub.parse.map[j + 1][i], s) == 1))
  186.         {
  187.             return 1;
  188.         }
  189.         else
  190.             return 0;
  191.     }
  192.     if(i == cub.parse.strlen - 1)
  193.     {
  194.         if ((find_in(cub.parse.map[j][i - 1], s) == 1)
  195.             && (find_in(cub.parse.map[j - 1][i], s) == 1)
  196.             && (find_in(cub.parse.map[j + 1][i], s) == 1))
  197.         {
  198.             return 1;
  199.         }
  200.         else
  201.             return 0;
  202.     }
  203.     else
  204.     {
  205.         if ((find_in(cub.parse.map[j][i - 1], s) == 1)
  206.             && (find_in(cub.parse.map[j][i + 1], s) == 1)
  207.             && (find_in(cub.parse.map[j - 1][i], s) == 1)
  208.             && (find_in(cub.parse.map[j + 1][i], s) == 1))
  209.         {
  210.             return 1;
  211.         }
  212.         else
  213.             return 0;
  214.     }
  215.    
  216. }
  217.  
  218. void    line_check(t_cub cub, int j)
  219. {
  220.     int i;
  221.  
  222.     i = 0;
  223.     while(cub.parse.map[j][i])
  224.     {
  225.         if(cub.parse.map[j][i] == ' ')
  226.         {
  227.             if(!check_sp(cub, i, j))
  228.             {
  229.                 ft_error("Map Error : Check_Space\n");
  230.             }
  231.         }
  232.         if(cub.parse.map[j][i] == '1')
  233.         {
  234.             if(!check_one(cub, i, j))
  235.             {
  236.                 ft_error("Map Error : Check_One\n");
  237.             }
  238.         }
  239.         if(cub.parse.map[j][i] == '0')
  240.         {
  241.             if(!check_zr(cub, i, j))
  242.             {
  243.                 ft_error("Map Error : Check_Zr\n");
  244.             }
  245.         }
  246.         if(cub.parse.map[j][i] == '2')
  247.         {
  248.             if(!check_two(cub, i, j))
  249.                 ft_error("Map Error : Check_Two\n");
  250.         }
  251.         i++;
  252.     }
  253. }
  254. void    first_line_check(t_cub cub) //carré
  255. {
  256.     int i;
  257.  
  258.     i = 0;
  259.     while (cub.parse.map[0][i])
  260.     {
  261.         if (cub.parse.map[0][i] == '1' || cub.parse.map[0][i] == ' ')
  262.         {
  263.             i++;
  264.         }
  265.         else
  266.             ft_error("First line ne contient pas que des espaces ou des 1\n");
  267.     }
  268. }
  269. void    last_line_check(t_cub cub) //carré
  270. {
  271.     int i;
  272.  
  273.     i = 0;
  274.     while (cub.parse.map[cub.parse.nbline-1][i])
  275.     {
  276.         if (cub.parse.map[cub.parse.nbline-1][i] == '1' || cub.parse.map[cub.parse.nbline-1][i] == ' ')
  277.         {
  278.             i++;
  279.         }
  280.         else
  281.         {
  282.             ft_error("Last line ne contient pas que des espaces ou des 1\n");
  283.         }
  284.     }
  285. }
  286.  
  287. int check_map(t_cub cub)
  288. {
  289.     int x;
  290.     int y;
  291.     int i;
  292.  
  293.     y = 1;
  294.     i = 0;
  295.     first_line_check(cub);
  296.     while(y < cub.parse.nbline - 1)
  297.     {
  298.         //printf("Test line_check de y : %d\n",y);
  299.         line_check(cub, y);
  300.         y++;
  301.     }
  302.     last_line_check(cub);
  303.     return 0;
  304. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement