Начнем с того, что я немного упрощаю.
Примечание: calloc
делает то же самое, что и malloc, но заполняет массив 0 байтами.
int i;
int** grid;
grid = (int**) calloc(N, sizeof(int *));
for (i = 0; i < N; i++)
grid[i] = (int*) calloc(N, sizeof(int));
Затем какплитки вымышлены, вы не можете сгенерировать новую матрицу, вы можете только перемещаться по ней, используя контролируемые вами индексы.Чтобы получить координаты любой плитки, я написал бы такую функцию:
void get_tile(int index_x, int index_y, int tile_dim, int matrix_dim, int* base_x, int* base_y){
if(tile_dim == 0)
return;
int new_dim = matrix_dim / tile_dim;
*base_x = index_x * new_dim ;
*base_y = index_y * new_dim ;
}
Так что в base_x
и base_y
функция будет возвращать новые базовые координаты, которые вам придется использовать для перемещениячерез плитку.
Имейте в виду, что новые базовые координаты будут жить в новой матрице с dim = old_dim / tile_dim;