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]; int cw_kick_table[4][10]; int ccw_kick_table[4][10]; }; 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} } }, .cw_kick_table = { {+0,+0, -2,+0, +1,+0, -2,-1, +1,+2}, {+0,+0, -1,+0, +2,+0, -1,+2, +2,-1}, {+0,+0, +2,+0, -1,+0, +2,+1, -1,-2}, {+0,+0, +1,+0, -2,+0, +1,-2, -2,+1} }, .ccw_kick_table = { {+0,+0, -1,+0, +2,+0, -1,+2, +2,-1}, {+0,+0, +2,+0, -1,+0, +2,+1, -1,-2}, {+0,+0, +1,+0, -2,+0, +1,-2, -2,+1}, {+0,+0, -2,+0, +1,+0, -2,-1, +1,+2} } }, [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} } }, .cw_kick_table = { {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} }, .ccw_kick_table = { {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} } }, [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} } }, .cw_kick_table = { {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} }, .ccw_kick_table = { {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} } }, [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} } }, .cw_kick_table = { {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0}, {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0}, {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0}, {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0} }, .ccw_kick_table = { {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0}, {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0}, {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0}, {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0} } }, [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} } }, .cw_kick_table = { {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} }, .ccw_kick_table = { {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} } }, [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} } }, .cw_kick_table = { {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} }, .ccw_kick_table = { {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} } }, [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} } }, .cw_kick_table = { {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} }, .ccw_kick_table = { {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2}, {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2}, {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2}, {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2} } } };