shift implementation
This commit is contained in:
parent
0f6aaeb611
commit
9ae40bfa6e
1 changed files with 50 additions and 27 deletions
77
src/fillit.c
77
src/fillit.c
|
@ -5,7 +5,6 @@ unsigned int ft_sqrt_ceil(unsigned int num)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
i = 1;
|
i = 1;
|
||||||
// int and unsigned int comparsion
|
|
||||||
while (i * i < num)
|
while (i * i < num)
|
||||||
i++;
|
i++;
|
||||||
return (i);
|
return (i);
|
||||||
|
@ -57,6 +56,8 @@ void map_initialization(char **tetramino_table, t_map *map)
|
||||||
convert_tetramino(*tetramino_table++, map, i++);
|
convert_tetramino(*tetramino_table++, map, i++);
|
||||||
map->figure_amount = i;
|
map->figure_amount = i;
|
||||||
map->size = ft_sqrt_ceil(i * 4);
|
map->size = ft_sqrt_ceil(i * 4);
|
||||||
|
map->mask = 1;
|
||||||
|
map->mask <<= 16 - map->size;
|
||||||
clear_map(map);
|
clear_map(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,9 +67,9 @@ void insert_tetramino(t_map *map, int index)
|
||||||
int k;
|
int k;
|
||||||
t_tetrominoes *temp;
|
t_tetrominoes *temp;
|
||||||
|
|
||||||
temp = map->figure[index];
|
temp = &map->figure[index];
|
||||||
i = temp->offset_y;
|
i = temp->offset_y;
|
||||||
k = i + 4;
|
k = i + temp->height;
|
||||||
while (i < k)
|
while (i < k)
|
||||||
{
|
{
|
||||||
map->line[i] |= temp->line[i];
|
map->line[i] |= temp->line[i];
|
||||||
|
@ -83,37 +84,59 @@ void erase_tetramino(t_map *map, int index)
|
||||||
int k;
|
int k;
|
||||||
t_tetrominoes *temp;
|
t_tetrominoes *temp;
|
||||||
|
|
||||||
temp = map->figure[index];
|
temp = &map->figure[index];
|
||||||
i = temp->offset_y;
|
i = temp->offset_y;
|
||||||
k = 0;
|
k = 0;
|
||||||
while (k < 4)
|
while (k < temp->height)
|
||||||
{
|
{
|
||||||
map->line[i + k] ^= temp->line[i + k];
|
map->line[i + k] ^= temp->line[i + k];
|
||||||
k++;
|
k++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// void shift_tetramino(t_map *map, int index)
|
int can_insert(t_map *map, int index)
|
||||||
// {
|
{
|
||||||
// //сделаю сдвиг фигуры вправо, если дошли до границы, то перемещу в начало следующего ряд и т.д.
|
int i;
|
||||||
// }
|
int k;
|
||||||
|
t_tetrominoes *temp;
|
||||||
|
|
||||||
// void algorithm(t_map *map)
|
temp = &map->figure[index];
|
||||||
// {
|
i = temp->offset_y;
|
||||||
// //тут у меня сейчас трабл с рекурсией
|
k = i + temp->height;
|
||||||
// //не могу пока написать что-то годное
|
while (i < k)
|
||||||
// }
|
{
|
||||||
|
if (map->line[i] & temp->line[i])
|
||||||
|
return (0);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
int shift_tetramino(t_map *map, int index)
|
||||||
|
{
|
||||||
|
int left_shift;
|
||||||
|
int i;
|
||||||
|
int k;
|
||||||
|
t_tetrominoes *temp;
|
||||||
|
|
||||||
// мейн в отдельный файл кину, знаю что ты не любишь когда много файлов)
|
temp = &map->figure[index];
|
||||||
|
i = temp->offset_y;
|
||||||
// int main()
|
k = i + temp->height;
|
||||||
// {
|
left_shift = 1;
|
||||||
// t_map map;
|
while (i < k)
|
||||||
// char** table;
|
if (temp->line[i++] & map->mask)
|
||||||
|
left_shift = 0;
|
||||||
// table = read_from_file();
|
i = temp->offset_y;
|
||||||
// map_initialization(table, &map);
|
if (left_shift)
|
||||||
// algoritm(&map);
|
while (i < k)
|
||||||
// print_result(&map);
|
temp->line[i++] >>= 1;
|
||||||
// return (0);
|
else if (k < map->size)
|
||||||
// }
|
while(k-- > i)
|
||||||
|
{
|
||||||
|
while (!(temp->line[k] & 0x8000))
|
||||||
|
temp->line[k] <<= 1;
|
||||||
|
temp->line[k + 1] = temp->line[k];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (0);
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue