diff --git a/print.c b/print.c index e16a89c..aa141bb 100644 --- a/print.c +++ b/print.c @@ -6,7 +6,7 @@ /* By: hulamy +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/04/30 13:24:28 by hulamy #+# #+# */ -/* Updated: 2019/05/06 16:29:52 by hulamy ### ########.fr */ +/* Updated: 2019/05/06 21:35:59 by hulamy ### ########.fr */ /* */ /* ************************************************************************** */ @@ -74,7 +74,7 @@ void print_map(unsigned int *tab, int width, int height, char letter) { if (i && !(i % width)) ft_putchar('\n'); - tab[i / 32] & (1 << (31 - i % 32)) ? ft_putchar(letter) : ft_putchar('.'); + tab[i / 32] & (1 << (31 - i % 32)) ? ft_put_tetri_color(letter) : ft_putchar('.'); ft_putchar(' '); i++; } @@ -87,7 +87,7 @@ void print_map(unsigned int *tab, int width, int height, char letter) void print_final_map(t_fillist *list, int size) { - unsigned int print; // DEBUG +// unsigned int print; // DEBUG t_fillist *tmp; char *map; int i; @@ -110,10 +110,10 @@ void print_final_map(t_fillist *list, int size) if (1 << (15 - i) & tmp->tetribit && tmp->position != -1) // DEBUG "&& tmp->position != -1" pour imprimer les bonnes lettres au coours du debug map[tmp->position + i + j - 1] = tmp->letter; } - ft_putstr("position: "); ft_putnbrendl(tmp->position); // DEBUG - print = tmp->tetribit << 16; // DEBUG - print_map(&print, tmp->width, tmp->height, tmp->letter); // DEBUG - ft_putchar('\n'); // DEBUG +// ft_putstr("position: "); ft_putnbrendl(tmp->position); // DEBUG +// print = tmp->tetribit << 16; // DEBUG +// print_map(&print, tmp->width, tmp->height, tmp->letter); // DEBUG +// ft_putchar('\n'); // DEBUG tmp = tmp->next; } i = -1; diff --git a/search_map.c b/search_map.c index 42bf790..265140f 100644 --- a/search_map.c +++ b/search_map.c @@ -6,7 +6,7 @@ /* By: hulamy +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/04/27 20:47:22 by hulamy #+# #+# */ -/* Updated: 2019/05/06 20:24:37 by hulamy ### ########.fr */ +/* Updated: 2019/05/06 23:23:40 by hulamy ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,22 +30,25 @@ int find_place(unsigned int *tab, t_fillist *list, int size, int pos) // boucle jusqu'a la dernier place pour le tetri dans la map ou qu'il fit dans un trou while (i < (size - list->height + 1) * size) { - tmp = 0; - // construit un tmp qui est une photo de la map de la taille du tetri a un emplacement donne - j = (list->height - 1) * size + i; - while (j >= i) - { - tmp >>= list->width; - tmp |= (mask & (tab[j / 32] << j)); - tmp |= (mask & (tab[(j + list->width) / 32] >> (32 - j))); - j -= size; - } - if (!((tmp >> 16) & list->tetribit)) - return (i + 1); - i++; // pour ne pas deborder a droite de la map if (i % size == size - list->width + 1) - i += list->width - 1; + i += list->width; + else + { + tmp = 0; + // construit un tmp qui est une photo de la map de la taille du tetri a un emplacement donne + j = (list->height - 1) * size + i; + while (j >= i) + { + tmp >>= list->width; + tmp |= (mask & (tab[j / 32] << j)); + tmp |= (mask & (tab[(j + list->width) / 32] >> (32 - j))); + j -= size; + } + if (!((tmp >> 16) & list->tetribit)) + return (i + 1); + i++; + } } return (0); } @@ -68,39 +71,19 @@ void add_remove(unsigned int *map, t_fillist *list, int size, int pos) // change les bits du tetri sur la map a la position donnee while (j >= pos) { -// /* tests pour trouver la nouvelle equation - ft_putstr("[j:"); ft_putnbr(j); ft_putstr("] [(32-j%32+1) % 32:"); ft_putnbr((32 - j % 32 + 1) % 32); ft_putstr("] [i:"); ft_putnbr(i); ft_putstr("] [pos:"); ft_putnbr(pos); ft_putendl("]"); - print_bits(map[j / 32], 32); - print_bits(list->tetribit << 16, 32); - print_bits(mask, 32); - print_bits(list->tetribit << (16 + i), 32); - print_bits((mask & list->tetribit << (16 + i)), 32); - print_bits((mask & list->tetribit << (16 + i)) >> (j - 1), 32); - print_bits((map[j / 32] | (mask & list->tetribit << (16 + i)) >> (j - 1)), 32); - ft_putchar('\n'); - print_bits(map[(j + size) / 32], 32); - print_bits((mask & list->tetribit << (16 + i)), 32); - print_bits((mask & list->tetribit << (16 + i)) << ((32 - j % 32 + 1) % 32), 32); - print_bits(map[(j + size) / 32] | (mask & list->tetribit << (16 + i)) << ((32 - j % 32 + 1) % 32), 32); -// */ - -// ft_putstr(" map[j/32] :"); print_bits(map[j/32], 32); -// ft_putstr("j :"); ft_putnbrendl(j); -// ft_putstr("mask :"); print_bits((mask), 32); -// ft_putstr("tetri :"); print_bits((tetri), 32); -// ft_putstr("tetri<<(16+i) :"); print_bits((tetri << (16 + i)), 32); -// ft_putstr("mask&tetri<<(16+i) :"); print_bits((mask & tetri << (16 + i)), 32); -// ft_putstr("[prev]>>j-1 :"); print_bits((mask & tetri << (16 + i)) >> (j - 1), 32); -// ft_putstr(" map[(j+size)/32]:"); print_bits(map[(j+size)/32], 32); -// ft_putstr("tetri<<(16+i) :"); print_bits((tetri << (16 + i)), 32); -// ft_putstr("mask&tetri<<(16+i) :"); print_bits((mask & tetri << (16 + i)), 32); -// ft_putstr("[prev]<tetribit << (16 + i)) >> (j - 1), 32); +// ft_putstr("map[] ^ mask :"); print_bits((map[j / 32] ^ (mask & list->tetribit << (16 + i)) >> (j - 1)), 32); map[j / 32] ^= (mask & tetri << (16 + i)) >> (j - 1); -// ft_putstr("-> map[j/32] :"); print_bits(map[j/32], 32); - map[(j + size) / 32] ^= (mask & tetri << (16 + i)) << ((32 - j % 32 + 1) % 32); -// ft_putstr("-> map[(j+size)/32]:"); print_bits(map[(j+size)/32], 32); - +// ft_putchar('\n'); +// ft_putstr("map[(j + size) / 32]:"); print_bits(map[(j + size) / 32], 32); +// ft_putstr("mask :"); print_bits((mask & list->tetribit << (16 + i)), 32); +// ft_putstr("mask :"); print_bits((mask & list->tetribit << (16 + i)) << (32 - j), 32); +// ft_putstr("map[] ^ mask :"); print_bits(map[(j + size) / 32] ^ (mask & list->tetribit << (16 + i)) << (32 - j), 32); +// ft_putchar('\n'); + map[(j + size) / 32] ^= (mask & tetri << (16 + i)) << (32 - j); j -= size; i -= list->width; } @@ -121,12 +104,12 @@ int fill_map(unsigned int *map, t_fillist *list, int size, t_fillist *link) { add_remove(map, list, size, pos); list->position = pos; - print_final_map(link, size); // DEBUG tente imprime la map avec des lettres - print_map(map, size, size, '#'); // DEBUG - ft_putchar('\n'); // DEBUG +// print_final_map(link, size); // DEBUG tente imprime la map avec des lettres +// print_map(map, size, size, '#'); // DEBUG if (fill_map(map, list->next, size, link)) return (1); add_remove(map, list, size, pos); + list->position = -1; } return (0); } @@ -169,64 +152,57 @@ void search_map(t_fillist *list) while (size * size < i * 4) size++; map = init_map(size); - + + + + + //////////////////////////// TEST //////////////////////////// - // ce tableau permet de monter jusqu'a une map de 16*16 +// // ce tableau permet de monter jusqu'a une map de 16*16 unsigned int print; - unsigned int tab[8]; - tab[0] = 2656554334; - tab[1] = 1394456818 ^ (1 << 11 | 1 << 22 | 1 << 4); - tab[2] = 1494256918; - tab[3] = 2656554334; - tab[4] = 1592453883; - tab[5] = 1444352908; - tab[6] = 2154339230; - tab[7] = 1576493154; - print_map(tab, 10, 10, '#'); - tmp = list; - while (tmp) - { - // imression pour tests - print = tmp->tetribit; - print <<= 16; - print_map(&print, tmp->width, tmp->height, '#'); // test, imprime le tetri - ft_putchar('\n'); - tmp = tmp->next; - } - - // quand add_remove_marchera la ligne d'apres imprimera la map avec les pixels du tetri rajoutes a la bonne place - tmp = list; - while (tmp) - { - print = tmp->tetribit; - print <<= 16; - print_map(&print, tmp->width, tmp->height, '#'); // test, imprime le tetri - ft_putnbrendl(find_place(tab, tmp, 10, 0)); - add_remove(tab, tmp, 10, find_place(tab, tmp, 10, 0)); - ft_putchar('\n'); // DEBUG - print_map(tab, 10, 10, '#'); - ft_putchar('\n'); // DEBUG - tmp = tmp->next; - } +// unsigned int tab[8]; // tab[0] = 2656554334; -// tab[1] = 1394456818; +// tab[1] = 1394456818 ^ (1 << 11 | 1 << 22 | 1 << 4); // tab[2] = 1494256918; // tab[3] = 2656554334; // tab[4] = 1592453883; // tab[5] = 1444352908; // tab[6] = 2154339230; // tab[7] = 1576493154; -// ft_putchar('\n'); -// print_map(tab, 10, 10, '#'); -// tab[1] = 1394456818 ^ (1 << 11 | 1 << 22 | 1 << 4); -// ft_putchar('\n'); // print_map(tab, 10, 10, '#'); + tmp = list; + while (tmp) + { + // imression pour tests + print = tmp->tetribit; + print <<= 16; + print_map(&print, tmp->width, tmp->height, tmp->letter); // test, imprime le tetri + ft_putchar('\n'); + tmp = tmp->next; + } +// // quand add_remove_marchera la ligne d'apres imprimera la map avec les pixels du tetri rajoutes a la bonne place +// tmp = list; +// while (tmp) +// { +// print = tmp->tetribit; +// print <<= 16; +// print_map(&print, tmp->width, tmp->height, '#'); // test, imprime le tetri +// ft_putnbrendl(find_place(tab, tmp, 10, 0)); +// add_remove(tab, tmp, 10, find_place(tab, tmp, 10, 0)); +// ft_putchar('\n'); // DEBUG +// print_map(tab, 10, 10, '#'); +// ft_putchar('\n'); // DEBUG +// tmp = tmp->next; +// } //////////////////////////// TEST //////////////////////////// + + + + // lance la recursive fill_map en augmentant la taille de la map tant qu'il n'y a pas de solution -// while (!fill_map(map, list, size, list)) -// map = init_map(size++); -// print_final_map(list, size); // DEBUG -// ft_putchar('\n'); // DEBUG -// print_map(map, size, size, '#'); + while (!fill_map(map, list, size, list)) + map = init_map(size++); + print_final_map(list, size); // DEBUG + print_map(map, size, size, '#'); }