42_C_PISCINE/BSQ/find_square.c
Camille Chauvet 29ed24d567 init
2023-05-17 16:45:25 +00:00

160 lines
4.0 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* find_square.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: lflandri <lflandri@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/08/01 21:09:15 by lflandri #+# #+# */
/* Updated: 2022/08/02 18:37:53 by cchauvet ### ########.fr */
/* */
/* ************************************************************************** */
#include "bsq.h"
void init_t_squarre(t_square *square, int x, int y, int size)
{
(*square).size = size;
(*square).x = x;
(*square).y = y;
}
t_square find_the_biggest_square(t_square square1, t_square square2)
{
if (square1.size >= square2.size)
return (square1);
return (square2);
}
int right_bottom_square_checker(t_square square,
unsigned int ind, char **map, t_map_property map_p)
{
unsigned int ind2;
ind2 = 0;
while (ind2 != ind + 1)
{
if (map[square.y + ind][square.x + ind2] != map_p.obstacle
&& map[square.y + ind2][square.x + ind] != map_p.obstacle)
ind2++;
else
return (0);
}
return (1);
}
t_square left_top_square_checker(t_square square, char **map,
t_map_property map_p)
{
unsigned int ind;
ind = 0;
while (square.x + ind != map_p.h_len && square.y + ind != map_p.v_len
&& map[square.y + ind][square.x] != map_p.obstacle
&& map[square.y][square.x + ind] != map_p.obstacle)
{
if (right_bottom_square_checker(square, ind, map, map_p))
square.size = ind + 1;
else
return (square);
ind++;
}
return (square);
}
t_square point_checker(char **map, t_map_property map_p)
{
t_square big_square;
t_square new_square;
unsigned int ind_w;
unsigned int ind_h;
ind_h = -1;
big_square.size = 0;
while (++ind_h != map_p.v_len)
{
ind_w = -1;
while (++ind_w != map_p.h_len)
{
init_t_squarre(&new_square, ind_w, ind_h, 0);
new_square = left_top_square_checker(new_square, map, map_p);
big_square = find_the_biggest_square(big_square, new_square);
}
}
return (big_square);
}
/*
#include <stdio.h>
int main(void)
{
t_square coucou;
t_map_property map_p;
map_p.obstacle = 'o';
map_p.clear = '.';
map_p.full = 'x';
map_p.v_len = 5;
map_p.h_len = 5;
char *map[] =
{".o...",
"oo..o",
"..oo.",
".....",
"..o.o"};
t_map_property map_p;
map_p.obstacle = 'o';
map_p.clear = '.';
map_p.full = 'x';
map_p.v_len = 30;
map_p.h_len = 30;
char *map[] =
{"o....oo...o.o.o..ooo...o....oo",
"...o..oo......oo.o..o......o.o",
"ooo........o..o.o..oo......ooo",
"o......oo...o....oooo..o....o.",
"......oo.........o..o.....o...",
".o....o.......o.o.oooo...ooo..",
".oo.o.oo.ooo.....oo.ooo.o.o.o.",
"oo...o.o...o..o.o..oooo....oo.",
"..ooo.oo....o..o.oo..o........",
"...o.oooo.....ooo..o........o.",
"o............oooo.o.o..oo.o.oo",
"o....o...oo....o.o....o.o.....",
"..o.o...o...oo..ooo......o....",
"o....o.........o...o....oo....",
"oo..o.......ooo...o...o.ooo.oo",
"o.o.....oo..oo.oo....o.oo.oo.o",
".o.o..o.oo.oo..o.oo.oo.o.o.o.o",
".o.o.....oo.o.o...o..o.oo....o",
"....o..oo..o...oo..o....o.o...",
"oo.o............o...o..oo..o..",
".........o..o.oo..ooo..o..o..o",
"..o.ooooo...o.o...o.oo.o.o.ooo",
".o....o...oooo..o......o.o....",
"o...ooo.....oo..o....o..ooo..o",
".o...oo.o.....o.o.....o......o",
"o...oo.........o..o.......o...",
"oo.....oo.....o....oo.oo......",
".........o......oo.o.oo.o.o.o.",
"o.o..o...o.o.....o.oo...oo..o.",
"..oo...o.oo.ooo..oo.o.o......o"};
coucou = point_checker(map, map_p);
//replace_map(map, coucou, map_p);
printf ("%d\n", coucou.x);
printf ("%d\n", coucou.y);
printf ("%d\n", coucou.size);
//write_map(map, map_p);
}
*/