Discusión:C sharp NET/Capítulo 6

De Wikilibros, la colección de libros de texto de contenido libre.
Ir a la navegación Ir a la búsqueda

El programa anterior de Matrix es muy interesante, pero no tiene que ver con este capítulo de Herencia y Polimorfismo. Quizás habría que movelo a otra parte del libro.

using System;

namespace m7tr1x {

   class Program
   {
       static void Main(string[] args)
       {
           Console.Title = "tH3 M7tr1x 3ff3<t";
           Console.ForegroundColor = ConsoleColor.DarkGreen;
           Console.WindowLeft = Console.WindowTop = 0;
           Console.WindowHeight = Console.BufferHeight = Console.LargestWindowHeight;
           Console.WindowWidth = Console.BufferWidth = Console.LargestWindowWidth;
           Console.WriteLine("H1T 7NY K3Y T0 C0NT1NU3 =/");
           Console.ReadKey();
           Console.CursorVisible = false;
           int width, height;
           int[] y;
           int[] l;
           Initialize(out width, out height, out y, out l);
           int ms;
           while (true)
           {
               DateTime t1 = DateTime.Now;
               MatrixStep(width, height, y, l);
               ms = 10 - (int)((TimeSpan)(DateTime.Now - t1)).TotalMilliseconds;
               if (ms> 0)
                   System.Threading.Thread.Sleep(ms);
               if (Console.KeyAvailable)
                   if (Console.ReadKey().Key == ConsoleKey.F5)
                       Initialize(out width, out height, out y, out l);
           }
       }
       static bool thistime = false;
       private static void MatrixStep(int width, int height, int[] y, int[] l)
       {
           int x;
           thistime = !thistime;
           for (x = 0; x <width; ++x)
           {
               if (x % 11 == 10)
               {
                   if (!thistime)
                       continue;
                   Console.ForegroundColor = ConsoleColor.White;
               }
               else
               {
                   Console.ForegroundColor = ConsoleColor.DarkGreen;
                   Console.SetCursorPosition(x, inBoxY(y[x] - 2 - (l[x] / 40 * 2), height));
                   Console.Write(R);
                   Console.ForegroundColor = ConsoleColor.Green;
               }
               Console.SetCursorPosition(x, y[x]);
               Console.Write(R);
               y[x] = inBoxY(y[x] + 1, height);
               Console.SetCursorPosition(x, inBoxY(y[x] - l[x], height));
               Console.Write(' ');
           }
       }
       private static void Initialize(out int width, out int height, out int[] y, out int[] l)
       {
           int h1;
           int h2 = (h1 = (height = Console.WindowHeight) / 2) / 2;
           width = Console.WindowWidth - 1;
           y = new int[width];
           l = new int[width];
           int x;
           Console.Clear();
           for (x = 0; x <width; ++x)
           {
               y[x] = r.Next(height);
               l[x] = r.Next(h2 * ((x % 11 != 10) ? 2 : 1), h1 * ((x % 11 != 10) ? 2 : 1));
           }
       }
       static Random r = new Random();
       static char R
       {
           get
           {
               int t = r.Next(10);
               if (t <= 2)
                   return (char)('0' + r.Next(10));
               else if (t <= 4)
                   return (char)('a' + r.Next(27));
               else if (t <= 6)
                   return (char)('A' + r.Next(27));
               else
                   return (char)(r.Next(32, 255));
           }
       }
       public static int inBoxY(int n, int height)
       {
           n = n % height;
           if (n <0)
               return n + height;
           else
               return n;
       }
   }

}