Difference between revisions of "Festive Matrix-like terminal animation"

From WTFwiki
Jump to navigation Jump to search
(Created page with "Party like it's 1999. With Neo. Compile with -lncurses. /* Funky Matrix-screen lookalike, (c) 1999 Stian Sletner <stian@sletner.com> * * To compile: gcc -o matrix matr...")
 
m (3 revisions)
 
(2 intermediate revisions by one other user not shown)
Line 2: Line 2:
  
 
Compile with -lncurses.
 
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>
 
  /* Funky Matrix-screen lookalike, (c) 1999 Stian Sletner <stian@sletner.com>
Line 66: Line 68:
 
   
 
   
 
         while ((key = getch()) != 'q') {
 
         while ((key = getch()) != 'q') {
 
 
                 if (key < '9' && key > '0')
 
                 if (key < '9' && key > '0')
 
                         halfdelay(key - '0');
 
                         halfdelay(key - '0');

Latest revision as of 22:53, 4 January 2013

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