# একটি গেম তৈরি করুন: ডিজাইন প্যাটার্ন প্রয়োগ করুন ## অ্যাসাইনমেন্টের সংক্ষিপ্ত বিবরণ ডিজাইন প্যাটার্ন সম্পর্কে আপনার নতুন জ্ঞান ব্যবহার করে একটি সহজ গেম প্রোটোটাইপ তৈরি করুন! এই অ্যাসাইনমেন্টটি আপনাকে আর্কিটেকচারাল প্যাটার্ন (ইনহেরিটেন্স বা কম্পোজিশন) এবং আপনি পাঠে শিখেছেন এমন pub/sub যোগাযোগ সিস্টেম অনুশীলন করতে সাহায্য করবে। ## নির্দেশনা এই পাঠের ডিজাইন প্যাটার্নগুলি প্রদর্শন করে একটি সহজ গেম তৈরি করুন। আপনার গেমটি কার্যকরী হওয়া উচিত তবে জটিল গ্রাফিক্সের প্রয়োজন নেই \u2013 মূলত আর্কিটেকচার এবং যোগাযোগ প্যাটার্নগুলির উপর ফোকাস করুন। ### প্রয়োজনীয়তা **আপনার আর্কিটেকচার প্যাটার্ন নির্বাচন করুন:** - **অপশন A**: ক্লাস-ভিত্তিক ইনহেরিটেন্স ব্যবহার করুন (যেমন `GameObject` → `Movable` → `Hero` উদাহরণ) - **অপশন B**: কম্পোজিশন ব্যবহার করুন (যেমন মিক্সড বিহেভিয়ার সহ ফ্যাক্টরি ফাংশন পদ্ধতি) **যোগাযোগ বাস্তবায়ন করুন:** - **অন্তর্ভুক্ত করুন** একটি `EventEmitter` ক্লাস pub/sub মেসেজিংয়ের জন্য - **সেট আপ করুন** অন্তত ২-৩টি ভিন্ন মেসেজ টাইপ (যেমন `PLAYER_MOVE`, `ENEMY_SPAWN`, `SCORE_UPDATE`) - **সংযুক্ত করুন** ব্যবহারকারীর ইনপুট (কীবোর্ড/মাউস) গেম ইভেন্টগুলির সাথে ইভেন্ট সিস্টেমের মাধ্যমে **গেম উপাদান অন্তর্ভুক্ত করুন:** - অন্তত একটি প্লেয়ার-নিয়ন্ত্রিত চরিত্র - অন্তত একটি অন্য গেম অবজেক্ট (শত্রু, সংগ্রহযোগ্য বা পরিবেশগত উপাদান) - অবজেক্টগুলির মধ্যে মৌলিক ইন্টারঅ্যাকশন (কোলিশন, সংগ্রহ বা যোগাযোগ) ### প্রস্তাবিত গেম আইডিয়া **বিবেচনার জন্য সহজ গেম:** - **স্নেক গেম** \u2013 স্নেকের অংশগুলি মাথার অনুসরণ করে, খাবার এলোমেলোভাবে স্পন হয় - **পং ভেরিয়েশন** \u2013 প্যাডেল ইনপুট অনুযায়ী সাড়া দেয়, বল দেয়ালে বাউন্স করে - **সংগ্রাহক গেম** \u2013 প্লেয়ার আইটেম সংগ্রহ করতে এবং বাধা এড়াতে চারপাশে চলে - **টাওয়ার ডিফেন্স বেসিকস** \u2013 টাওয়ারগুলি চলমান শত্রুদের শনাক্ত করে এবং গুলি করে ### কোড স্ট্রাকচার নির্দেশিকা ```javascript // Example starting structure const Messages = { // Define your game messages here }; class EventEmitter { // Your event system implementation } // Choose either class-based OR composition approach // Class-based example: class GameObject { /* base properties */ } class Player extends GameObject { /* player-specific behavior */ } // OR Composition example: const gameObject = { /* base properties */ }; const movable = { /* movement behavior */ }; function createPlayer() { /* combine behaviors */ } ``` ### আপনার বাস্তবায়ন পরীক্ষা করুন **আপনার কোড কাজ করছে কিনা যাচাই করুন:** - **পরীক্ষা করুন** যে ইভেন্ট ট্রিগার হলে অবজেক্টগুলি সরছে বা পরিবর্তন হচ্ছে - **নিশ্চিত করুন** যে একাধিক অবজেক্ট একই ইভেন্টে সাড়া দিতে পারে - **পরীক্ষা করুন** যে নতুন বিহেভিয়ার যোগ করা সম্ভব হচ্ছে বিদ্যমান কোড পরিবর্তন না করেই - **নিশ্চিত করুন** যে কীবোর্ড/মাউস ইনপুট সঠিকভাবে গেম ইভেন্ট ট্রিগার করছে ## জমা দেওয়ার নির্দেশিকা **আপনার জমা দেওয়ার মধ্যে অন্তর্ভুক্ত করা উচিত:** 1. **জাভাস্ক্রিপ্ট ফাইল(গুলি)** আপনার গেম বাস্তবায়নের সাথে 2. **এইচটিএমএল ফাইল** গেম চালানোর এবং পরীক্ষা করার জন্য (সহজ হতে পারে) 3. **মন্তব্য** আপনি কোন প্যাটার্নটি বেছে নিয়েছেন এবং কেন তা ব্যাখ্যা করে 4. **সংক্ষিপ্ত ডকুমেন্টেশন** আপনার মেসেজ টাইপ এবং সেগুলি কী করে ## মূল্যায়ন | মানদণ্ড | চমৎকার (৩ পয়েন্ট) | পর্যাপ্ত (২ পয়েন্ট) | উন্নতির প্রয়োজন (১ পয়েন্ট) | |----------|---------------------|---------------------|------------------------------| | **আর্কিটেকচার প্যাটার্ন** | সঠিকভাবে ইনহেরিটেন্স অথবা কম্পোজিশন বাস্তবায়ন করে স্পষ্ট ক্লাস/অবজেক্ট হায়ারার্কি সহ | নির্বাচিত প্যাটার্ন ব্যবহার করে, তবে কিছু ছোটখাটো সমস্যা বা অসঙ্গতি রয়েছে | প্যাটার্ন ব্যবহার করার চেষ্টা করেছে কিন্তু বাস্তবায়নে উল্লেখযোগ্য সমস্যা রয়েছে | | **Pub/Sub বাস্তবায়ন** | EventEmitter সঠিকভাবে কাজ করে, একাধিক মেসেজ টাইপ এবং সঠিক ইভেন্ট প্রবাহ সহ | মৌলিক pub/sub সিস্টেম কাজ করে, কিছু ইভেন্ট হ্যান্ডলিং সহ | ইভেন্ট সিস্টেম উপস্থিত কিন্তু নির্ভরযোগ্যভাবে কাজ করে না | | **গেম কার্যকারিতা** | তিন বা তার বেশি ইন্টারঅ্যাকটিভ উপাদান যা ইভেন্টের মাধ্যমে যোগাযোগ করে | দুটি ইন্টারঅ্যাকটিভ উপাদান মৌলিক ইভেন্ট যোগাযোগ সহ | একটি উপাদান ইভেন্টে সাড়া দেয় বা মৌলিক ইন্টারঅ্যাকশন | | **কোডের গুণমান** | পরিষ্কার, ভালোভাবে মন্তব্য করা কোড, যৌক্তিক সংগঠন এবং আধুনিক জাভাস্ক্রিপ্ট | সাধারণত ভালোভাবে সংগঠিত কোড, পর্যাপ্ত মন্তব্য সহ | কোড কাজ করে কিন্তু সংগঠন বা স্পষ্ট মন্তব্যের অভাব রয়েছে | **অতিরিক্ত পয়েন্ট:** - **সৃজনশীল গেম মেকানিক্স** যা প্যাটার্নগুলির আকর্ষণীয় ব্যবহার প্রদর্শন করে - **একাধিক ইনপুট পদ্ধতি** (কীবোর্ড এবং মাউস ইভেন্ট) - **স্কেলযোগ্য আর্কিটেকচার** যা নতুন বৈশিষ্ট্য যোগ করা সহজ করে --- **অস্বীকৃতি**: এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। নথিটির মূল ভাষায় থাকা আসল সংস্করণকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই।