118 lines
1.9 KiB
C
118 lines
1.9 KiB
C
#include "fillit.h"
|
||
#include <stdlib.h>
|
||
#include <stdio.h>
|
||
|
||
unsigned int ft_sqrt_ceil(unsigned int num)
|
||
{
|
||
int i;
|
||
|
||
i = 1;
|
||
while (i * i < num)
|
||
i++;
|
||
return (i);
|
||
}
|
||
|
||
void clear_map(t_map *map)
|
||
{
|
||
int i;
|
||
|
||
i = 0;
|
||
while (i < 16)
|
||
map->line[i++] = 0;
|
||
}
|
||
|
||
void convert_tetramino(char *s, t_map *map, int index)
|
||
{
|
||
uint16_t temp;
|
||
int i;
|
||
int y;
|
||
int sharp_count;
|
||
|
||
map->figure[index].offset = 0;
|
||
sharp_count = 0;
|
||
i = 0;
|
||
y = 1;
|
||
while (i < 16 && sharp_count < 4)
|
||
{
|
||
temp = 0;
|
||
while (i < y * 4)
|
||
{
|
||
temp = temp << 1;
|
||
if (s[i++] == '#' && ++sharp_count)
|
||
temp = temp | 0x01;
|
||
|
||
}
|
||
temp = temp << 12;
|
||
map->figure[index].line[y - 1] = temp;
|
||
y++;
|
||
}
|
||
map->figure[index].height = y - 1;
|
||
}
|
||
|
||
void map_initialization(char **tetramino_table, t_map *map)
|
||
{
|
||
unsigned int i;
|
||
|
||
i = 0;
|
||
while (*tetramino_table)
|
||
convert_tetramino(*tetramino_table++, map, i++);
|
||
map->figure_amount = i;
|
||
map->size = ft_sqrt_ceil(i * 4);
|
||
clear_map(map);
|
||
}
|
||
|
||
void insert_tetramino(t_map *map, int index)
|
||
{
|
||
int i;
|
||
int k;
|
||
t_tetraminos *temp;
|
||
|
||
temp = map->figure[index];
|
||
i = temp->offset_y;
|
||
k = i + 4;
|
||
while (i < k)
|
||
{
|
||
map->line[i] |= temp->line[i];
|
||
i++;
|
||
}
|
||
}
|
||
|
||
|
||
void erase_tetramino(t_map *map, int index)
|
||
{
|
||
int i;
|
||
int k;
|
||
t_tetraminos *temp;
|
||
|
||
temp = map->figure[index];
|
||
i = temp->offset_y;
|
||
k = 0;
|
||
while (k < 4)
|
||
{
|
||
map->line[i + k] ^= temp->line[i + k];
|
||
k++;
|
||
}
|
||
}
|
||
|
||
void shift_tetramino(t_map *map, int index)
|
||
{
|
||
//сделаю сдвиг фигуры вправо, если дошли до границы, то перемещу в начало следующего ряд и т.д.
|
||
}
|
||
|
||
void algorithm(t_map *map)
|
||
{
|
||
//тут у меня сейчас трабл с рекурсией
|
||
//не могу пока написать что-то годное
|
||
}
|
||
|
||
int main()
|
||
{
|
||
t_map map;
|
||
char** table;
|
||
|
||
table = read_from_file();
|
||
map_initialization(table, &map);
|
||
algoritm(&map);
|
||
print_result(&map);
|
||
return (0);
|
||
}
|