parsing_grid_values_check.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* parsing_grid_values_check.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: ll-hotel <ll-hotel@student.42.fr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2024/07/29 16:52:07 by ll-hotel #+# #+# */ 9 /* Updated: 2024/10/18 18:00:19 by ll-hotel ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "ft_dprintf.h" 14 #include "parsing.h" 15 16 int cell_is_valid(int c); 17 int cell_is_player(int c); 18 static int check_cell_value(u_long y, u_long x, char found_player, int cell); 19 20 int grid_values_check(char **grid) 21 { 22 u_long y; 23 u_long x; 24 char found_player; 25 26 found_player = 0; 27 y = -1; 28 while (grid[++y]) 29 { 30 x = -1; 31 while (grid[y][++x]) 32 { 33 if (!check_cell_value(y, x, found_player, grid[y][x])) 34 return (0); 35 found_player |= cell_is_player(grid[y][x]); 36 } 37 } 38 if (!found_player) 39 { 40 ft_dprintf(2, "Error\nCannot find player\n"); 41 return (0); 42 } 43 return (1); 44 } 45 46 static int check_cell_value(u_long y, u_long x, char found_player, int cell) 47 { 48 if (!cell_is_valid(cell)) 49 { 50 ft_dprintf(2, "Error\nInvalid grid cell `%c' (ASCII=%u) " \ 51 "at pos y=%u,x=%u\n", cell, cell, y, x); 52 return (0); 53 } 54 if (cell_is_player(cell) && found_player) 55 { 56 ft_dprintf(2, "Error\nDuplicate player %c "\ 57 "at pos y=%u,x=%u\n", cell, y, x); 58 return (0); 59 } 60 return (1); 61 } 62 63 int cell_is_valid(int c) 64 { 65 return (c == ' ' || c == '0' || c == '1' || cell_is_player(c)); 66 } 67 68 int cell_is_player(int c) 69 { 70 return (c == 'N' || c == 'E' || c == 'S' || c == 'W'); 71 }