আমি একটি সাধারণ পাঠ্য-ভিত্তিক অ্যাডভেঞ্চার গেমটি প্রোগ্রামিং করে ইদানীং নিজেকে বিনোদন দিয়ে চলেছি এবং আমি খুব সাধারণ ডিজাইনের ইস্যুতে আটকে আছি।
একটি সংক্ষিপ্ত বিবরণ দিতে: গেমটি Room
বস্তুগুলিতে বিভক্ত হয়ে গেছে । প্রত্যেকের সেই ঘরে Room
থাকা Entity
বস্তুর একটি তালিকা রয়েছে । প্রত্যেকের Entity
একটি ইভেন্টের স্টেট থাকে যা একটি সাধারণ স্ট্রিং-> বুলিয়ান মানচিত্র এবং একটি ক্রিয়া তালিকা যা স্ট্রিং-> ফাংশন মানচিত্র।
ব্যবহারকারীর ইনপুট ফর্ম গ্রহণ করে [action] [entity]
। Room
উপযুক্ত ফিরে যাওয়ার সত্তা নাম ব্যবহার করে Entity
বস্তু, যা পরে কর্ম নাম ব্যবহার করে সঠিক ফাংশন এটি, এবং এটি সঞ্চালন করে।
ঘরের বিবরণ উত্পন্ন করতে প্রতিটি Room
বস্তু তার নিজস্ব বর্ণনার স্ট্রিং প্রদর্শন করে এবং তারপরে প্রত্যেকটির বর্ণনামূলক স্ট্রিং সংযোজন করে Entity
। Entity
বর্ণনা তার রাষ্ট্র উপর ভিত্তি করে পরিবর্তন হতে পারে ( "দরজা খোলা হয়", "দরজা লক করা", ইত্যাদি "দরজা বন্ধ হয়")।
এখানে সমস্যাটি রয়েছে: এই পদ্ধতিটি ব্যবহার করে, আমার যে পরিমাণ বর্ণনা এবং ক্রিয়া কার্যকারিতা প্রয়োগ করতে হবে তা দ্রুত হাতছাড়া হয়ে যায়। আমার একা শুরু ঘরে 5 টি সত্তার মধ্যে প্রায় 20 টি ফাংশন রয়েছে।
আমি সমস্ত ক্রিয়া একটি একক ফাংশনে এবং যদি-অন্যথায় / সেগুলির মাধ্যমে স্যুইচ করতে পারি তবে এটি সত্তা হিসাবে এখনও দুটি ফাংশন। আমি Entity
সাধারণ / জেনেরিক জিনিসের জন্য দরজা এবং কীগুলির জন্য নির্দিষ্ট সাব-ক্লাসও তৈরি করতে পারি , তবে এটি আমাকে এখনও পর্যন্ত পেয়ে যায়।
সম্পাদনা 1: অনুরোধ হিসাবে, এই কর্ম ফাংশনগুলির সিউডো-কোড উদাহরণগুলি।
string outsideDungeonBushesSearch(currentRoom, thisEntity, player)
if thisEntity["is_searched"] then
return "There was nothing more in the bushes."
else
thisEntity["is_searched"] := true
currentRoom.setEntity("dungeonDoorKey")
return "You found a key in the bushes."
end if
string dungeonDoorKeyUse(currentRoom, thisEntity, player)
if getEntity("outsideDungeonDoor")["is_locked"] then
getEntity("outsideDungeonDoor")["is_locked"] := false
return "You unlocked the door."
else
return "The door is already unlocked."
end if
বর্ণনা ফাংশনগুলি একইভাবে একইভাবে কাজ করে, রাষ্ট্রটি পরীক্ষা করে এবং উপযুক্ত স্ট্রিংটি ফিরিয়ে দেয়।
সম্পাদনা 2: আমার প্রশ্ন শব্দটি সংশোধিত। ধরে নিন যে গেমের অবজেক্টের মধ্যে উল্লেখযোগ্য সংখ্যক উপস্থিতি থাকতে পারে যা সাধারণ আচরণ (নির্দিষ্ট ক্রিয়ায় রাষ্ট্র-ভিত্তিক প্রতিক্রিয়া) অন্যান্য বস্তুর সাথে ভাগ করে না। প্রতিটি সত্তা-নির্দিষ্ট ক্রিয়াকলাপের জন্য একটি কাস্টম ফাংশন লেখার চেয়ে ক্লিনার, এই অনন্য আচরণগুলিকে আমি কী আরও পরিষ্কারভাবে রক্ষণাবেক্ষণের মতো উপায় দিতে পারি?