#include #include #include // for `usleep()` #include // for `memset()` #define WIDTH 40 // Terminal width (adjust based on your terminal) #define HEIGHT 20 // Terminal height #define NUM_CHARS 5 // Number of characters (now 5) // ANSI color codes for the characters #define COLOR_GREEN "\033[32m" #define COLOR_PURPLE "\033[35m" #define COLOR_YELLOW "\033[33m" #define COLOR_RED "\033[31m" #define COLOR_CYAN "\033[36m" #define COLOR_RESET "\033[0m" typedef struct { char symbol; // Character symbol (e.g., 'G', 'P', etc.) const char* color; // ANSI color code int x, y; // Position } Character; // Function to clear the terminal screen void clearScreen() { printf("\033[H\033[J"); // ANSI escape code } // Function to draw the Tokyo skyline (using tabs and symbols) void drawSkyline() { printf("\n"); // Move to the bottom printf("\t\t _/\\_ __\n"); printf("\t\t / \\ _/ \\_\n"); printf("\t\t |TOKYO |___/ \\\n"); printf("\t\t \\______/ \\__\n"); } // Function to render a single frame void drawFrame(Character chars[NUM_CHARS]) { char grid[HEIGHT][WIDTH]; // Initialize grid with spaces memset(grid, ' ', sizeof(grid)); // Place characters in the grid for (int k = 0; k < NUM_CHARS; k++) { if (chars[k].y >= 0 && chars[k].y < HEIGHT && chars[k].x >= 0 && chars[k].x < WIDTH) { grid[chars[k].y][chars[k].x] = chars[k].symbol; } } // Draw the grid with colors for (int i = 0; i < HEIGHT; i++) { for (int j = 0; j < WIDTH; j++) { // Check if this cell contains a character int charFound = 0; for (int k = 0; k < NUM_CHARS; k++) { if (chars[k].y == i && chars[k].x == j) { printf("%s%c%s", chars[k].color, chars[k].symbol, COLOR_RESET); charFound = 1; break; } } if (!charFound) printf(" "); // Empty space } printf("\n"); } // Draw the Tokyo skyline drawSkyline(); } int main() { // Initialize the five characters with colors and positions Character chars[NUM_CHARS] = { {'G', COLOR_GREEN, 10, 0}, // Green {'P', COLOR_PURPLE, 15, 0}, // Purple {'Y', COLOR_YELLOW, 20, 0}, // Yellow {'R', COLOR_RED, 25, 0}, // Red {'C', COLOR_CYAN, 30, 0} // Cyan }; // Animation loop (falling motion) for (int frame = 0; frame < HEIGHT; frame++) { clearScreen(); drawFrame(chars); // Move each character down for (int k = 0; k < NUM_CHARS; k++) { chars[k].y++; } usleep(200000); // 200ms delay (adjust for speed) } return 0; }