/ src / parsing_grid_values_check.c
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  }