Implementación de una matriz descendente
Desde los albores de las computadoras, Hollywood ha demostrado en gran medida que un hacker o un programador es alguien sentado en una computadora que escribe claves aleatorias en la computadora que finalmente se compila en una simulación similar a una matriz de caída. Aquí intentaremos implementar una simulación de matriz descendente similar en la consola usando C++.
La idea aquí es imprimir caracteres aleatorios en un ancho definido donde los dos caracteres sucesivos pueden tener o no una cierta cantidad de espacio definido al azar. Se debe implementar una cierta cantidad de retraso entre la impresión de líneas sucesivas para tener un "efecto de caída".
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 ();
Esto imprime la increíble simulación Falling-Matrix en la consola. Nota :
- Este programa no se ejecutará usando el botón Ejecutar en IDE porque el sistema está deshabilitado.
- Si obtiene un error del compilador mientras compila este programa. Compílelo usando el siguiente comando en GCC.
$ g++ -std=c++11 abc.cpp -o falling.o
$ falling.o