Implementácia padajúcej matice

Implementácia padajúcej matice

Od úsvitu počítačov Hollywood výrazne demonštroval hackera alebo programátora ako niekoho, kto sedí na počítači a píše náhodné klávesy na počítači, ktorý sa nakoniec skompiluje do simulácie padajúcej matice. Tu sa pokúsime implementovať podobnú simuláciu padajúcej matice na konzole pomocou C++.

Falling-Matrix na príkazovom riadku pomocou C++

Myšlienkou je vytlačiť náhodné znaky cez definovanú šírku, kde dva po sebe nasledujúce znaky môžu alebo nemusia mať určitú medzeru definovanú náhodne. Medzi tlačou po sebe nasledujúcich riadkov je potrebné zaviesť určité oneskorenie, aby sa dosiahol „klesajúci efekt“.

CPP
   // C++ program for implementation of falling matrix.   #include       #include      #include      #include      #include      #include      // Width of the matrix line   const     int     width     =     70  ;   // Defines the number of flips in Boolean Array 'switches'   const     int     flipsPerLine     =     5  ;   // Delay between two successive line print   const     int     sleepTime     =     100  ;   using     namespace     std  ;   int     main  ()   {      int     i     =     0       x     =     0  ;      // srand initialized with time function      // to get distinct rand values at runtime      srand  (  time  (  NULL  ));      // Used to decide whether to print      // the character in that particular iteration      bool     switches  [  width  ]     =     {  0  };      // Set of characters to print from      const     string     ch     =     '1234567890qwertyuiopasdfghjkl'      'zxcvbnm./';[]!@#$%^&*()-=_+'  ;      const     int     l     =     ch  .  size  ();      // Green font over black console duh!      system  (  'Color 0A'  );      // Indefinite Loop      while     (  true  )      {      // Loop over the width      // Increment by 2 gives better effect      for     (  i     =     0  ;     i      <     width  ;     i     +=     2  )      {      // Print character if switches[i] is 1      // Else print a blank character      if     (  switches  [  i  ])      cout      < <     ch  [  rand  ()     %     l  ]      < <     ' '  ;      else      cout      < <     ' '  ;      }      // Flip the defined amount of Boolean values      // after each line      for     (  i     =     0  ;     i     !=     flipsPerLine  ;     ++  i  )      {      x     =     rand  ()     %     width  ;      switches  [  x  ]     =     !  switches  [  x  ];      }      // New Line      cout      < <     endl  ;      // Using sleep_for function to delay      // chrono milliseconds function to convert to milliseconds      this_thread  ::  sleep_for  (  chrono  ::  milliseconds  (  sleepTime  ));      }      return     0  ;   }   
Java
   import     java.util.Random  ;   public     class   FallingMatrix     {      // Width of the matrix line      static     final     int     width     =     70  ;      // Defines the number of flips in Boolean Array 'switches'      static     final     int     flipsPerLine     =     5  ;      // Delay between two successive line prints      static     final     int     sleepTime     =     100  ;      public     static     void     main  (  String  []     args  )     {      // Used to decide whether to print the character in that particular iteration      boolean  []     switches     =     new     boolean  [  width  ]  ;      // Set of characters to print from      String     ch     =     '1234567890qwertyuiopasdfghjkl'      +     'zxcvbnm./';[]!@#$%^&*()-=_+'  ;      int     l     =     ch  .  length  ();      // Green font over black console      System  .  out  .  print  (  'u001B[32m'  );      // Indefinite Loop      while     (  true  )     {      // Loop over the width      // Increment by 2 gives a better effect      for     (  int     i     =     0  ;     i      <     width  ;     i     +=     2  )     {      // Print character if switches[i] is true      // Else print a blank character      if     (  switches  [  i  ]  )      System  .  out  .  print  (  ch  .  charAt  (  new     Random  ().  nextInt  (  l  ))     +     ' '  );      else      System  .  out  .  print  (  ' '  );      }      // Flip the defined amount of Boolean values after each line      for     (  int     i     =     0  ;     i      <     flipsPerLine  ;     ++  i  )     {      int     x     =     new     Random  ().  nextInt  (  width  );      switches  [  x  ]     =     !  switches  [  x  ]  ;      }      // New Line      System  .  out  .  println  ();      // Delay      try     {      Thread  .  sleep  (  sleepTime  );      }     catch     (  InterruptedException     e  )     {      e  .  printStackTrace  ();      }      }      }   }   
Python3
   # Python program for implementation of falling matrix.   import   random   import   time   # Width of the matrix line   width   =   70   # Defines the number of flips in Boolean Array 'switches'   flipsPerLine   =   5   # Delay between two successive line print   sleepTime   =   0.1   # Set of characters to print from   ch   =   '1234567890qwertyuiopasdfghjklzxcvbnm./';[]!@#$%^&*()-=_+'   # Used to decide whether to print   # the character in that particular iteration   switches   =   [  0  ]  *  width   # Indefinite Loop   while   True  :   # Loop over the width   # Increment by 2 gives better effect   for   i   in   range  (  0     width     2  ):   # Print character if switches[i] is 1   # Else print a blank character   if   switches  [  i  ]:   print  (  ch  [  random  .  randint  (  0     len  (  ch  )  -  1  )]   end  =  ' '  )   else  :   print  (  ' '     end  =  ' '  )   # Flip the defined amount of Boolean values   # after each line   for   _   in   range  (  flipsPerLine  ):   x   =   random  .  randint  (  0     width  -  1  )   switches  [  x  ]   =   not   switches  [  x  ]   # New Line   print  ()   # Using sleep function to delay   time  .  sleep  (  sleepTime  )   
JavaScript
   // Importing required modules   const     sleep     =     require  (  'util'  ).  promisify  (  setTimeout  );   // Width of the matrix line   let     width     =     70  ;   // Defines the number of flips in Boolean Array 'switches'   let     flipsPerLine     =     5  ;   // Delay between two successive line print   let     sleepTime     =     100  ;     // in milliseconds   // Set of characters to print from   let     ch     =     '1234567890qwertyuiopasdfghjklzxcvbnm./';[]!@#$%^&*()-=_+'  ;   // Used to decide whether to print   // the character in that particular iteration   let     switches     =     Array  (  width  ).  fill  (  0  );   // Indefinite Loop   async     function     fallingMatrix  ()     {      while     (  true  )     {      // Loop over the width      // Increment by 2 gives better effect      for     (  let     i     =     0  ;     i      <     width  ;     i     +=     2  )     {      // Print character if switches[i] is 1      // Else print a blank character      process  .  stdout  .  write  (  switches  [  i  ]     ?     ch  [  Math  .  floor  (  Math  .  random  ()     *     ch  .  length  )]     +     ' '     :     ' '  );      }      // Flip the defined amount of Boolean values      // after each line      for     (  let     _     =     0  ;     _      <     flipsPerLine  ;     _  ++  )     {      let     x     =     Math  .  floor  (  Math  .  random  ()     *     width  );      switches  [  x  ]     =     !  switches  [  x  ];      }      // New Line      console  .  log  ();      // Using sleep function to delay      await     sleep  (  sleepTime  );      }   }   fallingMatrix  ();   

Toto vytlačí úžasnú simuláciu Falling-Matrix na konzole. Poznámka:

  • Tento program sa nespustí pomocou tlačidla Spustiť na IDE, pretože systém je vypnutý.
  • Ak sa pri kompilácii tohto programu zobrazí chyba kompilátora. Kompilujte ho pomocou nižšie uvedeného príkazu na GCC.
     $ g++ -std=c++11 abc.cpp -o falling.o   
    $ falling.o