enum TetrominoTypes { I = 0, J, L, O, S, T, Z, TETROMINO_COUNT }; enum Direction { NORTH = 0, EAST, SOUTH, WEST }; struct Tetromino { int size; struct Color color; int directions[4][4][4]; }; struct Tetromino tetrominos[7] = { [I] = { .size = 4, .color = SKYBLUE, .directions = { [NORTH] = { {0, 0, 0, 0}, {0, 0, 0, 0}, {1, 1, 1, 1}, {0, 0, 0, 0} }, [EAST] = { {0, 0, 1, 0}, {0, 0, 1, 0}, {0, 0, 1, 0}, {0, 0, 1, 0} }, [SOUTH] = { {0, 0, 0, 0}, {1, 1, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 0} }, [WEST] = { {0, 1, 0, 0}, {0, 1, 0, 0}, {0, 1, 0, 0}, {0, 1, 0, 0} } } }, [J] = { .size = 3, .color = BLUE, .directions = { [NORTH] = { {0, 0, 0}, {1, 1, 1}, {1, 0, 0} }, [EAST] = { {0, 1, 0}, {0, 1, 0}, {0, 1, 1} }, [SOUTH] = { {0, 0, 1}, {1, 1, 1}, {0, 0, 0} }, [WEST] = { {1, 1, 0}, {0, 1, 0}, {0, 1, 0} } } }, [L] = { .size = 3, .color = ORANGE, .directions = { [NORTH] = { {0, 0, 0}, {1, 1, 1}, {0, 0, 1} }, [EAST] = { {0, 1, 1}, {0, 1, 0}, {0, 1, 0} }, [SOUTH] = { {1, 0, 0}, {1, 1, 1}, {0, 0, 0} }, [WEST] = { {0, 1, 0}, {0, 1, 0}, {1, 1, 0} } } }, [O] = { .size = 3, .color = YELLOW, .directions = { [NORTH] = { {0, 0, 0}, {0, 1, 1}, {0, 1, 1} }, [EAST] = { {0, 0, 0}, {0, 1, 1}, {0, 1, 1} }, [SOUTH] = { {0, 0, 0}, {0, 1, 1}, {0, 1, 1} }, [WEST] = { {0, 0, 0}, {0, 1, 1}, {0, 1, 1} } } }, [S] = { .size = 3, .color = GREEN, .directions = { [NORTH] = { {0, 0, 0}, {1, 1, 0}, {0, 1, 1} }, [EAST] = { {0, 0, 1}, {0, 1, 1}, {0, 1, 0} }, [SOUTH] = { {1, 1, 0}, {0, 1, 1}, {0, 0, 0} }, [WEST] = { {0, 1, 0}, {1, 1, 0}, {1, 0, 0} } } }, [T] = { .size = 3, .color = PURPLE, .directions = { [NORTH] = { {0, 0, 0}, {1, 1, 1}, {0, 1, 0} }, [EAST] = { {0, 1, 0}, {0, 1, 1}, {0, 1, 0} }, [SOUTH] = { {0, 1, 0}, {1, 1, 1}, {0, 0, 0} }, [WEST] = { {0, 1, 0}, {1, 1, 0}, {0, 1, 0} } } }, [Z] = { .size = 3, .color = RED, .directions = { [NORTH] = { {0, 0, 0}, {0, 1, 1}, {1, 1, 0} }, [EAST] = { {0, 1, 0}, {0, 1, 1}, {0, 0, 1} }, [SOUTH] = { {0, 1, 1}, {1, 1, 0}, {0, 0, 0} }, [WEST] = { {1, 0, 0}, {1, 1, 0}, {0, 1, 0} } } } };