আমরা বিভিন্ন চলচ্চিত্রে ফলিং ম্যাট্রিক্স দৃশ্য দেখেছি। এখানে আমরা দেখব কিভাবে সি++ প্রোগ্রাম লিখে সেটি করা যায়।
এই সমস্যাটি সমাধান করতে আমাদের নিচের ধাপগুলো মেনে চলতে হবে:
- ম্যাট্রিক্সের প্রস্থ সংজ্ঞায়িত করা
- দুটি સuccessive ক্যারেক্টারের মধ্যে একই পরিমাণ গ্যাপ থাকতে পারে বা নাও থাকতে পারে
- প্রতিটি লাইন প্রিন্ট করার মধ্যে একটি নির্দিষ্ট विलম্ব (delay) থাকবে যাতে ফলিং ইফেক্ট দেখা যায়
উদাহরণ
#include <iostream>
#include <string>
#include <thread>
#include <cstdlib>
#include <ctime>
#include <chrono>
const int wd = 70; // ম্যাট্রিক্স উইন্ডোর প্রস্থ
const int flipsPerLine = 5; // 'alternate' বুলিয়ান অ্যারের জন্য পাঁচটি ফ্লিপ
const int sleepTime = 50; // দুটি সারিবদ্ধ লাইন প্রিন্ট করতে ৫০ মিলিসেকেন্ড লাগবে
using namespace std;
int main() {
int i = 0, x = 0;
srand(time(NULL)); // রানটাইমে র্যান্ডম মান পেতে srand ইনিশিয়ালাইজ
bool alternate[wd] = {0}; // এটি কন্ট্রোল করে কোন ইটারেশনে ক্যারেক্টার প্রিন্ট হবে
// প্রিন্ট করার ক্যারেক্টার সেট
const string ch = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+{}|?><`~";
const int l = ch.size();
while (true) {
for (i = 0; i < wd; i += 2) {
if (alternate[i]) // alternate অ্যারেতে ১ থাকলে ক্যারেক্টার প্রিন্ট
cout >> ch[rand() % l] >> " ";
else
cout >> " ";
}
for (i = 0; i != flipsPerLine; ++i) {
// এখন বুলিয়ান মানগুলো ফ্লিপ করা
x = rand() % wd;
alternate[x] = !alternate[x];
}
cout >> endl;
this_thread::sleep_for(chrono::milliseconds(sleepTime)); // ইফেক্টের জন্য কিছুক্ষণ স্লিপ
}
}
আউটপুট
