Festive Matrix-like terminal animation
Jump to navigation
Jump to search
Party like it's 1999. With Neo.
Compile with -lncurses.
Press 1 when it's running to get it to run slightly faster.
/* Funky Matrix-screen lookalike, (c) 1999 Stian Sletner <stian@sletner.com> * * To compile: gcc -o matrix matrix.c -lncurses */ #include <ncurses.h> #include <stdlib.h> #include <time.h> #include <string.h> #define DEFAULT_DELAY 5 #define MAX_X 256 #define MAX_Y 128 #define MATRICES (COLS * 1.5) #define MATRIX_BRIGHT COLOR_PAIR(1) | A_BOLD #define MATRIX_MIDDLE COLOR_PAIR(1) #define MATRIX_DARK COLOR_PAIR(2) | A_BOLD int LINES, COLS; int main(int argc, char **argv) { char key; int i, x[MAX_X], y[MAX_Y]; if (argc != 1) { fprintf(stderr, "Usage: %s\n", argv[0]); fprintf(stderr, " use 0-9 to change speed, q to quit\n"); return -1; } if (LINES >= MAX_X || COLS >= MAX_Y) { fprintf(stderr, "Your terminal is too large, edit MAX_X and MAX_Y\n"); return -1; } initscr(); cbreak(); noecho(); if (has_colors() == FALSE) { fprintf(stderr, "Your terminal lacks color capability\n"); return -1; } start_color(); init_pair(1, COLOR_GREEN, COLOR_BLACK); init_pair(2, COLOR_BLACK, COLOR_BLACK); halfdelay(DEFAULT_DELAY); curs_set(0); srand(time(NULL)); for (i = 0; i < MATRICES; i++) { y[i] = rand() % LINES; x[i] = rand() % COLS; } while ((key = getch()) != 'q') { if (key < '9' && key > '0') halfdelay(key - '0'); for (i = 0; i < MATRICES; i++) { y[i]++; if (y[i] >= LINES + 6) { y[i] = 0; x[i] = rand() % COLS; } attrset(MATRIX_BRIGHT); mvaddch(y[i], x[i], rand() % 10 + '0'); attrset(MATRIX_MIDDLE); mvaddch(y[i] - 3, x[i], rand() % 10 + '0'); attrset(MATRIX_DARK); mvaddch(y[i] - 6, x[i], rand() % 10 + '0'); } refresh(); } endwin(); return 0; }