উত্তর:
একটি ডাটাবেসে গাছ প্রতিনিধিত্ব করতে এই জাতীয় কাঠামো ব্যবহার করুন:
#Talent
id parent description
1 0 Tackle
2 1 Kick
3 1 Punch
4 3 Fire Punch
এবং ব্যবহারকারীর অধীনে প্রাপ্ত প্রতিভা উপস্থাপনের জন্য অন্য একটি সারণী
#UserTalent
id user talent
1 4 1
2 4 3
3 4 4
সম্পূর্ণ প্রতিভা সারণীটি জিজ্ঞাসা করে এবং একটি লিঙ্কযুক্ত গাছ তৈরি করে আপনি প্রগতিশীলতা নির্ভরতাগুলি পরীক্ষা করে দেখতে পারেন। আপনি এসকিউএল এর মাধ্যমে এটিও করতে পারেন তবে এটির জন্য হয় পুনরাবৃত্ত সাবলেট বা প্রচুর প্রশ্নের প্রয়োজন। আপনার কোডে এটি করা ভাল।
যদি একাধিক নির্ভরতা থাকে, যেমন উদাহরণস্বরূপ Fire Punch
নির্ভর করে Punch
এবং Immolation
নির্ভরতা গ্রাফ উপস্থাপন করতে দুটি টেবিল ব্যবহার করুন:
#Talent
id description
1 Tackle
2 Kick
3 Punch
4 Fire Punch
5 Immolation
#Depedency
id parent child
1 0 1
2 0 5
3 1 2
4 1 3
5 3 4
6 5 4
আমি এমন একটি গাছ ব্যবহারের পরামর্শ দেব যেখানে প্রতিটি নোড একটি নির্দিষ্ট প্রতিভা / দক্ষতা উপস্থাপন করে। খেলোয়াড় কোনও প্রতিভা অর্জন করেছে কিনা তার ভিত্তিতে, তার শিশু প্রতিভা অর্জন করা যায়। উদাহরণস্বরূপ নিম্নলিখিত তথ্য কাঠামো
class Talent {
std::vector<Talent*> children;
bool earned;
};
কোনও খেলোয়াড়ের কোন প্রতিভা রয়েছে তা নির্ধারণ করার জন্য, আপনি মূল প্রতিভাটি গ্রহণ করেন এবং যতক্ষণ না অর্জিত ভ্রান্ত হয় সেই প্রতিভা নোডগুলিতে পৌঁছা না হওয়া অবধি গ্রাফটি দিয়ে যান। এটিও প্রকাশ করবে যে কোন প্রতিভা অর্জনের জন্য উপলব্ধ the মূল শাখার নীচে প্রতিটি শাখায় প্রথম প্রতিভা যেখানে অর্জিত হয় তা মিথ্যা।
ptr_vector
আরও ভাল হতে পারে।
আমার গেমটিতে আমি এটি এটি করি:
ডেটাবেস:
reference_talent : একটি অনন্য আইডি, নাম, প্রভাব ইত্যাদি ধারণ করে
প্রতিভা : আইডি, প্লেয়ারিড <- এর মধ্যে সমস্ত প্রতিভা প্লেয়ার রয়েছে "শিখেছে"।
খেলার মধ্যে: (সার্ভারে)
আমি সমস্ত 'রেটিক্যাল' স্ট্যান্ডার্ড :: মানচিত্রে সমস্ত রেফারেন্স_সামগ্রীগুলি লোড করেছি যাতে আমি তাদের আইডি দিয়ে এগুলি সহজে অ্যাক্সেস করতে পারি।
যখন কোনও ক্লায়েন্ট কোনও খেলোয়াড় পরীক্ষা করে দেখেন আমি ডেটাবেস থেকে সমস্ত প্রতিভা অর্জন করি এবং একটি স্টাডি :: ভেক্টরে স্টক করে রাখি যাতে যখন যখন আমার বৈশিষ্ট্য ইত্যাদি গণনা করা দরকার তখন আমি তাদের র্যামে রাখি। আমি প্রতিভা ক্লায়েন্টকে প্রেরণ করি।
এটি সম্পর্কে (টেবিলের 'প্রতিভা' + ক্লায়েন্টের জন্য একটি বার্তা কেবলমাত্র একটি 'প্রতিভা' সংরক্ষণ করা ব্যতীত)।
আপনি এটিকে টিউটোরিয়ালের মতো আনলকার এবং আনলকডদের মধ্যে সম্পর্ক হিসাবে বর্ণনা করেছেন । আমি রিলেশনাল বীজগণিত এবং ডেটাবেস সম্পর্কে আরও শিখার পরামর্শ দিই। তারা কীভাবে ডেটা মডেল করবেন তা দুর্দান্ত উপায়। আপনি যদি ডাটাবেস থেকে কীভাবে তথ্য জিজ্ঞাসা করতে পারেন তা শিখেন আপনি খুব সহজেই ডেটা মডেল করতে পারেন।
মডেলিং সম্পর্কের বিষয়ে আপনি কতটা জানেন তা আমি জানি না। এই টিউটোরিয়ালটি এর সাথে আপনাকে সহায়তা করবে।
আমি ধরে নিলাম যে বাস্তবে যেমন বাহ্যিকভাবে কাজ হয় (এএইচএম), এটি এটি
এটি এন: এন সম্পর্ক, যা বোঝায় যে আপনার "মধ্যবিত্ত" দরকার দুটি প্রতিভার মধ্যে একটি নতুন সম্পর্ক:
(talent who unlocks id, talent who is unlocked)
এইভাবে আপনি প্রতিভা A আনলকিং বি, সি এবং ডি ((এ, বি), (এ, সি), (এ, ডি)) এবং এক্স, জেড এবং ডাব্লু (এক্স, ওয়াই) দ্বারা তালাবদ্ধ প্রতিভা থাকতে পারে, জেড, ওয়াই), (ডাব্লু, ওয়াই))। অত্যাবশ্যক / প্রক্রিয়াগত / অবজেক্ট-ভিত্তিক ভাষায় আপনি এটির মতো জোড়ার তালিকা / অ্যারে হিসাবে এটি করবেন:
var unlocks_unlocked = [[A, B],[A,C],[A,D],[X,Y],[Z,Y],[W,Y]];
সুতরাং "রিয়েল-ওয়ার্ল্ড" উদাহরণস্বরূপ আপনি থাকতে পারেন:
... ["running fast", "jumping superhigh"], ["antigravity's child", "jumping superhigh"]
এবং এর অর্থ হ'ল আপনার "দ্রুত চলমান" এবং "অ্যান্টিগ্রাভিটির শিশু" প্রতিভা অর্জনের পরে "জাম্পিং সুপারহাই" পাওয়া যায়।
আমি সম্প্রতি ডায়াবলো খেলিনি তবে এটি হতে পারে, এটি কেবল ছিল:
এটি 1: এন সম্পর্ক:
You put "is unlocked by this talent's id" variable into talent's structure
মত:
var Talent[8] = { "name": "superpower", "unlocked by": "being Clark Kent"};
UserTalent
টেবিলটিতে অটোকি কলামের প্রয়োজন নেই।user
এবংtalent
শুধুমাত্র দুটি কলাম এবং একটি সংমিশ্রিত কী হতে পারে: সেগুলি কখনই সদৃশ হবে না এবং আপনি যেভাবেid
কোনওভাবেই জিজ্ঞাসা করতে পারবেন না ।