Taking too long? Close loading screen.
Opening Up A New Dimension

Matrix Like Rain in C#

Posted by: Herald Lynx Comments: 0 0 Post Date: May 26, 2016

Just for fun 🙂

If you are a fan of Matrix series then this program is for you…

using System;

namespace matrix
{
class Program
{
static int Counter;
static Random rand = new Random();

static int Interval = 100; // Normal Flowing of Matrix Rain
static int FullFlow = Interval + 30; // Fast Flowing of Matrix Rain
static int Blacking = FullFlow + 50; // Displaying the Test Alone

static ConsoleColor NormalColor = ConsoleColor.DarkGreen;
static ConsoleColor GlowColor = ConsoleColor.Green;
static ConsoleColor FancyColor = ConsoleColor.White;
static String TextInput = “MATRIX”;

static char AsciiCharacter//Randomised Inputs
{
get
{
int t = rand.Next(10);
if (t <= 2)
return (char)(‘0’ + rand.Next(10));
else if (t <= 4)
return (char)(‘a’ + rand.Next(27));
else if (t <= 6) return (char)(‘A’ + rand.Next(27)); else return (char)(rand.Next(32, 255)); } } static void Main() { Console.ForegroundColor = NormalColor; Console.WindowLeft = Console.WindowTop = 0; Console.WindowHeight = Console.BufferHeight = Console.LargestWindowHeight; Console.WindowWidth = Console.BufferWidth = Console.LargestWindowWidth; Console.SetWindowPosition(0, 0); Console.CursorVisible = false; int width, height; int[] y; Initialize(out width, out height, out y);//Setting the Starting Point while (true) { Counter = Counter + 1; UpdateAllColumns(width, height, y); if (Counter > (3 * Interval))
Counter = 0;

}
}
private static void UpdateAllColumns(int width, int height, int[] y)
{
int x;
if (Counter < Interval)
{
for (x = 0; x < width; ++x) { if (x % 10 == 1)//Randomly setting up the White Position Console.ForegroundColor = FancyColor; else Console.ForegroundColor = GlowColor; Console.SetCursorPosition(x, y[x]); Console.Write(AsciiCharacter); if (x % 10 == 9) Console.ForegroundColor = FancyColor; else Console.ForegroundColor = NormalColor; int temp = y[x] – 2; Console.SetCursorPosition(x, inScreenYPosition(temp, height)); Console.Write(AsciiCharacter); int temp1 = y[x] – 20; Console.SetCursorPosition(x, inScreenYPosition(temp1, height)); Console.Write(‘ ‘); y[x] = inScreenYPosition(y[x] + 1, height); } } else if (Counter > Interval && Counter < FullFlow)
{
for (x = 0; x < width; ++x) { Console.SetCursorPosition(x, y[x]); if (x % 10 == 9) Console.ForegroundColor = FancyColor; else Console.ForegroundColor = NormalColor; Console.Write(AsciiCharacter);//Printing the Character Always at Fixed position y[x] = inScreenYPosition(y[x] + 1, height); } } else if (Counter > FullFlow)
{
for (x = 0; x < width; ++x) { Console.SetCursorPosition(x, y[x]); Console.Write(‘ ‘);//Slowly blacking out the Screen int temp1 = y[x] – 20; Console.SetCursorPosition(x, inScreenYPosition(temp1, height)); Console.Write(‘ ‘); if (Counter > FullFlow && Counter < Blacking)// Clearing the Entire screen to get the Darkness
{
if (x % 10 == 9)
Console.ForegroundColor = FancyColor;
else
Console.ForegroundColor = NormalColor;
int temp = y[x] – 2;
Console.SetCursorPosition(x, inScreenYPosition(temp, height));
Console.Write(AsciiCharacter);//The Text is printed Always

}
Console.SetCursorPosition(width / 2, height / 2);
Console.Write(TextInput);
y[x] = inScreenYPosition(y[x] + 1, height);
}

}
}
public static int inScreenYPosition(int yPosition, int height)
{
if (yPosition < 0)//When there is negative value
return yPosition + height;
else if (yPosition < height)//Normal
return yPosition;
else// When y goes out of screen when autoincremented by 1
return 0;

}
private static void Initialize(out int width, out int height, out int[] y)
{
height = Console.WindowHeight;
width = Console.WindowWidth – 1;
y = new int[width];
Console.Clear();

for (int x = 0; x < width; ++x)//Setting the cursor at random at program startup
{
y[x] = rand.Next(height);
}
}
}
}

Share this post

Leave a Reply