এটি বেশিরভাগই এফপি সম্পর্কে একটি তাত্ত্বিক প্রশ্ন, তবে আমি আমার বক্তব্য চিত্রিত করার জন্য পাঠ্য অ্যাডভেঞ্চারগুলি (পুরাতন-স্কুল জোরকের মতো) নেব। আপনি কীভাবে এফপির সাথে রাষ্ট্রীয় সিমুলেশন মডেল করবেন সে সম্পর্কে আমি আপনার মতামত জানতে চাই।
পাঠ্য অ্যাডভেঞ্চারগুলি সত্যই OOP এর জন্য কল করে। উদাহরণস্বরূপ, সমস্ত "কক্ষগুলি" একটি Room
শ্রেণীর উদাহরণ , আপনার কাছে বুনিয়াদি Item
ক্লাস থাকতে পারে এবং ইন্টারফেসগুলি Item<Pickable>
আপনি বহন করতে পারেন এমন জিনিসগুলির জন্য পছন্দ করতে পারেন ইত্যাদি।
এফপি-র ওয়ার্ল্ড মডেলিং আলাদাভাবে কাজ করে, বিশেষত যদি আপনি এমন একটি পৃথিবীতে অপরিবর্তনীয়তা প্রয়োগ করতে চান যা গেমের অগ্রগতির সাথে সাথে পরিবর্তন করতে হবে (বস্তুগুলি সরানো হয়, শত্রুরা পরাজিত হয়, স্কোরিং বৃদ্ধি পায়, প্লেয়ার তার অবস্থান পরিবর্তন করে)। আমি একক একটি বৃহত অবজেক্টটি কল্পনা করেছি World
যার মধ্যে এটি রয়েছে: আপনি যে কক্ষগুলি ঘুরে দেখতে পারেন, সেগুলি কীভাবে সংযুক্ত করা হয়, খেলোয়াড় কী বহন করে চলেছে, কী লিভারগুলি ট্রিগার করা হয়েছে what
আমি মনে করি যে একটি বিশুদ্ধ পদ্ধতির মূলত এই বড় অবজেক্টটিকে যে কোনও ফাংশনে স্থান দেওয়া এবং এটি তাদের দ্বারা ফিরিয়ে দেওয়া (সম্ভবত সংশোধিত) করা হবে। উদাহরণস্বরূপ, আমার একটি moveToRoom
ফাংশন রয়েছে যা নতুন ঘরে পরিবর্তিত হয়ে World
এগুলি পায় এবং ফেরত দেয় ।World.player.location
World.rooms[new_room].visited = True
এমনকি এটি যদি আরও "সঠিক" উপায় হয় তবে মনে হয় এটি এর জন্য খাঁটিতা প্রয়োগ করছে। প্রোগ্রামিং ল্যাঙ্গুয়েজের উপর নির্ভর করে এই সম্ভাব্য খুব বড় World
অবজেক্টটি পিছনে পিছনে যেতে ব্যয়বহুল হতে পারে। এছাড়াও, প্রতিটি ফাংশনটিতে যে কোনও World
অবজেক্টে অ্যাক্সেস থাকা দরকার । উদাহরণস্বরূপ, কোনও রুম অ্যাক্সেসযোগ্য হতে পারে বা অন্য ঘরে ট্রিগার হওয়া লিভারের উপর নির্ভর করে না কারণ এটি প্লাবিত হতে পারে তবে প্লেয়ার যদি লাইফ জ্যাকেট বহন করে তবে এটি যেভাবেই প্রবেশ করতে পারে। কোনও দানব আক্রমণাত্মক হতে পারে বা খেলোয়াড় তার চাচাত ভাইকে অন্য ঘরে হত্যা করেছে কিনা তার উপর নির্ভর করে। এর অর্থ এই যে roomCanBeEntered
ফাংশন অ্যাক্সেস করা প্রয়োজন World.player.invetory
এবং World.rooms
, describeMonster
অ্যাক্সেস করা প্রয়োজন World.monsters
এবং তাই (মূলত, আপনি অবশ্যইপুরো লোড চারপাশে পাস)। এটি সত্যিই আমার কাছে একটি বিশ্বব্যাপী পরিবর্তনশীল জন্য কল করার জন্য বলে মনে হচ্ছে, এমনকি এটি বিশেষত এফপিতে ভাল প্রোগ্রামিং শৈলী।
আপনি কীভাবে এই সমস্যার সমাধান করবেন?