সুচিপত্র:

নেটওয়ার্ক প্রতিদ্বন্দ্বিতা: বিবিসি মাইক্রোর জন্য একটি নিম্ন-বিলম্বিত খেলা: বিট: 10 টি ধাপ (ছবি সহ)
নেটওয়ার্ক প্রতিদ্বন্দ্বিতা: বিবিসি মাইক্রোর জন্য একটি নিম্ন-বিলম্বিত খেলা: বিট: 10 টি ধাপ (ছবি সহ)

ভিডিও: নেটওয়ার্ক প্রতিদ্বন্দ্বিতা: বিবিসি মাইক্রোর জন্য একটি নিম্ন-বিলম্বিত খেলা: বিট: 10 টি ধাপ (ছবি সহ)

ভিডিও: নেটওয়ার্ক প্রতিদ্বন্দ্বিতা: বিবিসি মাইক্রোর জন্য একটি নিম্ন-বিলম্বিত খেলা: বিট: 10 টি ধাপ (ছবি সহ)
ভিডিও: টুইটারের প্রতিদ্বন্দ্বী আনছে ফেসবুক 2024, ডিসেম্বর
Anonim
নেটওয়ার্ক প্রতিদ্বন্দ্বিতা: বিবিসি মাইক্রো: বিট জন্য একটি নিম্ন-বিলম্বিত খেলা
নেটওয়ার্ক প্রতিদ্বন্দ্বিতা: বিবিসি মাইক্রো: বিট জন্য একটি নিম্ন-বিলম্বিত খেলা
নেটওয়ার্ক প্রতিদ্বন্দ্বিতা: বিবিসি মাইক্রো: বিট জন্য একটি নিম্ন-বিলম্বিত খেলা
নেটওয়ার্ক প্রতিদ্বন্দ্বিতা: বিবিসি মাইক্রো: বিট জন্য একটি নিম্ন-বিলম্বিত খেলা

এই টিউটোরিয়ালে, আমি ব্যাখ্যা করব কিভাবে বিবিসি মাইক্রোতে একটি মৌলিক মাল্টিপ্লেয়ার গেম বাস্তবায়ন করা যায়: বিট নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে:

  • একটি সহজ ইন্টারফেস
  • বোতাম প্রেস এবং স্ক্রিন আপডেটের মধ্যে কম বিলম্ব
  • অংশগ্রহণকারীদের একটি নমনীয় সংখ্যা
  • একটি মাস্টার রিমোট ("রুট") ডিভাইস ব্যবহার করে গেমের উপর সহজ নিয়ন্ত্রণ

খেলাটি মূলত রাজনীতির অনুকরণ। দুজন খেলোয়াড় ছাড়া সব খেলোয়াড়ই যে কোনো দলে দায়িত্ব ছাড়াই শুরু করে। এই খেলোয়াড়দের একজনকে টিম এ এবং অন্যকে টিম বি -তে নিয়োগ দেওয়া হয়েছে।

প্রত্যেক খেলোয়াড়ের জন্য দলের খেলোয়াড়দের সংখ্যাগরিষ্ঠ খেলোয়াড়দের সাথে সেই সময়ে প্রত্যেকের ধর্মান্তরিত হওয়ার খেলার উদ্দেশ্য।

উপরের চিত্রটি একটি সীমাবদ্ধ রাজ্য মেশিনকে চিত্রিত করে, যেমন ডিভাইসগুলির মধ্যে থাকা অবস্থার একটি স্পেসিফিকেশন এবং সেই রাজ্যের মধ্যে স্থানান্তর।

একটি রাষ্ট্রকে ডেটার বর্তমান সেট হিসাবে ভাবা যেতে পারে যা ডিভাইসটি চালু হওয়ার পর থেকে তার স্মৃতি বর্ণনা করে। সেই তথ্যের উপর ভিত্তি করে, ডিভাইসটি কিছু ক্রিয়া সম্পাদন করতে পারে বা ব্যবহারকারীর ইনপুটে ভিন্নভাবে প্রতিক্রিয়া দেখাতে পারে।

একটি রূপান্তর একটি যৌক্তিক শর্ত যা সত্য হলে, ডিভাইসটিকে তার অবস্থা পরিবর্তন করতে বাধ্য করে। একটি রাজ্য থেকে অন্য রাজ্যে স্থানান্তর হতে পারে। একটি রাজ্যের একাধিক পরিবর্তন হতে পারে।

উপরের চিত্রটি নিম্নলিখিত রাজ্যগুলিকে নির্দিষ্ট করে:

  • দায়িত্বহীন
  • A এর জন্য শুনুন
  • বি এর জন্য শুনুন
  • দল A
  • দল খ

গেম কোড চালানো একটি ডিভাইস এই পাঁচটি রাজ্যের যেকোন একটিতে হতে পারে, কিন্তু একবারে কেবল একটি এবং এই পাঁচটি।

আমি গাইড জুড়ে ধরে নেব যে আপনি মাইক্রোসফটের মেককোড সম্পাদক ব্যবহার করছেন, যা এখানে পাওয়া যাবে:

গেমটির সম্পূর্ণ বাস্তবায়ন এখানে পাওয়া যাবে:

makecode.microbit.org/_CvRMtheLbRR3 ("মাইক্রোবিট-ডেমো-ইউজার" প্রকল্পের নাম)

এবং মাস্টার ("রুট") নেটওয়ার্ক কন্ট্রোলারের বাস্তবায়ন এখানে পাওয়া যাবে:

makecode.microbit.org/_1kKE6TRc9TgE ("মাইক্রোবিট-ডেমো-রুট" প্রকল্পের নাম)

আমি আমার টিউটোরিয়াল জুড়ে এই উদাহরণগুলি উল্লেখ করব।

ধাপ 1: বড় ছবি নকশা বিবেচনা

আমরা কোন কোড লেখার আগে আমাদের চিন্তা করতে হবে যে আমরা আমাদের শেষ পণ্যটি কেমন দেখতে চাই। অন্য কথায়, আবেদনের প্রয়োজনীয়তা কি? আমাদের কোডটি ডিভাইসটি শেষ হয়ে গেলে তাকে কী করতে বলা উচিত? আমি মূল অ্যাপ্লিকেশনের কার্যকারিতা ছয়টি বিভাগে বিভক্ত করেছি, যার প্রত্যেকটি ভিন্ন ডিজাইনের দৃষ্টিকোণ থেকে বিবেচনা করা যেতে পারে।

  1. আমরা তার বর্তমান অবস্থার উপর ভিত্তি করে ডিভাইসের ক্রিয়াগুলি নিয়ন্ত্রণ করতে চাই
  2. আমরা চাই ডিভাইসটি ব্যবহারকারীর ইনপুটের প্রতি প্রতিক্রিয়া জানাবে
  3. আমরা 5 x 5 LED ডিসপ্লে ব্যবহার করে অ্যানিমেশন এবং গ্রাফিক্স প্রদর্শন করতে চাই
  4. ডিভাইস বুট হয়ে গেলে আমরা ডিভাইসের মেমরিতে ডেটা মান শুরু করতে চাই
  5. আমরা ডিভাইসের রেডিও ব্যবহার করে ওয়্যারলেস ডেটা প্রেরণ করতে চাই
  6. আমরা ডিভাইসের রেডিওতে ডেটা শুনতে এবং গ্রহণ করতে চাই এবং সেই অনুযায়ী প্রক্রিয়া করি

আমাকে প্রতিটি সম্পর্কে একটু বিস্তারিত জানার অনুমতি দিন।

1. আমরা তার বর্তমান অবস্থার উপর ভিত্তি করে ডিভাইসের ক্রিয়াগুলি নিয়ন্ত্রণ করতে চাই

অন্যান্য অন্যান্য প্রোগ্রামের মতো, কোড দ্বারা নির্দিষ্ট নির্দেশাবলীর বাস্তবায়ন এক সময়ে এক লাইন হয়। আমরা চাই যে আমাদের ডিভাইসটি তার অভ্যন্তরীণ অবস্থার উপর ভিত্তি করে কিছু নির্দেশনা বাস্তবায়ন করুক, যেমনটি এই টিউটোরিয়ালের উপরের চিত্রের মাধ্যমে চিত্রিত হয়েছে। আমরা কোডের প্রতিটি ব্লকের পরে শর্তের একটি সিরিজ লিখতে পারি যা ডিভাইসটি পরীক্ষা করা উচিত, কিন্তু এই পদ্ধতিটি খুব দ্রুত অগোছালো হয়ে উঠতে পারে, তাই আমরা পরিবর্তে একটি অসীম লুপ ব্যবহার করব যা কেবল একটি পরিবর্তনশীল পরীক্ষা করে, এবং সেই ভেরিয়েবলের উপর ভিত্তি করে, নির্দেশাবলীর একটি নির্দিষ্ট সেট চালায় বা কিছুই করে না। এই ভেরিয়েবলটি আমাদের ব্যবহারকারী অ্যাপ্লিকেশন এবং আমাদের মূল অ্যাপ্লিকেশন উভয় ক্ষেত্রে "_ স্টেট" প্রত্যয় দ্বারা চিহ্নিত করা হবে।

2. আমরা চাই ডিভাইসটি ব্যবহারকারীর ইনপুটের প্রতি প্রতিক্রিয়া জানাবে

ক্রমানুসারে সংঘটিত কোডের স্বাভাবিক বাস্তবায়ন সত্ত্বেও, অর্থাৎ, এক সময়ে একটি লাইন, আমাদের বোতাম টিপে প্রতিক্রিয়া জানাতে আমাদের ডিভাইসের প্রয়োজন হয় যখন প্রধান রাষ্ট্র লুপ নির্ধারণ করে যে ডিভাইসটি কোন মুহূর্তে কী করা উচিত। সেই উদ্দেশ্যে, ডিভাইসটির নিম্ন-স্তরের সফ্টওয়্যারে সংকেত পাঠানোর ক্ষমতা রয়েছে যা হার্ডওয়্যারের সাথে যোগাযোগ করে, যাকে ইভেন্ট বলা হয়। আমরা এমন কোড লিখতে পারি যা ডিভাইসটিকে কিছু করতে বলে যখন এটি একটি নির্দিষ্ট ধরনের ঘটনা সনাক্ত করে।

3. আমরা 5 x 5 LED ডিসপ্লে ব্যবহার করে অ্যানিমেশন এবং গ্রাফিক্স প্রদর্শন করতে চাই

এটি করার প্রক্রিয়াটি সহজ বলে মনে হচ্ছে, তবে ব্লকটি একটি চিত্র প্রদর্শন করে 400 ms এর একটি লুকানো বিলম্ব যোগ করে। যেহেতু আমরা চাই যে আমাদের ডিভাইসটি যতটা সম্ভব সামান্য বিলম্বের সাথে তার স্টেট লুপ চালানো অব্যাহত রাখুক, তাই আমাদের বিলম্ব কমানোর জন্য জাভাস্ক্রিপ্ট কোড সম্পাদনা করতে হবে।

4. ডিভাইস বুট হয়ে গেলে আমরা ডিভাইসের মেমরিতে ডেটা মান শুরু করতে চাই

আমাদের ডিভাইস কিছু করার আগে, অ্যাপ্লিকেশনটিকে তার ডেটা মেমরিতে লোড করতে হবে। এর মধ্যে রয়েছে কোড পঠনযোগ্যতার জন্য নামকরণ করা ধ্রুবক ভেরিয়েবল, ভেরিয়েবল যা ইমেজ ধারণ করে, যা একটি অ্যানিমেশনের অংশ হতে পারে এবং কাউন্টার ভেরিয়েবল যা সঠিকভাবে কাজ করার জন্য 0 থেকে শুরু করতে হবে। আমরা পরিবর্তনশীল নাম এবং তাদের নতুন নির্ধারিত মানগুলির একটি দীর্ঘ তালিকা দিয়ে শেষ করব। ব্যক্তিগত শৈলী পছন্দ হিসাবে, আমি ধ্রুবক মানগুলি নির্দেশ করব, যেমন ALL_CAPS ব্যবহার করে যে মানগুলি আমার কখনই পরিবর্তন করতে হবে না। আমি প্রধান ভেরিয়েবল আইডেন্টিফায়ারগুলিকে একটি ক্যাটাগরির নাম দিয়ে উপসর্গ করব যা একটি ধরণের বস্তু বা টাইপকে চিহ্নিত করে যা সনাক্তকারীর অধীনে পড়ে। এই কোডটি অনুসরণ করা সহজ করার চেষ্টা করা হচ্ছে। কোডটি বোঝার চেষ্টা করার সময় উদ্ভূত অস্পষ্টতার কারণে আমি কখনই "আইটেম" বা "এক্স" এর মতো পরিবর্তনশীল নাম ব্যবহার করব না।

5. আমরা ডিভাইসের রেডিও ব্যবহার করে ওয়্যারলেস ডেটা প্রেরণ করতে চাই

মেককোড ব্লক ভাষা ব্যবহার করার সময় এটি আসলে একটি মোটামুটি সহজ কাজ। আমরা কেবল বুট করার সময় সমস্ত ডিভাইসগুলিকে একই রেডিও গ্রুপে সেট করি এবং তারপর যখন আমরা একটি সংকেত পাঠাতে চাই, তখন আমরা আমাদের দেওয়া "রেডিও সেন্ড নম্বর" ব্লকে একটি একক নম্বর প্রেরণ করতে পারি। এটি গুরুত্বপূর্ণ যে প্রেরক এবং প্রাপক একই রেডিও গ্রুপে কাজ করছেন, কারণ যদি না হয়, তারা বিভিন্ন ফ্রিকোয়েন্সিগুলিতে প্রেরণ বা গ্রহণ করবে এবং যোগাযোগ ব্যর্থ হবে।

6. আমরা ডিভাইসের রেডিওতে তথ্য শুনতে এবং গ্রহণ করতে চাই এবং সেই অনুযায়ী প্রক্রিয়া করি

পূর্ববর্তী আইটেমের মতো একই বিবেচনায় রেখে, আমরা আগত ট্রান্সমিশনের জন্য একইভাবে শুনব যেমন আমরা ব্যবহারকারীর ইনপুট শুনব: একটি ইভেন্ট হ্যান্ডলারের সাথে। আমরা কোডের একটি ব্লক লিখব যা কোন ইনকামিং সিগন্যাল পরীক্ষা করবে এবং মূল স্টেট লুপকে বিরক্ত না করে কোন পদক্ষেপ নেওয়া হবে কিনা তা পরীক্ষা করবে।

উপরন্তু, আমাদের সংক্ষিপ্তভাবে সবচেয়ে সহজ রুট অ্যাপ্লিকেশনের নকশা বিবেচনা করা উচিত, একটি প্রোগ্রাম যা একটি ডিভাইসকে পুরো নেটওয়ার্ক নিয়ন্ত্রণ করতে দেবে। আমি এতে বেশি সময় ব্যয় করব না কারণ এটি উপরের নকশার চেয়ে অনেক সহজ এবং এর বেশিরভাগই কেবল পুনরাবৃত্তি। আমি রুট ডাইসের কার্যকারিতা তিনটি বিভাগে বিভক্ত করেছি।

  1. আমরা একটি সংকেত নির্বাচন করতে সক্ষম হতে চাই
  2. আমরা একটি সংকেত প্রেরণ করতে সক্ষম হতে চাই

-

1. আমরা একটি সংকেত নির্বাচন করতে সক্ষম হতে চাই

সম্ভাব্য সংকেতগুলির মাধ্যমে কেবল একটি বোতাম পুনরাবৃত্তি করে এটি করা যেতে পারে। যেহেতু মাত্র তিনটি আছে, এই পদ্ধতিটি যথেষ্ট। একই সময়ে, আমাদের একটি লুপ থাকতে পারে যা ক্রমাগত নির্বাচিত সংকেতটি পুনরায় প্রদর্শন করে, ব্যবহারকারীকে একটি বোতাম টিপতে এবং নির্বাচিত সংকেতটি LED ডিসপ্লেতে খুব সামান্য বিলম্বের সাথে উপস্থিত হতে দেয়।

2. আমরা একটি সংকেত প্রেরণ করতে সক্ষম হতে চাই

যেহেতু দুটি বোতাম রয়েছে, তাই আমরা একটিকে নির্বাচনের জন্য এবং অন্যটি নিশ্চিতকরণের জন্য মনোনীত করতে পারি। ব্যবহারকারীর অ্যাপ্লিকেশনের মতো, আমরা কেবল একটি নম্বর হিসাবে নেটওয়ার্কের মাধ্যমে সংকেত পাঠাই। অন্য কোন তথ্যের প্রয়োজন নেই।

আমি পরবর্তী বিভাগে সহজ সংকেত প্রোটোকল সম্পর্কে আরও কথা বলব।

ধাপ 2: সিগন্যাল প্রোটোকল: নেটওয়ার্ক যোগাযোগের জন্য একটি সহজ ভাষা

নিম্নলিখিত সংকেতগুলি সমস্ত সম্ভাব্য শব্দের সেট হিসাবে চিন্তা করা যেতে পারে যা ডিভাইসগুলি একে অপরের সাথে কথা বলার জন্য ব্যবহার করতে পারে। যেহেতু নেটওয়ার্কটি এত সহজ, তেমন কিছু বলার নেই, এবং তাই আমরা এই তিনটি সংকেতকে সাধারণ পূর্ণসংখ্যার মান দ্বারা উপস্থাপন করতে পারি।

0. রিসেট করুন

  • কোডে সনাক্তকারী: SIG-R
  • পূর্ণসংখ্যা মান: 0
  • উদ্দেশ্য: সীমার মধ্যে থাকা সমস্ত ডিভাইসকে বলুন যে তারা যা করছে তা ফেলে দিন এবং এমনভাবে কাজ করুন যেন সেগুলি বুট করা হয়েছে। যদি এই সংকেতটি নেটওয়ার্কের প্রতিটি ডিভাইসে পৌঁছায়, পুরো নেটওয়ার্কটি পুনরায় সেট করা হবে এবং ব্যবহারকারীরা একটি নতুন গেম শুরু করতে পারবে। এই সংকেত শুধুমাত্র একটি রুট ডিভাইস দ্বারা সম্প্রচারিত হতে পারে।

1. রূপান্তর A

  • কোডে শনাক্তকারী: SIG-A
  • পূর্ণসংখ্যা মান: 1
  • উদ্দেশ্য: LISTEN_A অবস্থায় থাকা যেকোনো ডিভাইসকে বলুন, একবার তারা রূপান্তর সংকেত পেলে, TEAM_A রাজ্যে স্যুইচ করতে।

2. রূপান্তর খ

  1. কোডে সনাক্তকারী: SIG-B
  2. পূর্ণসংখ্যা মান: 2
  3. উদ্দেশ্য: LISTEN_B অবস্থায় থাকা যেকোনো ডিভাইসকে বলুন, একবার তারা রূপান্তর সংকেত পেলে, TEAM_B রাজ্যে স্যুইচ করতে।

ধাপ 3: আমরা ডিভাইসের বর্তমান অবস্থার উপর ভিত্তি করে ক্রিয়াকলাপ নিয়ন্ত্রণ করতে চাই

আমরা তার বর্তমান অবস্থার উপর ভিত্তি করে ডিভাইসের ক্রিয়া নিয়ন্ত্রণ করতে চাই
আমরা তার বর্তমান অবস্থার উপর ভিত্তি করে ডিভাইসের ক্রিয়া নিয়ন্ত্রণ করতে চাই
আমরা তার বর্তমান অবস্থার উপর ভিত্তি করে ডিভাইসের ক্রিয়া নিয়ন্ত্রণ করতে চাই
আমরা তার বর্তমান অবস্থার উপর ভিত্তি করে ডিভাইসের ক্রিয়া নিয়ন্ত্রণ করতে চাই
আমরা তার বর্তমান অবস্থার উপর ভিত্তি করে ডিভাইসের ক্রিয়া নিয়ন্ত্রণ করতে চাই
আমরা তার বর্তমান অবস্থার উপর ভিত্তি করে ডিভাইসের ক্রিয়া নিয়ন্ত্রণ করতে চাই

পরিশেষে, আমরা কোড লেখা শুরু করতে পারি।

প্রথমে, মেক কোডে একটি নতুন প্রকল্প খুলুন

  • একটি নতুন ফাংশন তৈরি করুন। আমি খনি লুপ বলেছিলাম কারণ এটি অ্যাপ্লিকেশনটির মূল লুপ
  • একটি লুপ ব্লক যোগ করুন যা অনির্দিষ্টকালের জন্য পুনরাবৃত্তি করবে। আমি যখন (সত্য) ব্যবহার করেছি কারণ একটি আক্ষরিক সত্য কখনও মিথ্যা হবে না, তাই অ্যাপ্লিকেশনটির নিয়ন্ত্রণ প্রবাহ কখনও লুপ থেকে বেরিয়ে আসবে না
  • ডিভাইসটি তার পাঁচটি সম্ভাব্য অবস্থার মধ্যে আছে কিনা তা যাচাই করতে পর্যাপ্ত পরিমাণে যোগ করুন
  • বর্তমান ডিভাইসের অবস্থা ধরে রাখতে একটি পরিবর্তনশীল তৈরি করুন
  • সম্ভাব্য পাঁচটি রাজ্যের প্রত্যেকটির প্রতিনিধিত্ব করতে ভেরিয়েবল তৈরি করুন

    দ্রষ্টব্য: এটা ঠিক যে এই ভেরিয়েবলের কোন নির্ধারিত মান এখনো নেই। আমরা সেদিকে যাব। এই মুহুর্তে, এটি আরও গুরুত্বপূর্ণ যে আমরা পরিষ্কার, সহজ কোড পড়তে পারি

  • বর্তমান অবস্থাকে সম্ভাব্য রাজ্যের সাথে তুলনা করার জন্য if-else ব্লকের প্রতিটি শর্ত পরিবর্তন করুন
  • If-else ব্লকের নীচে, কিছু সংখ্যক মিলিসেকেন্ডের জন্য একটি বিরতি যোগ করুন এবং সেই সংখ্যাটি ধরে রাখার জন্য একটি পরিবর্তনশীল তৈরি করুন। আমরা এটি পরে শুরু করব। নিশ্চিত করুন যে ভেরিয়েবলের একটি বর্ণনামূলক নাম আছে, যেমন টিক বা হার্টবিট। কারণ এটি ডিভাইসের মূল লুপ, এই বিরতিটি ডিভাইসটি মূল লুপটি চালানোর গতি নির্ধারণ করবে, তাই এটি একটি অত্যন্ত গুরুত্বপূর্ণ মান এবং নাম ছাড়া একটি ম্যাজিক নম্বর হওয়া খুব গুরুত্বপূর্ণ।

দ্রষ্টব্য: তৃতীয় ছবিতে ধূসর ব্লক সম্পর্কে চিন্তা করবেন না। আমি পরে তাদের কাছে যাব।

ধাপ 4: আমরা ব্যবহারকারীর ইনপুটে প্রতিক্রিয়া জানাতে চাই

আমরা ব্যবহারকারীর ইনপুটে প্রতিক্রিয়া জানাতে চাই
আমরা ব্যবহারকারীর ইনপুটে প্রতিক্রিয়া জানাতে চাই
আমরা ব্যবহারকারীর ইনপুটে প্রতিক্রিয়া জানাতে চাই
আমরা ব্যবহারকারীর ইনপুটে প্রতিক্রিয়া জানাতে চাই

এখন, আমরা ডিভাইসটিকে বলতে চাই কিভাবে বোতাম টিপতে হয়। কারও প্রথম চিন্তা হতে পারে ইনপুট বিভাগে "যখন বোতাম চাপানো হয়" ব্লকগুলি ব্যবহার করা, তবে আমরা এর চেয়ে আরও দানাদার নিয়ন্ত্রণ চাই। আমরা উন্নত বিভাগের অধীনে কন্ট্রোল বিভাগ থেকে "অন ইভেন্ট ফর (এক্স) ভ্যালু (ওয়াই)" ব্লক ব্যবহার করব, কারণ আমরা এই টিউটোরিয়ালে উন্নত।

  • চারটি "অন ইভেন্ট অন…" ব্লক তৈরি করুন।

    • এর মধ্যে দুটি ইভেন্টের উৎস "MICROBIT_ID_BUTTON_A" পরীক্ষা করা উচিত
    • এর মধ্যে দুটি ইভেন্ট উৎস "MICROBIT_ID_BUTTON_B" পরীক্ষা করা উচিত
    • প্রতিটি বোতাম লক্ষ্য করে দুটি ইভেন্টের মধ্যে:

      • "MICROBIT_BUTTON_EVT_UP" টাইপের ইভেন্টটি পরীক্ষা করা উচিত
      • "MICROBIT_BUTTON_EVT_DOWN" টাইপের ইভেন্টটি পরীক্ষা করা উচিত
    • দ্রষ্টব্য: সমস্ত বড় অক্ষরে এই বিকল্পগুলি হল লেবেল যা নিম্ন-স্তরের মাইক্রো: বিট কোডে ব্যবহৃত হয়। তারা কেবল স্থানধারক যা পরবর্তীতে পূর্ণসংখ্যা দ্বারা প্রতিস্থাপিত হয় যখন কোডটি একটি এক্সিকিউটেবল বাইনারিতে সংকলিত হয়। কোন ইন্টিজার লাগাতে হবে তার চেয়ে মানুষের জন্য এই লেবেলগুলি ব্যবহার করা সহজ, যদিও উভয়ই একইভাবে কাজ করবে।
  • আমি শৈলীর বিষয় হিসেবে বেছে নিয়েছি, প্রতিটি "ইভেন্ট অন …" ব্লককে একটি ফাংশন কল করুন যা উত্থাপিত ইভেন্টের বর্ণনা দেয়। যদিও কঠোরভাবে প্রয়োজনীয় নয়, আমার মতে এটি পঠনযোগ্যতা উন্নত করে। যদি কেউ তা করতে চায়, তারা তাদের ইভেন্ট-হ্যান্ডলিং কোড "অন ইভেন্ট ফ্রম…" ব্লকের ভিতরে রাখতে পারে।

    দ্রষ্টব্য: কোডের ব্লক যা একটি ইভেন্টে ডিভাইসের প্রতিক্রিয়া পরিচালনা করে তাকে স্বজ্ঞাতভাবে "ইভেন্ট হ্যান্ডলার" বলা হয়

  • প্রতিটি ইভেন্ট হ্যান্ডলারে যোগ করুন, একই if-else স্ট্রাকচারটি প্রধান স্টেট লুপের স্ট্রাকচার হিসাবে ডিভাইসের অবস্থার উপর ভিত্তি করে নিয়ন্ত্রণ প্রবাহকে বিভক্ত করতে ব্যবহৃত হয়।
  • অ্যাসাইনমেন্ট ব্লক যুক্ত করুন যা আমাদের রাষ্ট্রীয় চিত্র দ্বারা নির্দিষ্ট করা ডিভাইসের সেই অবস্থাকে পরিবর্তন করে

    • আমরা জানি যে যখন ডিভাইসটি অনির্দিষ্ট অবস্থায় থাকে, তখন ডিভাইসটি LISTEN_A এ একটি রূপান্তর দ্বারা বোতাম A চাপলে এবং B L তে চাপলে LISTEN_B- এ স্থানান্তরিত হয়
    • আমরা এটাও জানি যে যখন ডিভাইসটি LISTEN_A বা LISTEN_B অবস্থায় থাকে, তখন ডিভাইসটি যথাক্রমে A বোতাম A এবং রিলিজ করা বোতামটির প্রতি প্রতিক্রিয়া দেখাতে হবে, যা UNASSIGNED অবস্থায় ফিরে আসে।
    • পরিশেষে, আমরা জানি যে যখন ডিভাইসটি TEAM_A বা TEAM_B অবস্থায় থাকে, তখন যন্ত্রটি SIG_A সম্প্রচার করে এবং SIG_B সম্প্রচারের মাধ্যমে যথাক্রমে A চাপানো এবং বোতাম B টিপে প্রতিক্রিয়া জানাতে হবে।

      এই সময়ে ব্রডকাস্টিং সিগন্যালের বিবরণ পূরণ করার প্রয়োজন নেই। আমরা পরে এটি পেতে হবে। যা গুরুত্বপূর্ণ তা হল যে আমরা এই ফাংশনগুলিকে সেই কোড ব্যবহার করার নির্দেশ দেই যা আমরা লিখব সেই ক্রিয়াকলাপের ব্লককে একটি নাম দিয়ে, যেমন BroadSignalSIG_A, যা সেই সময়ে কী করা উচিত তা বর্ণনা করে।

ধাপ 5: ডিভাইস বুট হয়ে গেলে আমরা ডিভাইস মেমরিতে ডেটা ভ্যালু শুরু করতে চাই

ডিভাইস বুট হয়ে গেলে আমরা ডিভাইস মেমরিতে ডেটা ভ্যালু শুরু করতে চাই
ডিভাইস বুট হয়ে গেলে আমরা ডিভাইস মেমরিতে ডেটা ভ্যালু শুরু করতে চাই
ডিভাইস বুট হয়ে গেলে আমরা ডিভাইস মেমরিতে ডেটা ভ্যালু শুরু করতে চাই
ডিভাইস বুট হয়ে গেলে আমরা ডিভাইস মেমরিতে ডেটা ভ্যালু শুরু করতে চাই
ডিভাইস বুট হয়ে গেলে আমরা ডিভাইস মেমরিতে ডেটা ভ্যালু শুরু করতে চাই
ডিভাইস বুট হয়ে গেলে আমরা ডিভাইস মেমরিতে ডেটা ভ্যালু শুরু করতে চাই

এই মুহুর্তে, আমরা অনেক ভেরিয়েবল (ডেটার জন্য নাম) ব্যবহার করেছি, কিন্তু আমরা আসলে সেই নামের মান নির্ধারণ করি নি। আমরা চাই যে ডিভাইসটি এই সমস্ত ভেরিয়েবলের মানগুলি বুট করার সময় মেমরিতে লোড করুক, তাই আমরা এই ভেরিয়েবলের সূচনা "অন স্টার্ট" ব্লকে রাখি।

এই মানগুলি আমাদের শুরু করতে হবে:

  • সিগন্যাল প্রটোকল অনুযায়ী সিগন্যাল ধ্রুবক। মানগুলি অবশ্যই হতে হবে:

    • SIG_R = 0
    • SIG_A = 1
    • SIG_B = 2
    • দ্রষ্টব্য: আমি এই ধ্রুবকগুলিকে "EnumSignals" দিয়ে উপসর্গ করেছি যাতে বোঝাতে পারি যে এই ভেরিয়েবলগুলি এমনভাবে আচরণ করতে হবে যেন সেগুলি একটি সংখ্যাসূচক প্রকারের অংশ যা সিগন্যাল বলে। এই ভেরিয়েবলগুলি অন্যান্য প্রোগ্রামিং ভাষায় এভাবে প্রয়োগ করা যেতে পারে। গণিত প্রকারের সংজ্ঞা এবং ব্যাখ্যা আমার টিউটোরিয়ালের আওতার বাইরে। কেউ চাইলে গুগল করতে পারে। এই উপসর্গগুলি কেবল শৈলীগত পছন্দ এবং প্রোগ্রামের সঠিক ক্রিয়াকলাপের জন্য মোটেও অপরিহার্য নয়।
  • রাষ্ট্রীয় ধ্রুবক, যা তাদের ইচ্ছামত হতে পারে যতক্ষণ তাদের একটি মান থাকে। আমি 0 থেকে আরোহী পূর্ণসংখ্যা ব্যবহার করার জন্য একটি স্টাইল পছন্দ করেছি, যেমন:

    • অনির্দিষ্ট = 0
    • LISTEN_A = 1
    • LISTEN_B = 2
    • টিম_এ = 3
    • TEAM_B = 4
    • দ্রষ্টব্য: আমি এই ভেরিয়েবলের জন্য উপসর্গগুলি সম্পর্কে একই স্টাইলের সিদ্ধান্ত নিয়েছি। উপরন্তু, আমি উল্লেখ করব যে এই অ্যাসাইনমেন্ট, মান এবং ক্রম সম্পর্কে সবকিছু সম্পূর্ণ নির্বিচারে। এটি এমনও নয় যে এই মানগুলি ডিভাইস থেকে ডিভাইসে সামঞ্জস্যপূর্ণ, কারণ এগুলি কেবল অভ্যন্তরীণভাবে ব্যবহৃত হয় এবং নেটওয়ার্কের মাধ্যমে যোগাযোগের জন্য নয়। সবগুলোই গুরুত্বপূর্ণ যে ভেরিয়েবলের একটি মান আছে এবং তারা একে অপরের সাথে তুলনা করে দেখতে পারে যে তারা সমতুল্য কিনা।
  • পঠনযোগ্যতার জন্য, একটি ধ্রুবক যাকে BOOT_STATE বলা হয় এবং এটিকে অনির্দিষ্ট করে সেট করা হয়। এটি এই বিষয়টিকে সত্য করে তোলে যে আমরা বুট অবস্থায় পুনরায় সেট করি, আরো স্বেচ্ছাচারী অবস্থার পরিবর্তে, যখন ডিভাইসটি একটি রিসেট সিগন্যাল পায় তখন আরো স্পষ্ট, যা আমরা পরে বাস্তবায়ন করব।
  • অ্যানিমেশন ধ্রুবক, নিম্নলিখিত ধাপে ব্যবহৃত অ্যানিমেশন তৈরি করতে যা ব্যবহারকারীর ইনপুটের মাধ্যমে অত্যন্ত কম বিলম্বের বাধা দেয়। আমরা এখন পর্যন্ত এগুলি ব্যবহার করিনি, তবে সেগুলি অবশ্যই নিম্নলিখিত বিভাগে ব্যাখ্যা এবং ব্যবহার করা হবে। এইগুলির কিছুগুলির অর্থ তাদের নামের কারণে স্বজ্ঞাত হওয়া উচিত।

    • TICKS_PER_FRAME_LOADING_ANIMATION = 50
    • MS_PER_DEVICE_TICK = 10
    • MS_PER_FRAME_BROADCAST_ANIMATION = 500
    • MICROSECONDS_PER_MILLISECOND = 1000
    • NUMBER_OF_FRAMES_IN_LOADING_ANIMATION = 4
  • অ্যানিমেশনের জন্য আরেকটি পরিবর্তনশীল, এবার একটি পাল্টা যা অবশ্যই ধ্রুবক নয়। বেশিরভাগ কাউন্টারের মতো, আমরা এটিকে 0 এ শুরু করি

    iTickLoadingAnimation = 0

  • অ্যানিমেশনের ফ্রেম ধরে রাখতে দুটি ভেরিয়েবলের সিরিজ তৈরি করুন। প্রথম, যাকে আমি "লোডিং অ্যানিমেশন" বলি, তার চারটি ছবি (যা আপনি শেষ ধ্রুবক সূচনা দ্বারা অনুমান করতে পারেন), এবং দ্বিতীয়টি, যাকে আমি "সম্প্রচার অ্যানিমেশন" বলি, যার তিনটি চিত্র থাকা উচিত আমি অ্যানিমেশনের ফ্রেমের সাথে মিল রেখে ভেরিয়েবলের নামকরণ করার পরামর্শ দিচ্ছি, যেমন ringAnimation0, ringAnimation1…

    আমার মতো একই চিত্রের মান তৈরি করুন বা আরও মূল এবং শীতল চিত্র তৈরি করুন।

  • সর্বশেষ কিন্তু অন্তত নয়, আমাদের অবশ্যই "রেডিও সেট গ্রুপ (X)" ব্লক ব্যবহার করে ডিভাইসের রেডিও গ্রুপ 0 তে সেট করতে হবে
  • Allyচ্ছিকভাবে, সিরিয়াল আউটপুটে "ইনিশিয়ালাইজেশন কমপ্লিট" বার্তাটি লিখুন যাতে ব্যবহারকারীকে বলা যায় যে সবকিছু সাঁতার কাটছে।
  • এখন আমরা ডিভাইস সেট আপ করা শেষ, আমরা আমাদের রাষ্ট্র লুপ ফাংশন কল করতে পারেন।

ধাপ 6: আমরা 5 X 5 LED ডিসপ্লে ব্যবহার করে অ্যানিমেশন এবং গ্রাফিক্স প্রদর্শন করতে চাই

আমরা 5 X 5 LED ডিসপ্লে ব্যবহার করে অ্যানিমেশন এবং গ্রাফিক্স প্রদর্শন করতে চাই
আমরা 5 X 5 LED ডিসপ্লে ব্যবহার করে অ্যানিমেশন এবং গ্রাফিক্স প্রদর্শন করতে চাই
আমরা 5 X 5 LED ডিসপ্লে ব্যবহার করে অ্যানিমেশন এবং গ্রাফিক্স প্রদর্শন করতে চাই
আমরা 5 X 5 LED ডিসপ্লে ব্যবহার করে অ্যানিমেশন এবং গ্রাফিক্স প্রদর্শন করতে চাই
আমরা 5 X 5 LED ডিসপ্লে ব্যবহার করে অ্যানিমেশন এবং গ্রাফিক্স প্রদর্শন করতে চাই
আমরা 5 X 5 LED ডিসপ্লে ব্যবহার করে অ্যানিমেশন এবং গ্রাফিক্স প্রদর্শন করতে চাই

এবং এখন সম্পূর্ণ ভিন্ন কিছু।

আমরা কয়েকটি অ্যানিমেশন এবং কয়েকটি অক্ষর প্রদর্শন করতে চাই, কিন্তু আমরা প্রধান রাজ্য লুপকে ব্যাহত করতে চাই না। দুর্ভাগ্যক্রমে, যে ব্লকগুলি চিত্র এবং পাঠ্য স্ট্রিংগুলি প্রদর্শন করে তাদের ডিফল্টরূপে 400 এমএস বিলম্ব হয়। কোডের জাভাস্ক্রিপ্ট উপস্থাপনা সম্পাদনা না করে এটি পরিবর্তন করার কোন উপায় নেই। সুতরাং, এই আমরা কি করব।

  • প্রতিটি ছবির জন্য একটি ফাংশন তৈরি করুন। এটি প্রতিবার জাভাস্ক্রিপ্ট সম্পাদনা করার পরিবর্তে ছবিটি প্রদর্শনের জন্য একটি একক ব্লক ব্যবহার করার অনুমতি দেবে। এই নির্দিষ্ট প্রোগ্রামে, কোন ছবি একাধিকবার ব্যবহার করা হয় না, কিন্তু আমি এখনও মনে করি এই শৈলী কোডটি পড়তে সহজ করে তোলে।
  • প্রতিটি নতুন ফাংশনে, একটি "ইমেজ দেখান (এক্স) অফসেট 0" ব্লকের সাথে সংশ্লিষ্ট ইমেজ ভেরিয়েবল নাম প্রতিস্থাপন (এক্স)
  • যোগ করুন, প্রধান রাষ্ট্র লুপে। "ব্লক দেখান" (X) ডিভাইসের বিভিন্ন অবস্থা নির্দেশ করতে প্রদর্শনের জন্য একটি অক্ষর যুক্ত করুন। এখানে আমি কি করেছি:

    • LISTEN_A: 'a'
    • LISTEN_B: 'b'
    • টিম_এ: 'এ'
    • TEAM_B: 'B'

      অনির্দিষ্ট রাষ্ট্রের জন্য, একটি ফাংশনে কল করুন যা লোডিং অ্যানিমেশন আপডেট করবে। আমরা নীচে এই ফাংশনের বিবরণ পূরণ করব।

  • জাভাস্ক্রিপ্ট মোডে স্যুইচ করুন।
  • X.showImage (0) এবং basic.showString (X) এ প্রতিটি কল খুঁজুন
  • X.showImage (0, 0) অথবা basic.showString (X, 0) এ প্রতিটি একক পরিবর্তন করুন

    • এই অতিরিক্ত যুক্তিটি যোগ করলে কর্মের পরে বিলম্ব 0 হবে। ডিফল্টরূপে, এটি বাদ দেওয়া হয়, এবং এই ব্লকগুলির প্রত্যেকটি কার্যকর করার পরে ডিভাইসটি 400 ms এর জন্য বিরতি দেবে।
    • এখন, আমাদের অ্যানিমেশন ব্লকগুলিতে আমাদের ছবিগুলি প্রদর্শন করার জন্য আমাদের কাছে একটি বিলম্ব-মুক্ত প্রক্রিয়া রয়েছে, যা আমরা এখন তৈরি করতে পারি

প্রথমত, আমরা তুলনামূলকভাবে সহজ ব্রডকাস্ট অ্যানিমেশন ফাংশন তৈরি করব। এটি আরও সহজ কারণ আমরা চাই না যে ব্যবহারকারী ফাংশনটি সম্পূর্ণ না হওয়া পর্যন্ত কিছু করতে পারবে, যাতে ব্রডকাস্ট ফাংশন স্প্যাম করা থেকে তাদের বিরত রাখা যায়। এটি সম্পন্ন করার জন্য, আমরা ফাংশনটি সম্পূর্ণ না হওয়া পর্যন্ত নিয়ন্ত্রণ প্রবাহকে কেবল ব্লকে সীমাবদ্ধ রাখতে পারি, যা আদর্শ আচরণ।

  • একটি ফাংশন তৈরি করুন যা সম্প্রচার অ্যানিমেশন প্রদর্শন করবে।
  • সেই ব্লকের ভিতরে, তিনটি ফাংশন কল যোগ করুন, অ্যানিমেশনের প্রতিটি ফ্রেমে একটি, যাতে সেগুলি প্রদর্শন করা উচিত
  • একটি ইমেজ-ডিসপ্লে ফাংশনে প্রতিটি কলের পরে "অপেক্ষা করুন (আমাদের) (এক্স)" ব্লক যোগ করুন।

    দ্রষ্টব্য: উন্নত নিয়ন্ত্রণ বিভাগ থেকে এই ব্লকটি "pause (ms)" এর চেয়েও বেশি এগিয়ে যাবে যাতে নির্দিষ্ট সময় শেষ না হওয়া পর্যন্ত এটি সম্পূর্ণরূপে প্রসেসরকে জমে যাবে। যখন বিরতি ব্লক ব্যবহার করা হয়, এটি সম্ভব যে ডিভাইসটি পর্দার পিছনে অন্যান্য কাজ সম্পাদন করবে। ওয়েট ব্লকের সাথে এটি অসম্ভব।

  • (X) কে (MS_PER_FRAME_BROADCAST_ANIMATION x MICROSECONDS_PER_MILLISECOND) দিয়ে প্রতিস্থাপন করুন
  • অ্যানিমেশন এখন সঠিকভাবে কাজ করা উচিত

দ্বিতীয়ত, আমরা লোডিং অ্যানিমেশন প্রদর্শনের জন্য প্রক্রিয়া তৈরি করব। এর পিছনে ধারণা হল একটি নির্দিষ্ট ব্যবধানে LED ডিসপ্লে আপডেট করা, যা আমরা MS_PER_DEVICE_TICK ভেরিয়েবলে সংজ্ঞায়িত করি। এই মান, ডিভাইসের টিক দৈর্ঘ্য, রাষ্ট্রের লুপের প্রতিটি পুনরাবৃত্তি সম্পন্ন করার পরে ডিভাইসটি থামানো মিলিসেকেন্ডের সংখ্যা। যেহেতু এই মানটি যথেষ্ট ছোট, আমরা ডিসপ্লে লুপের প্রতিটি পুনরাবৃত্তির সময় একবার ডিসপ্লে আপডেট করতে পারি এবং এটি ব্যবহারকারীর কাছে প্রদর্শিত হবে যে অ্যানিমেশনটি নির্বিঘ্নে অগ্রসর হচ্ছে, এবং যখন রাষ্ট্র পরিবর্তন হবে, তখন ব্যবহারকারীর ইনপুটের মধ্যে খুব কম বিলম্ব হবে প্রদর্শন আপডেট করা হচ্ছে টিক গণনা করে, যা আমরা iTickLoadingAnimation ভেরিয়েবল দিয়ে করি, আমরা অ্যানিমেশনের উপযুক্ত ফ্রেম প্রদর্শন করতে পারি।

  • একটি ফাংশন তৈরি করুন যা লোডিং অ্যানিমেশন আপডেট করবে
  • টিক কাউন্টার তার সর্বোচ্চ মূল্যে পৌঁছেছে কিনা তা পরীক্ষা করার জন্য একটি শর্ত যুক্ত করুন। এই শর্তটি সত্য হবে যদি টিক কাউন্টারের মান প্রতিটি ফ্রেম প্রদর্শনের জন্য লোডিং অ্যানিমেশনের ফ্রেমের সংখ্যার চেয়ে বেশি হয়

    যদি শর্তটি সত্য হয়, iTickLoadingAnimation কে 0 রিসেট করুন

  • If-else অবস্থার একটি ব্লক যোগ করুন। এগুলি অ্যানিমেশনের কোন ফ্রেম প্রদর্শন করতে হবে তা নির্ধারণ করবে।

    অ্যানিমেশনের প্রতিটি ফ্রেমের জন্য, যদি টিক কাউন্টারটি প্রতিটি অ্যানিমেশনের টিকের সংখ্যার চেয়ে কম হয়, অ্যানিমেশনের ফ্রেম নম্বর দ্বারা গুণিত হয় (1 থেকে শুরু), তাহলে সেই ফ্রেমটি প্রদর্শন করুন, অন্যথায় পরের ফ্রেমটি এক কিনা তা পরীক্ষা করুন প্রদর্শিত হবে

  • ব্লকের নীচে, iTickLoadingAnimation বৃদ্ধি করুন
  • অ্যানিমেশন এখন সঠিকভাবে কাজ করা উচিত

দ্রষ্টব্য: আমার উদাহরণে উপস্থিত সমস্ত ধূসর ব্লক তৈরি হয় যখন কেউ একটি ব্লকের জাভাস্ক্রিপ্ট উপস্থাপনা সম্পাদনা করে। এর সহজ মানে হল যে ব্লকটি জাভাস্ক্রিপ্ট কোডের প্রতিনিধিত্ব করে যা স্ট্যান্ডার্ড ব্লকের সেট ব্যবহার করে উপস্থাপন করা যায় না এবং পাঠ্য আকারে সম্পাদনা করা আবশ্যক।

ধাপ 7: আমরা ডিভাইসের রেডিও ব্যবহার করে ওয়্যারলেস ডেটা প্রেরণ করতে চাই

আমরা ডিভাইসের রেডিও ব্যবহার করে ওয়্যারলেস ডেটা প্রেরণ করতে চাই
আমরা ডিভাইসের রেডিও ব্যবহার করে ওয়্যারলেস ডেটা প্রেরণ করতে চাই

এই ধাপটি আগের তুলনায় অনেক ছোট। আসলে, এটি সম্ভবত এই পুরো টিউটোরিয়ালের সবচেয়ে ছোট পদক্ষেপ।

স্মরণ করুন যে যখন আমরা ব্যবহারকারীর ইনপুটের জন্য ডিভাইসের প্রতিক্রিয়া প্রোগ্রাম করেছি, তখন স্ক্রিনশটে আমার দুটি ব্লক ছিল যা সেই বিভাগে ব্যাখ্যা করা হয়নি। এগুলো ছিল ফাংশনের কল যা রেডিওর মাধ্যমে সংকেত পাঠায়। আরো নির্দিষ্টভাবে:

  • বোতাম এ একটি চাপা:

    • ডিভাইসটি যদি TEAM_A অবস্থায় থাকে:

      সম্প্রচার সংকেত SIG_A

  • B বোতাম টিপে:

    • ডিভাইসটি যদি TEAM_B অবস্থায় থাকে

      সম্প্রচার সংকেত SIG_B

এই ফাংশনগুলি তৈরি করুন যদি তারা ইতিমধ্যে বিদ্যমান না থাকে।

প্রতিটি ফাংশনে:

  • সম্প্রচার অ্যানিমেশন ফাংশন কল করুন। এটি সম্পূর্ণ না হওয়া পর্যন্ত অন্য কিছু ঘটতে বাধা দেবে, যা MS_PER_FRAME_BROADCAST_ANIMATION * 3 = 1.5 সেকেন্ডে থাকবে। ধ্রুবকটি তিন দিয়ে গুণ করা হয় কারণ অ্যানিমেশনে তিনটি ফ্রেম থাকে। এটি নির্বিচারে এবং নান্দনিক আপগ্রেড যথেষ্ট ভাল হলে আরো যোগ করা যেতে পারে। এই অ্যানিমেশনের দ্বিতীয় উদ্দেশ্য হল একটি ব্যবহারকারীকে ব্রডকাস্ট ফাংশন স্প্যাম করা থেকে বিরত রাখা।
  • একটি "রেডিও সেন্ড নম্বর (X)" ব্লক যোগ করুন, যেখানে ফাংশনের নামে উল্লেখিত সংকেত ধ্রুবক

রেডিওতে সম্প্রচার করার জন্য এটাই দরকার।

ধাপ 8: আমরা ডিভাইসের রেডিওতে তথ্য শুনতে এবং গ্রহণ করতে চাই এবং সে অনুযায়ী প্রক্রিয়া করি

আমরা ডিভাইসের রেডিওতে তথ্য শুনতে এবং গ্রহণ করতে চাই এবং সে অনুযায়ী প্রক্রিয়া করি
আমরা ডিভাইসের রেডিওতে তথ্য শুনতে এবং গ্রহণ করতে চাই এবং সে অনুযায়ী প্রক্রিয়া করি
আমরা ডিভাইসের রেডিওতে তথ্য শুনতে এবং গ্রহণ করতে চাই এবং সে অনুযায়ী প্রক্রিয়া করি
আমরা ডিভাইসের রেডিওতে তথ্য শুনতে এবং গ্রহণ করতে চাই এবং সে অনুযায়ী প্রক্রিয়া করি

এটি মূল অ্যাপ্লিকেশন তৈরির চূড়ান্ত পদক্ষেপ।

আমরা ডিভাইসটিকে বলব কিভাবে ইনকামিং রেডিও সিগন্যাল প্রক্রিয়া করা যায়। প্রথমত, আমাদের ডিভাইসটি প্রাপ্ত সংকেতের নাম দিতে চলেছে। তারপরে, সেই সংকেতের মূল্যের উপর ভিত্তি করে, এটি কোন পদক্ষেপ নেবে তা নির্ধারণ করবে, যদি থাকে।

প্রথম:

  1. "অন রেডিও রিসিভড (এক্স)" ব্লক দিয়ে শুরু হওয়া কোডের একটি ব্লক তৈরি করুন।
  2. Allyচ্ছিকভাবে, আরো বর্ণনামূলক নামের সাথে অন্য একটি পরিবর্তনশীলকে সেই প্রাপ্ত মানটি বরাদ্দ করুন।
  3. একটি ফাংশন কল করুন যা সংকেত প্রক্রিয়া করবে

দ্বিতীয়, সিগন্যাল প্রসেসিং ফাংশনে:

  1. If-else স্টেটমেন্টের একটি ব্লক তৈরি করুন যা সিগন্যালের মানের উপর ভিত্তি করে শাখা নিয়ন্ত্রণ প্রবাহ।
  2. যদি সিগন্যাল SIG_R হতো

    ডিভাইসের অবস্থা BOOT_STATE এ সেট করুন (এজন্য আমরা এই ধ্রুবকটি আগে তৈরি করেছি)

  3. যদি সিগন্যাল SIG_A হয় এবং বর্তমান অবস্থা LISTEN_A হয়

    ডিভাইসের অবস্থা TEAM_A এ সেট করুন

  4. যদি সিগন্যালটি SIG_B হয় এবং যদি বর্তমান অবস্থা LISTEN_B হয়

    ডিভাইসের অবস্থা TEAM_B এ সেট করুন

এটাই. আবেদন শেষ।

ধাপ 9: রুট ডিভাইস: আমরা একটি সংকেত নির্বাচন করতে সক্ষম হতে চাই

রুট ডিভাইস: আমরা একটি সংকেত নির্বাচন করতে সক্ষম হতে চাই
রুট ডিভাইস: আমরা একটি সংকেত নির্বাচন করতে সক্ষম হতে চাই

এখন, আমরা একটি "রুট" ডিভাইসের জন্য একটি সহজ অ্যাপ্লিকেশন লিখব, অর্থাৎ, একটি ডিভাইস যা নেটওয়ার্ককে নিয়ন্ত্রণ করবে।

এই ডিভাইসের দুটি ফাংশন করতে হবে:

  • আমরা ব্যবহারকারীকে আমাদের একটি সিগন্যাল নির্বাচন করার অনুমতি দিতে চাই
  • আমরা ব্যবহারকারীকে সংকেত সম্প্রচারের অনুমতি দিতে চাই

কারণ এই অ্যাপ্লিকেশনের স্পেসিফিকেশন পূর্ববর্তী একটি উপসেট, আমি একটি সংক্ষিপ্ত বিবরণ দেব কিন্তু আমি যতটা আগে ছিলাম ততটা বিশদে যাব না। উপরের ছবিতে এই অ্যাপ্লিকেশনের জন্য সম্পূর্ণ কোড রয়েছে।

ব্যবহারকারীকে একটি সংকেত নির্বাচন করার অনুমতি দিতে:

  1. "শুরুতে" ব্লকে 5 টি ভেরিয়েবল শুরু করুন:

    1. তিনটি সংকেত (0, 1, 2)
    2. সংকেত সংখ্যা (3)
    3. বর্তমানে নির্বাচিত সংকেত ধরে রাখার জন্য একটি পরিবর্তনশীল (প্রাথমিকভাবে প্রথম সংকেতে সেট করা, 0)
  2. A বোতাম টিপুন:

    1. নির্বাচিত সংকেত বাড়ান
    2. নির্বাচিত সংকেত সংকেত সংখ্যার চেয়ে বড় বা সমান কিনা তা পরীক্ষা করুন

      যদি তাই হয়, নির্বাচিত সংকেত 0 তে সেট করুন

  3. স্টার্ট ব্লকের পরে, একটি "চিরতরে" লুপ চালান যা কোনও বিলম্ব ছাড়াই বর্তমান নির্বাচিত সংকেত মান প্রদর্শন করে

ব্যবহারকারীকে একটি সংকেত সম্প্রচারের অনুমতি দিতে

  1. "অন স্টার্ট" ব্লকে রেডিও গ্রুপকে 0 এ সেট করুন
  2. বি বোতাম টিপুন:

    "রেডিও সেন্ড নম্বর (X)" ব্লক ব্যবহার করে নির্বাচিত সংকেত সম্প্রচার করুন

এটাই. রুট নোড অ্যাপ্লিকেশন অত্যন্ত সহজ।

ধাপ 10: আমরা শেষ

আমরা শেষ
আমরা শেষ

উপরে অ্যাপ্লিকেশন চালানো ডিভাইসগুলির একটি ছবি রয়েছে। ডানদিকের দুটি প্রধান "ব্যবহারকারী" অ্যাপ্লিকেশনটি চালাচ্ছে, এবং বামদিকে একটি "মূল" অ্যাপ্লিকেশনটি চালাচ্ছে।

আমি সিএস কানেকশন 2018 এ এই গেমটি প্রদর্শন করেছি, কম্পিউটার বিজ্ঞান শিক্ষা সম্পর্কে মধ্যম ও উচ্চ বিদ্যালয়ের শিক্ষকদের জন্য সপ্তাহব্যাপী গ্রীষ্মকালীন সম্মেলন। আমি শিক্ষকদের প্রায় 40 টি ডিভাইস দিয়েছি এবং নিয়মগুলি ব্যাখ্যা করেছি। বেশিরভাগই গেমটিকে বিনোদনমূলক বলে মনে করেন এবং অনেকে কীভাবে এটি খেলবেন তা না বোঝা পর্যন্ত এটি বিভ্রান্তিকর বলে মনে করেন। বিক্ষোভটি সংক্ষিপ্ত ছিল, কিন্তু আমরা দেখেছি খেলাটি মোটামুটি বৈচিত্র্যময় ভিড়ের মধ্যে উপভোগ্য।

সিএস সংযোগ 2018 সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে।

প্রস্তাবিত: