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;
}