З самого початку появи комп’ютерів Голлівуд чудово демонстрував хакера чи програміста як людину, яка сидить за комп’ютером і набирає випадкові ключі на комп’ютері, що в кінцевому підсумку компілюється в падаючу матрицю, подібну до симуляції. Тут ми спробуємо реалізувати подібну симуляцію падаючої матриці на консолі за допомогою C++.
Ідея полягає в тому, щоб надрукувати випадкові символи певної ширини, де два послідовні символи можуть або не можуть мати певну кількість проміжків, визначених випадковим чином. Певна затримка між друком послідовних рядків повинна бути реалізована, щоб мати «ефект падіння».
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();
Це друкує дивовижну симуляцію Falling-Matrix на консолі. Примітка:
- Ця програма не запускається за допомогою кнопки «Запустити в IDE», оскільки систему вимкнено.
- Якщо ви отримуєте помилку компілятора під час компіляції цієї програми. Скомпілюйте його за допомогою наведеної нижче команди на GCC.
$ g++ -std=c++11 abc.cpp -o falling.o
$ falling.o