• Welcome to Dark Bit Factory & Gravity.
 

ASCII Matrix - C code

Started by Rbz, July 17, 2006

Previous topic - Next topic

0 Members and 0 Guests are viewing this topic.

Rbz

Here's a little code I did for ASCII effect challenge, that I post here just to make it ease to find for C coders. The code it's so simple that I didn't make any comments.

Compile with Dev-Cpp 4.9.9.2



/*
    ASCII Matrix
    Code: Rbraz - 2006
*/

#include <stdio.h>
#include <conio.h>
#include <windows.h>


//------------------------------------------------------------------------------

#define MAX_CODE 70
#define MAX_LENGTH 25
typedef struct {
    int   x;
    float y;
    float speed;
    int   length;
    char  ch[MAX_LENGTH];
}
matrixcode;
matrixcode mtxcode[MAX_CODE];


float Random(float min, float max)
{
  return ((float)rand())/RAND_MAX * (max-min) + min;
}

void gotoxy(int x, int y)
{
    HANDLE hConsoleOutput;
    COORD dwCursorPosition;
    dwCursorPosition.X = x;
    dwCursorPosition.Y = y;
    hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
}

void textcolor (int color, int bgcolor)
{
    static int __BACKGROUND = bgcolor;
    static int __FOREGROUND = color;
   
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    color + (__BACKGROUND << 4));
}

void initconsole()
{
SetConsoleTitle("ASCII Matrix by Rbraz - Press Alt+Enter for FullScreen");

COORD wh = {80,50};
    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), wh);
   
SMALL_RECT rect1={1,1,80,50};
    SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &rect1);

    CONSOLE_CURSOR_INFO cursor = {10,FALSE};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor);   
}

void plotchar(char *ch, int x, int y, int color, int bgcolor)
{   
    if( ((x < 79) & (x > 1)) & ((y < 49) & (y > 1)) ) {
        gotoxy(x, y);
        textcolor(color,bgcolor);
        printf(ch);
    }
}

void initMatrix()
{
    int i,j;
   
    for(i=0; i<MAX_CODE; i++) {
        mtxcode[i].x = 1 + rand()%78;
        mtxcode[i].y = (float)(1 + rand()%48);
        mtxcode[i].speed = Random(0.4f, 1.0f);
       
        for(j=0; j<MAX_LENGTH; j++) mtxcode[i].ch[j] = 0;
       
        mtxcode[i].length = rand()%MAX_LENGTH;
       
        for(j=0; j<mtxcode[i].length; j++) {
            mtxcode[i].ch[j] = 33 + rand()%222;
        }
       
    } 
}

void plotMatrix()
{
    int i,j;
    char tmp[2];

    for(i=0; i<2; i++) tmp[i] = 0;
   
    for(i=0; i<MAX_CODE; i++) {
       
        for(j=0; j<mtxcode[i].length+2; j++) {
           
            tmp[0] = 33 + rand()%222;   //mtxcode[i].ch[j];
           
            if(j >= mtxcode[i].length-1) {
                plotchar(" ", mtxcode[i].x, (int)mtxcode[i].y, 0, 0);
                plotchar(tmp, mtxcode[i].x, (int)mtxcode[i].y+j, 10, 0);
            }
            else {
                plotchar(" ", mtxcode[i].x, (int)mtxcode[i].y, 0, 0);
                plotchar(tmp, mtxcode[i].x, (int)mtxcode[i].y+j, 2, 0);
            }
                       
        }
       
        mtxcode[i].y += mtxcode[i].speed;
       
        if(mtxcode[i].y > 49) {
            mtxcode[i].x = 1 + rand()%78;
            mtxcode[i].y = (float)-mtxcode[i].length;
            mtxcode[i].speed = Random(0.4f, 1.0f);
        }
           
    }
}

//------------------------------------------------------------------------------

int main(int argc, char *argv[])
{   
    srand(GetTickCount());   
     
    initconsole();   

    initMatrix();
       
    do
    {     
        plotMatrix();
    }
    while (!kbhit());
}
Challenge Trophies Won:

xteraco

hey sweet! good job man, i love it :)

Rbz

Challenge Trophies Won:

Dad1916

Really nic Rbraz.I compiled this in DevCPP without hitch, screenshot attached. Time to dissect the code now.  O0 O0

taj

Thanks for the code...glad to see someone else is gcc/Devcpp addict
Challenge Trophies Won:

saida

Really nice work there!