আমার লক্ষ্য হ'ল একটি মডুলার / যতটা জেনেরিক সম্ভব আইটেম সিস্টেম তৈরি করা যা এই জাতীয় জিনিসগুলি পরিচালনা করতে পারে:
- আপগ্রেডযোগ্য আইটেম (+6 কাতানা)
- স্ট্যাট মোডিফায়ার (+15 দক্ষতা)
- আইটেম সংশোধক (ওয়াই ড্যামেজ করার% এক্স সুযোগ, জমাট বাঁধার সুযোগ)
- রিচার্জেবল আইটেম (30 টি ব্যবহারের সাথে ম্যাজিক স্টাফ)
- আইটেম সেট করুন (ওয় বৈশিষ্ট্য সক্রিয় করতে 4 টি এক্স সেট সজ্জিত করুন)
- বিরলতা (সাধারণ, অনন্য, কিংবদন্তি)
- অন্বেষণযোগ্য (কিছু কারুকাজের উপকরণগুলির মধ্যে বিরতি)
- কারুকাজযোগ্য (নির্দিষ্ট উপকরণ দিয়ে তৈরি করা যেতে পারে)
- গ্রহণযোগ্য (5 মিনিট% এক্স আক্রমণ শক্তি, নিরাময় +15 এইচপি)
* আমি এমন বৈশিষ্ট্যগুলি সমাধান করতে সক্ষম হয়েছি যা নিম্নলিখিত সেটআপের ক্ষেত্রে সাহসী।
আমার মনে যে প্রতিচ্ছবি রয়েছে তা প্রতিফলিত করতে আমি এখন অনেকগুলি বিকল্প যুক্ত করার চেষ্টা করেছি। আমি এই সমস্ত বৈশিষ্ট্য প্রয়োজনীয় যোগ করার পরিকল্পনা করি না, তবে আমি যথাযথ হিসাবে দেখতে এগুলি প্রয়োগ করতে সক্ষম হতে চাই। এগুলি ইনভেন্টরি সিস্টেম এবং ডেটার সিরিয়ালাইজেশনের সাথেও সামঞ্জস্যপূর্ণ হওয়া উচিত।
আমি উত্তরাধিকার মোটেও ব্যবহার না করে বরং সত্তা-উপাদান / ডেটা চালিত পদ্ধতির পরিকল্পনা করছি। প্রথমদিকে আমি এমন একটি সিস্টেমের কথা ভেবেছিলাম যা রয়েছে:
- বেসস্ট্যাট: জেনেরিক ক্লাস যা চলতি পরিসংখ্যান রাখে (আইটেম এবং চরিত্রের পরিসংখ্যানের জন্যও এটি ব্যবহার করা যেতে পারে)
- আইটেম: এমন একটি শ্রেণি যা ডেটা ধারণ করে যেমন তালিকা, নাম, আইটেম টাইপ এবং ইউআই, অ্যাকশননাম, বিবরণ ইত্যাদির সাথে সম্পর্কিত জিনিসগুলির তালিকা data
- আইওয়াওপন: অস্ত্রের জন্য ইন্টারফেস। আইওয়াইপন বাস্তবায়িত করে প্রতিটি অস্ত্রের নিজস্ব শ্রেণি থাকবে This এতে অ্যাটাক এবং চরিত্রের পরিসংখ্যানগুলির একটি রেফারেন্স থাকবে। যখন অস্ত্র সজ্জিত করা হয়, তখন এটির ডেটা (আইটেম ক্লাস 'স্টেট) অক্ষর স্ট্যাটে ইনজেকশনের ব্যবস্থা করা হবে (বেসস্ট্যাট যা কিছু থাকুক না কেন এটি স্ট্যাট বোনাস হিসাবে অক্ষর শ্রেণিতে যুক্ত করা হবে) সুতরাং উদাহরণস্বরূপ, আমরা একটি তরোয়াল তৈরি করতে চাই (ভাবতে ভাবতে জসন দিয়ে আইটেম ক্লাস উত্পাদন করুন) তাই তরোয়াল চরিত্রের পরিসংখ্যানগুলিতে 5 টি আক্রমণ যুক্ত করবে । সুতরাং আমাদের কাছে একটি বেসস্ট্যাট রয়েছে ("আক্রমণ", 5) (আমরা এনামও ব্যবহার করতে পারি)। এই স্টেটটি চরিত্রের "আক্রমণ" স্ট্যাটকে সজ্জিত করার পরে এটি একটি বোনাসস্ট্যাট হিসাবে যুক্ত করা হবে (যা একটি ভিন্ন শ্রেণি হবে)। সুতরাং তরোয়াল নামক একটি শ্রেণি আইওয়াইপন প্রয়োগ করে যখন এটি তৈরি করা হবে 'আইটেম ক্লাস তৈরি হয়। সুতরাং আমরা এই তরোয়ালটিতে চরিত্রের পরিসংখ্যানগুলি ইনজেক্ট করতে পারি এবং আক্রমণ করার সময় এটি অক্ষর স্ট্যাট থেকে সম্পূর্ণ অ্যাটাক স্ট্যাটটি পুনরুদ্ধার করতে পারে এবং আক্রমণ পদ্ধতিতে ক্ষতি ক্ষতিগ্রস্থ করে।
- বোনাসস্ট্যাট: বেসস্ট্যাটকে স্পর্শ না করে বোনাস হিসাবে পরিসংখ্যান যুক্ত করার একটি উপায়।
- আইকনসামেবল: আইওয়েপনের মতো একই যুক্তি। ডাইরেক্ট স্ট্যাট যুক্ত করা মোটামুটি সহজ (+15 এইচপি) তবে আমি এই সেটআপটি দিয়ে অস্থায়ী অস্ত্র যোগ করার বিষয়ে নিশ্চিত নই (5 মিনিটের জন্য আক্রমণে% x)।
- আইউগ্রেডেবল: এটি এই সেটআপ দিয়ে প্রয়োগ করা যেতে পারে। আমি আপগ্রেড লেভেলকে বেস স্ট্যাটাস হিসাবে ভাবছি যা আপগ্রেড করার অস্ত্র বাড়ানো হয়েছে। আপগ্রেড করা হলে, আমরা অস্ত্রের বেসস্ট্যাট এর আপগ্রেড স্তরের সাথে মেলে পুনরায় গণনা করতে পারি ।
এই বিন্দু অবধি, আমি দেখতে পাচ্ছি যে সিস্টেমটি বেশ ভাল। তবে অন্যান্য বৈশিষ্ট্যগুলির জন্য, আমি মনে করি আমাদের অন্য কিছু প্রয়োজন, কারণ উদাহরণস্বরূপ আমি এগুলিতে ক্র্যাফটেবল বৈশিষ্ট্যটি প্রয়োগ করতে পারি না কারণ আমার বেসস্ট্যাট এই বৈশিষ্ট্যটি পরিচালনা করতে সক্ষম হবে না এবং এটিই আমি আটকে গিয়েছিলাম। আমি স্ট্যাটাস হিসাবে সমস্ত উপাদান যুক্ত করতে পারি তবে তা কার্যকর হবে না।
আপনার এটির অবদান সহজ করার জন্য, এখানে কিছু প্রশ্ন রয়েছে যা আপনি সহায়তা করতে পারেন:
- অন্যান্য বৈশিষ্ট্যগুলি প্রয়োগ করতে কি এই সেটআপটি দিয়ে চালিয়ে যাওয়া উচিত? উত্তরাধিকার ছাড়া কি তা সম্ভব হবে?
- উত্তরাধিকার ছাড়াই এই সমস্ত বৈশিষ্ট্য বাস্তবায়নের জন্য কি আপনি ভাবতে পারেন যে কোনও উপায় আছে?
- আইটেম সংশোধক সম্পর্কে, কেউ কীভাবে এটি অর্জন করতে পারে? কারণ এটি প্রকৃতিতে খুব জেনেরিক।
- এই ধরণের আর্কিটেকচার তৈরির প্রক্রিয়াটি সহজ করার জন্য কী করা যেতে পারে, কোনও প্রস্তাবনা?
- এমন কোনও উত্স আছে যা আমি এই সমস্যার সাথে সম্পর্কিত খনন করতে পারি?
- আমি সত্যিই উত্তরাধিকার এড়ানোর চেষ্টা করি, তবে আপনি কি মনে করেন যে এগুলি উত্তরাধিকারসূত্রে মোটামুটি রক্ষণাবেক্ষণের সময় সমাধান করা / অর্জিত হবে?
আমি একক প্রশ্নের উত্তর দিতে দ্বিধা বোধ করি কারণ আমি প্রশ্নগুলি খুব বিস্তৃত করে রেখেছি যাতে আমি বিভিন্ন দিক / লোকদের কাছ থেকে জ্ঞান পেতে পারি।
সম্পাদনা
@ Jjimenezg93 এর উত্তর অনুসরণ করে, আমি পরীক্ষার জন্য সি # তে একটি খুব বেসিক সিস্টেম তৈরি করেছি, এটি কার্যকর! আপনি এতে কিছু যোগ করতে পারেন কিনা তা দেখুন:
public interface IItem
{
List<IAttribute> Components { get; set; }
void ReceiveMessage<T>(T message);
}
public interface IAttribute
{
IItem source { get; set; }
void ReceiveMessage<T>(T message);
}
এখনও অবধি, আইটেম এবং আইএট্রিবিউট বেস ইন্টারফেস। বার্তার জন্য বেস ইন্টারফেস / বৈশিষ্ট্য থাকার প্রয়োজন ছিল না (যা আমি ভাবতে পারি), সুতরাং আমরা সরাসরি একটি পরীক্ষার বার্তা শ্রেণি তৈরি করব। এখন পরীক্ষার ক্লাসের জন্য:
public class TestItem : IItem
{
private List<IAttribute> _components = new List<IAttribute>();
public List<IAttribute> Components
{
get
{
return _components;
}
set
{
_components = value;
}
}
public void ReceiveMessage<T>(T message)
{
foreach (IAttribute attribute in Components)
{
attribute.ReceiveMessage(message);
}
}
}
public class TestAttribute : IAttribute
{
string _infoRequiredFromMessage;
public TestAttribute(IItem source)
{
_source = source;
}
private IItem _source;
public IItem source
{
get
{
return _source;
}
set
{
_source = value;
}
}
public void ReceiveMessage<T>(T message)
{
TestMessage convertedMessage = message as TestMessage;
if (convertedMessage != null)
{
convertedMessage.Execute();
_infoRequiredFromMessage = convertedMessage._particularInformationThatNeedsToBePassed;
Debug.Log("Message passed : " + _infoRequiredFromMessage);
}
}
}
public class TestMessage
{
private string _messageString;
private int _messageInt;
public string _particularInformationThatNeedsToBePassed;
public TestMessage(string messageString, int messageInt, string particularInformationThatNeedsToBePassed)
{
_messageString = messageString;
_messageInt = messageInt;
_particularInformationThatNeedsToBePassed = particularInformationThatNeedsToBePassed;
}
//messages should not have methods, so this is here for fun and testing.
public void Execute()
{
Debug.Log("Desired Execution Method: \nThis is test message : " + _messageString + "\nThis is test int : " + _messageInt);
}
}
এগুলি প্রয়োজন সেটআপ। এখন আমরা সিস্টেমটি ব্যবহার করতে পারি (Followingক্যের জন্য অনুসরণ করা হয়)।
public class TestManager : MonoBehaviour
{
// Use this for initialization
void Start()
{
TestItem testItem = new TestItem();
TestAttribute testAttribute = new TestAttribute(testItem);
testItem.Components.Add(testAttribute);
TestMessage testMessage = new TestMessage("my test message", 1, "VERYIMPORTANTINFO");
testItem.ReceiveMessage(testMessage);
}
}
এই টেস্ট ম্যানেজার স্ক্রিপ্টটি দৃশ্যের কোনও উপাদানগুলিতে সংযুক্ত করুন এবং আপনি ডিবাগে দেখতে পারেন যে বার্তাটি সফলভাবে পাস হয়েছে।
জিনিসগুলি ব্যাখ্যা করার জন্য: গেমের প্রতিটি আইটেম আইটেম ইন্টারফেস প্রয়োগ করবে এবং প্রতিটি অ্যাট্রিবিউট (নামটি আপনাকে বিভ্রান্ত করা উচিত নয়, এর অর্থ আইটেম বৈশিষ্ট্য / সিস্টেম able তারপরে আমাদের কাছে বার্তাটি প্রক্রিয়া করার একটি পদ্ধতি রয়েছে (কেন আমাদের বার্তাগুলি প্রয়োজন তা পরবর্তী উদাহরণে ব্যাখ্যা করা হবে)। সুতরাং প্রসঙ্গে, আপনি কোনও আইটেমের সাথে অ্যাট্রিবিউটগুলি সংযুক্ত করতে পারেন এবং বাকিগুলি আপনার জন্য করতে দিন। যা খুব নমনীয়, কারণ আপনি স্বাচ্ছন্দ্যে গুণাবলী যুক্ত / মুছে ফেলতে পারেন। সুতরাং একটি সিউডো-উদাহরণ হ'ল বিচ্ছিন্নযোগ্য able আমাদের ডিসেনচ্যানটেবল (আইএটিট্রিবিউট) নামে একটি ক্লাস থাকবে এবং এটি ডিসেনচেন্ট পদ্ধতিতে এটি জিজ্ঞাসা করবে:
- উপাদানগুলির তালিকা তৈরি করুন (যখন আইটেমটি ছিন্ন করা হয়, খেলোয়াড়কে কী জিনিস দেওয়া উচিত) দ্রষ্টব্য: আইটেমটি আইটেম টাইপ, আইটেম আইডি ইত্যাদি বাড়ানো উচিত
- ইন রেজাল্টমোডিফায়ার (আপনি যদি একরকম ছিন্নমূল বৈশিষ্ট্য বাড়ানোর জন্য প্রয়োগ করেন তবে ছিন্নমূল হওয়ার পরে প্রাপ্ত উপাদানগুলি বাড়ানোর জন্য আপনি এখানে একটি int পাস করতে পারেন)
- int ব্যর্থতা পরিবর্তন (যদি বিচ্ছিন্ন প্রক্রিয়াটির ব্যর্থতার সুযোগ থাকে)
প্রভৃতি
এই তথ্যগুলি ডিসেনচ্যান্ট ম্যানেজার নামে একটি শ্রেণীর দ্বারা সরবরাহ করা হবে, এটি আইটেমটি গ্রহণ করবে এবং এই বার্তাটি আইটেম (ছিন্নমূল হওয়ার পরে আইটেমের উপাদানগুলি) এবং প্লেয়ারের অগ্রগতি (ফলাফলমোডিফায়ার এবং ব্যর্থতা পরিবর্তন) অনুসারে তৈরি করবে form এই বার্তাটি পাস করার জন্য, আমরা একটি DisenchantMessage শ্রেণি তৈরি করব, যা এই বার্তার জন্য একটি বডি হিসাবে কাজ করবে। সুতরাং DisenchantManager একটি DisenchantMessage তৈরি করবে এবং এটি আইটেমটিতে প্রেরণ করবে। আইটেমটি বার্তাটি গ্রহণ করবে এবং এটি সংযুক্ত সমস্ত বৈশিষ্ট্যগুলিতে এটি পাস করবে। যেহেতু ডিসেনচ্যান্টেবল ক্লাসের রিসিভমেসেজ পদ্ধতিটি একটি ডিসেনচ্যান্টমেসেজের সন্ধান করবে, কেবলমাত্র ডিসেনচেন্টেবল অ্যাট্রিবিউট এই বার্তাটি গ্রহণ করবে এবং এটিতে কাজ করবে। আশা করি এটি আমার পক্ষে যতটা জিনিস পরিষ্কার করেছে তেমন :)।