/ src / parsing_grid_wall_check.c
parsing_grid_wall_check.c
 1  /* ************************************************************************** */
 2  /*                                                                            */
 3  /*                                                        :::      ::::::::   */
 4  /*   parsing_grid_wall_check.c                          :+:      :+:    :+:   */
 5  /*                                                    +:+ +:+         +:+     */
 6  /*   By: ll-hotel <ll-hotel@student.42.fr>          +#+  +:+       +#+        */
 7  /*                                                +#+#+#+#+#+   +#+           */
 8  /*   Created: 2024/07/29 19:32:43 by ll-hotel          #+#    #+#             */
 9  /*   Updated: 2024/10/20 16:21:10 by ll-hotel         ###   ########.fr       */
10  /*                                                                            */
11  /* ************************************************************************** */
12  
13  #include "cub3D.h"
14  #include "ft_dprintf.h"
15  
16  int			cell_is_valid(int c);
17  int			cell_is_player(int c);
18  static int	check_walls(char **grid, u_long y, u_long x);
19  
20  int	grid_wall_check(char **grid)
21  {
22  	u_long	y;
23  	u_long	x;
24  
25  	y = 0;
26  	while (grid[y])
27  	{
28  		x = 0;
29  		while (grid[y][x])
30  			if (!check_walls(grid, y, x++))
31  				return (0);
32  		y += 1;
33  	}
34  	return (1);
35  }
36  
37  static int	check_walls(char **grid, u_long y, u_long x)
38  {
39  	const char	*errors[] = {"on a map edge", "adjacent to empty cell"};
40  	const char	cell = grid[y][x];
41  	int			error;
42  
43  	error = 0;
44  	if (cell != FLOOR && !cell_is_player(cell))
45  		return (1);
46  	else if (y == 0 || x == 0 || !grid[y + 1] || !grid[y][x + 1])
47  		error = 1;
48  	else if (grid[y][x - 1] == EMPTY || grid[y][x + 1] == EMPTY || \
49  			grid[y - 1][x] == EMPTY || grid[y + 1][x] == EMPTY)
50  		error = 2;
51  	if (error)
52  	{
53  		ft_dprintf(2, "Error\nFloor/player cell %s at y=%u,x=%u\n", \
54  				errors[error - 1], y, x);
55  		return (0);
56  	}
57  	return (1);
58  }