logo

Implementacja spadającej macierzy

Od zarania dziejów komputerów Hollywood w dużym stopniu demonstrowało hakera lub programistę jako osobę siedzącą na komputerze i wpisując losowe klawisze na komputerze, co ostatecznie kompiluje się do symulacji przypominającej opadającą macierz. Tutaj spróbujemy zaimplementować podobną symulację opadającej macierzy na konsoli przy użyciu C++.

Falling-Matrix w wierszu poleceń przy użyciu C++' src='//techcodeview.com/img/matrix/07/implementation-of-a-falling-matrix.webp' title=

Pomysł polega na tym, aby drukować losowe znaki o określonej szerokości, przy czym dwa kolejne znaki mogą mieć losowo określoną wielkość odstępu lub nie. Aby uzyskać „efekt opadania”, należy zastosować pewne opóźnienie pomiędzy drukowaniem kolejnych wierszy.



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(); 

Spowoduje to wydrukowanie na konsoli niesamowitej symulacji Falling-Matrix. Notatka :

  • Ten program nie będzie działał przy użyciu przycisku Uruchom na IDE, ponieważ system jest wyłączony.
  • Jeśli podczas kompilacji tego programu pojawi się błąd kompilatora. Skompiluj go za pomocą poniższego polecenia w GCC.
    $ g++ -std=c++11 abc.cpp -o falling.o  
    $ falling.o