fillit/fillit.c
Kolomiets Yaroslav a3800b97d2 some corrections
2016-12-14 17:18:34 +02:00

118 lines
1.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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