সুচিপত্র:

লেগো মিনি মেমরি গেম: 5 টি ধাপ (ছবি সহ)
লেগো মিনি মেমরি গেম: 5 টি ধাপ (ছবি সহ)

ভিডিও: লেগো মিনি মেমরি গেম: 5 টি ধাপ (ছবি সহ)

ভিডিও: লেগো মিনি মেমরি গেম: 5 টি ধাপ (ছবি সহ)
ভিডিও: Play Store দিয়ে মেমোরি খালি করুন | phone storage কখনই full হবে না | phone storage full problem 2024, জুলাই
Anonim
Image
Image
লেগো মিনি মেমরি গেম
লেগো মিনি মেমরি গেম

এক বছর বা তারও আগে, আমি লেগো মিনি কুপারে একগুচ্ছ এলইডি ইনস্টল করার বিষয়ে একটি নির্দেশনা লিখেছিলাম। নতুনত্ব, যেমন এটি ছিল, LEDs একটি স্মার্টফোন (বা যে কোনো ওয়েব ব্রাউজারের মাধ্যমে) দ্বারা নিয়ন্ত্রিত হতে পারে।

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

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

আমার কয়েকটি ধারণা ছিল:

  • বরং ক্লঙ্কি ইউজার ইন্টারফেস উন্নত করুন
  • একটি শিং যোগ করুন!
  • "অটো লাইট" বৈশিষ্ট্য উন্নত করুন; এবং, সবচেয়ে গুরুত্বপূর্ণ
  • একটি গেম ফাংশন যোগ করুন (এমনকি আমি স্বীকার করেছি যে আপনার ফোনের সাথে মিনি লাইট চালু এবং বন্ধ করার অভিনবতা শীঘ্রই বা পরে হ্রাস পাবে)

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

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

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

কিন্তু প্রথমে, আমার হার্ডওয়্যারে কিছু ছোটখাট পরিবর্তন করা দরকার।

ধাপ 1: উপাদান, সরঞ্জাম এবং সম্পদ

উপাদান, সরঞ্জাম এবং সম্পদ
উপাদান, সরঞ্জাম এবং সম্পদ

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

সফটওয়্যার নিয়ে আলোচনা করার সময় যেমন স্পষ্ট হয়ে যাবে, গেমের জন্য লেগো মিনি ব্যবহার করার কোন বাস্তব প্রয়োজন নেই। আপনি অন্য লেগো কিট ব্যবহার করতে পারেন, অথবা প্রকৃতপক্ষে একটি রুটিবোর্ডে এলইডিগুলির একটি গুচ্ছ যে কোন ESP8266 ডেভেলপমেন্ট বোর্ডের সাথে যুক্ত। কিছু রিলে দিয়ে, আপনি এমনকি আপনার ঘরের রুমের আলো ব্যবহার করতে পারেন। বাচ্চারা, যদিও প্রথমে আপনার বাবা -মাকে জিজ্ঞাসা করুন।

একইভাবে, মূল প্রকল্পের জন্য তালিকাভুক্তদের বাইরে কোন অতিরিক্ত সরঞ্জাম বা সম্পদের প্রয়োজন নেই।

আপনি যদি মুষ্টিমেয় লোকের মধ্যে থাকেন যারা মূল প্রকল্পের বিবরণ পড়েন, আপনি জানতে পারবেন যে লেগো মিনি মূলত আমার বড় মেয়েকে উপহার হিসাবে কেনা হয়েছিল, যার প্রায় একইরকম "বাস্তব" মিনি, বা প্রায় একই রকম এটি দেওয়া যেতে পারে এটি একটি নতুন মিনি, "ক্লাসিক" নয়। কোনও অর্থবহ অতিরিক্ত উপাদানগুলির অভাব এই নতুন প্রকল্পটিকে আরও আকর্ষণীয় করে তুলেছে কারণ এটি আমাকে নতুন অর্থ উপহার হিসেবে লেগো মিনি ২.০ কার্যকরভাবে পুনরায় উপহার দিতে সক্ষম করবে। জিনিয়াস!

পদক্ষেপ 2: হার্ডওয়্যার পরিবর্তন

হার্ডওয়্যার পরিবর্তন
হার্ডওয়্যার পরিবর্তন

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

উপরের সার্কিট ডায়াগ্রামটি মূল প্রকল্প থেকে। এই প্রকল্পের জন্য একমাত্র পরিবর্তন প্রয়োজন আরজিবি এলইডি অপসারণ এবং তিনটি মুক্ত-আপ পিনগুলি নিম্নরূপ:

  • বুজার নিয়ন্ত্রণ সংকেতের জন্য D1 (যা 5VDC পাওয়ার সাপ্লাইতে সরাসরি তারযুক্ত)
  • একটি সাদা অভ্যন্তর LED জন্য D7
  • D8 ফ্ল্যাশিং রঙিন LEDS এর মধ্যে একটি, যাকে আমি "ডিস্কো" লাইট বলে ডাব করেছি

বুজার নিজেই ইঞ্জিন বগির নীচে সুন্দরভাবে দূরে চলে যায় তাই নোডএমসিইউতে তারগুলি চালানো একটি স্ন্যাপ ছিল।

ধাপ 3: GUI আপডেট করা

GUI আপডেট করা হচ্ছে
GUI আপডেট করা হচ্ছে
GUI আপডেট করা হচ্ছে
GUI আপডেট করা হচ্ছে
GUI আপডেট করা হচ্ছে
GUI আপডেট করা হচ্ছে

GUI আপডেট করার প্রথম ধাপ ছিল চারটি আলাদা ওয়েব পেজ তৈরি করা:

  • একটি "স্প্ল্যাশ স্ক্রিন" যা আপনার স্মার্টফোনে একটি কাস্টম আইকনের মাধ্যমে চালু হয় এবং অন্যান্য পৃষ্ঠাগুলিতে লিঙ্ক করে
  • "কন্ট্রোলস" পৃষ্ঠা যা ভালভাবে লাইট নিয়ন্ত্রণ করে (এবং এখন, অবশ্যই, হর্ন)
  • "গেম" পৃষ্ঠা
  • একটি সেট-আপ পৃষ্ঠা যাতে কনফিগারেশন অপশন থাকে যেমন:

    • শব্দ চালু এবং বন্ধ করা
    • টাইম জোন সেট করা (মিনি ইন্টারনেট থেকে সময় পায় যাতে এটি যথাযথ সময়ের সাথে তার লাইট জ্বালাতে পারে)
    • যখন "অটো লাইট" অ্যাম্বিয়েন্ট লাইট লেভেলের উপর ভিত্তি করে হেডলাইট চালু এবং বন্ধ করবে তখন সামঞ্জস্য করা
    • উচ্চ স্কোর এবং উচ্চ স্কোরারের নাম পুনরায় সেট করা (EEPROM- এ সংরক্ষিত)

এইভাবে ফাংশনগুলি আলাদা করা অনেক বেশি অ্যাপ-এর মতো অভিজ্ঞতা তৈরি করে। একাধিক পৃষ্ঠা পরিবেশন করার জন্য NodeMCU পাওয়া এই প্রকল্পের জন্য একটি চ্যালেঞ্জ ছিল। কয়েকটি ভিন্ন পদ্ধতির চেষ্টা করার পরে আমি প্রধান Arduino স্কেচের 232 থেকে 236 লাইনে আপনি যে কোডটি দেখতে পাচ্ছি তা জুড়ে এসেছি। এটি দুর্দান্ত কাজ করে - কেবল আপনার সূচী ফাইল তৈরি করুন তারপর পরবর্তী পৃষ্ঠাগুলি পৃষ্ঠা 1, পৃষ্ঠা 2 ইত্যাদি নাম দিন। এই আকার

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

ধাপ 4: গেম কোড

গেম কোড
গেম কোড

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

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

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

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

উচ্চ স্কোর EEPROM (অথবা ESP8266 বিশ্বে EEPROM- এর জন্য যা পাস হয়) এবং যদি কোনো খেলোয়াড় নতুন উচ্চ স্কোর পায় তবে একটি পপ-আপ বক্স তাদের পছন্দের নাম লিখতে দেয়, যা EEPROM- এও সংরক্ষিত থাকে। এই মানগুলি সেট-আপ পৃষ্ঠার মাধ্যমে পুনরায় সেট করা যেতে পারে (আমি নিশ্চিত যে এর বৈধ কারণ থাকতে পারে)।

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

ধাপ 5: কোড অব বাকি

কোড অব বাকি
কোড অব বাকি

হ্যাকস্টার প্রজেক্ট কোডের সাথে তুলনা করে, আমার Arduino স্কেচটি বিশাল দেখায়, এমনকি ডাটা ফাইলগুলিতে সমস্ত HTML, CSS এবং জাভাস্ক্রিপ্ট ছাড়াও। কিন্তু স্কেচের সিংহভাগই সার্ভার তৈরি ও পরিচালনা, এনটিপি সময় পাওয়া, এমডিএনএস, ওভার-দ্য-এয়ার আপডেট করা, ওয়াইফাই ম্যানেজমেন্ট, এসপিআইএফএফএস ফাইল ম্যানেজমেন্ট এবং এর মতো মৌলিক ক্রিয়াকলাপ সম্পর্কিত একটি ফাংশন।

এইচটিএমএল ফাইলে জাভাস্ক্রিপ্ট মূলত ওয়েবসাইটসকেট বার্তাগুলি (প্রাপ্ত এবং প্রেরিত) পরিচালনা এবং জিইউআই -এর ইন্টারঅ্যাক্টিভিটি বাড়ানোর জন্য।

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

ওহ, প্রায় ভুলে গেছি। কোডটি এখানে GitHub এ আছে। ডাউনলোড করার পরে, পুরো প্যাকেজটি একটি নতুন ফোল্ডারে রাখুন, আরডুইনো স্কেচ আপলোড করুন, তারপরে ডেটা ফোল্ডারের বিষয়বস্তু এসপিআইএফএফএস -এ।

প্রস্তাবিত: