static int ft_try(t_tetros *tetro, char **map, int size) { if (tetro != NULL) { while (tetro->x * tetro->y < size * size) { if ((ft_can_place(tetro, map, size)) == 1) { map = ft_place(tetro, map); if ((ft_try(tetro->next, map, size)) == 1) return (1); map = ft_delete_tetro(tetro, map, size); } if (tetro->x < size) tetro->x++; else { tetro->y++; tetro->x = 0; } } tetro->y = 0; tetro->x = 0; return (0); } return (1); }
void change_color(t_mlx *list) { list->color = list->color + 0x0F0F0F; mlx_clear_window(list->mlx, list->win); mlx_destroy_image(list->mlx, list->link); *list = ft_create_image(*list); ft_try(*list); mlx_put_image_to_window(list->mlx, list->win, list->link, list->pos_x_image, list->pos_y_image); }
int resolution(t_letubbies po) { t_mlx list; list = init_mlx(po); list.lp = put_gap_lpoint(list); ft_try(list); mlx_hook(list.win, 2, 1, key_hook, &list); mlx_mouse_hook(list.win, mouse_hook, &list); mlx_put_image_to_window(list.mlx, list.win, list.link, list.pos_x_image, list.pos_y_image); mlx_loop(list.mlx); return (0); }
void *ft_alg(void *p) { t_env *e; int i; e = (t_env *)p; i = e->id; while (e->roll != 3) { never_die(e, i); if (!ft_strcmp(e->state[NEXT(i)], THINK) && !ft_strcmp(e->state[PREV(i)], THINK)) try_both(e, i); else if (TRY(&e->lock[FI]) == 0) ft_try(e, FI, NI, i); else if (TRY(&e->lock[NI]) == 0) ft_try(e, NI, FI, i); else ft_rest(e, i, 0); } if (pthread_detach(e->th[i])) ft_putendl("Error while detaching thread"); return (p); }
void ft_solve(t_tetros *tetro, int nb_tetros) { char **map; int size; size = nb_tetros / 2; map = ft_gen_map(size); ft_adj_tetro(tetro); while (ft_try(tetro, map, size) == 0) { tetro->x = 0; tetro->y = 0; size++; ft_free_tetros(map, size); map = ft_gen_map(size); } ft_print_map(map); }