shift implementation

This commit is contained in:
Kolomiets Yaroslav 2016-12-15 00:54:57 +02:00
parent 0f6aaeb611
commit 9ae40bfa6e

View file

@ -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);
}