টাইল মানচিত্র এবং ইউনিটগুলির মধ্যে নির্ভরতা কীভাবে পরিচালনা করবেন


11

কাজগুলিতে আমার 2D টাইল-ভিত্তিক কৌশল রয়েছে। আমি মানচিত্রে মানচিত্রের ইউনিটগুলির মধ্যে কীভাবে সম্পর্ক পরিচালনা করব তা ঘুরে বেড়াচ্ছি।

একটি টাইল সমন্বয় দেওয়া আমার প্রয়োজন ইউনিট এটি দাঁড়িয়ে যদি, কোন আছে পেতে সক্ষম হতে হবে। একই সময়ে, একটি ইউনিট দেওয়া হলে আমি ইউনিটের সমন্বয় পেতে সক্ষম হতে চাই।

আমি এর দুটি সমাধান দেখেছি। প্রথম সমাধানটি হ'ল ইউনিটগুলি একটি স্থানাঙ্ক এবং ম্যাপ স্টোর ইউনিটের রেফারেন্সগুলি তার টাইলগুলিতে রাখে। এটি মানচিত্র এবং ইউনিটগুলির মধ্যে একটি চক্রীয় নির্ভরতা তৈরি করে। আমার নিশ্চিত করা দরকার যে ইউনিটটি চললে মানচিত্রের কোনও ইউনিট সিঙ্কে রাখা হয়েছে।

দ্বিতীয় সমাধানটি হ'ল ইউনিটগুলি কেবল তাদের স্থানাঙ্কের উপর নজর রাখে। কোনও টাইলের কোনও ইউনিট রয়েছে কিনা তা জানাতে এবং সেই ইউনিটটি পেতে, আমি ইউনিটের পুরো সেটটি লুপ করব আমি একটি মিলের স্থানাঙ্কের সাথে খুঁজে পেয়েছি। এটি চক্রীয় নির্ভরতা থেকে মুক্তি পায় তবে মানচিত্র থেকে ইউনিট সন্ধানের জন্য প্রথম সমাধানটির মধ্যে এটি (1) সম্পত্তিটি হারিয়ে ফেলে। এটি যুক্ত হতে পারে যেহেতু আমি পাথ সন্ধান, চলাচলের পরিসীমা নির্ধারণ এবং প্রদত্ত ইউনিটের বৈধ লক্ষ্যগুলি নির্ধারণের মতো জিনিসের জন্য নিয়মিত মানচিত্রটি স্ক্যান করতে সক্ষম হতে চাই।

আমি মানচিত্রে কেবল ইউনিটগুলি সঞ্চয় করতে পারি না (বা আমিও পারি?)। ইউনিটগুলি খেলোয়াড় বা এআই, উভয়ই "সেনাবাহিনী" এর সাথে সম্পর্কিত। একটি সেনাবাহিনী তার সমস্ত ইউনিট সহজেই অ্যাক্সেস করতে এবং পুনরাবৃত্তি করতে সক্ষম হওয়া উচিত।

যেহেতু কৌশল গেমগুলিতে এটি একটি সাধারণ সমস্যা বলে মনে হচ্ছে, আমি ইউনিট / মানচিত্রের সম্পর্ক পরিচালনার জন্য বর্ণিত দুটি ছাড়াও কি অন্য কোনও নিদর্শন রয়েছে?

উত্তর:


3

এটি একটি জনপ্রিয় নিদর্শন নয় তবে রিলেশনাল ডাটাবেস ওয়ার্ল্ড তৃতীয় উপায় সরবরাহ করে: একাধিক কী রয়েছে এমন একটি ডেটা স্ট্রাকচার ব্যবহার করুন। সারণী আকারে, এটি দেখতে দেখতে এটির মতো হতে পারে:

Unit id    Location
-------------------
  1309     13,15
  2357      7,93
  8552      7,93

আপনি জিজ্ঞাসা করতে সক্ষম হতে চান, "ইউনিট 2357 কোথায়?" এবং 7,93 ফিরে পাবেন। আপনি জিজ্ঞাসা করতে সক্ষম হতে চান, "7,93 অবস্থানে কী আছে?" এবং 2357 এবং 8552 ফিরে পান There এমন ডেটা স্ট্রাকচার রয়েছে যা জিনিসগুলি দেখার জন্য একাধিক কীগুলিকে অনুমতি দেয়। আপনি নির্ভরতা অপসারণ করতে চাইলে আপনি এটি ইউনিটগুলির বাইরে এবং মানচিত্রের বাইরেও সঞ্চয় করতে পারেন।

যাইহোক, অনুশীলনে প্রতিটি ইউনিটে অবস্থান সংরক্ষণ করা বেশি সাধারণ এবং তারপরে পাশের একটি স্থানিক পার্টিশন সম্পর্কিত ডেটা কাঠামো ব্যবহার করে যা আপনাকে জানায় যে প্রদত্ত অঞ্চলে ইউনিটগুলি কী। যেহেতু এটি একটি পৃথক কাঠামো, অঞ্চলগুলি গ্রিড স্পেস হতে হবে না; তারা বৃহত্তর অঞ্চল হতে পারে।

আমি যা সহজতম (আপনার দ্বিতীয় সমাধান) যা করার তা করার পরামর্শ দিই এবং এরপরে যদি এটি কোনও পারফরম্যান্স সমস্যা হয় তবে আপনি লকআপগুলি দ্রুততর করার জন্য একটি স্থানিক পার্টিশন যুক্ত করতে পারেন।


সুতরাং, আপনি বর্ণিত স্থানিক পার্টিশন সম্পর্কিত ডেটা কাঠামোটি কেবল মানচিত্র হতে পারে (যা আমার ক্ষেত্রে সম্ভবত টাইলসের 2D গ্রিড)। আমি ধরে নিয়েছি যখন কোনও ইউনিট চলে আসে (বা যুক্ত করা হয়, বা সরানো হয়) তখনও সিঙ্কে রাখার জন্য আমাকে ইউনিট এবং স্থানিক পার্টিশন কাঠামো উভয়ই আপডেট করতে হবে। সম্ভবত এটি সেই জিনিসগুলির মধ্যে একটি যা আমার সাথে থাকতে হবে?
এজেএম

1
হ্যাঁ, মানচিত্রটি আপনার ব্যবহৃত সবচেয়ে সূক্ষ্ম দানাদার স্থানিক পার্টিশন। সমস্ত ইউনিটের বৈশ্বিক তালিকা হল সবচেয়ে মোটা দানাযুক্ত পার্টিশন। ;) পার্টিশনটি ব্যবহারের আগে আপনাকে কেবল আপডেট করতে হবে। আপনি যদি সর্বদা এটি ব্যবহার করেন আপনি প্রতিবার ইউনিটটি সরানোর সময় এটি আপডেট করতে চান। তবে আপনি যদি এটি আপডেট আপডেটের কয়েকটি ধাপের জন্য ব্যবহার করছেন তবে আপনি এক পাসে ইউনিট তালিকার মধ্যে দিয়ে পার্টিশন ডেটা কাঠামোটি গণনা করতে পারেন, তারপরে এটি শেষ হয়ে গেলে তা বাতিল করুন। এইভাবে আপনাকে সেগুলি সর্বদা সমন্বয় করতে হবে না।
amitp

5

ভাল, আপনি যদি প্রতি খেলোয়াড়ের কয়েক হাজার ইউনিট না করেন তবে আমি মেমরির ব্যবহার সম্পর্কে চিন্তা করব না এবং প্রথম সমাধানটি ব্যবহার করব। মনে হচ্ছে মেমোরি সিপিইউয়ের তুলনায় সস্তা।

বাস্তবে আপনার কাছে খেলোয়াড়ের জন্য 4000 ইউনিট থাকলেও সেখানে লোকেশন সংরক্ষণের জন্য দুটি পূর্ণসংখ্যার ব্যবহার এবং 8 জন খেলোয়াড়, যা কেবল 2 এমবি লাগে, তবে প্রথম সমাধানের সাহায্যে আপনি ও (1) কো-অর্ড গেটর ব্যবহার করতে পারবেন ও (এন) (অচলিত অনুমান), যা প্রচুর ইউনিট সহ ধীর হতে পারে।

বেশিরভাগ গেমগুলি টাইলের পরিবর্তে পিক্সেল ভিত্তিক বলে মনে হচ্ছে, এখন একদিন তাই কো-অর্ডগুলি সঞ্চয় করার জন্য তাদের কেবল ইউনিট নেওয়া দরকার।


আমি মেমরির ব্যবহার সম্পর্কে উদ্বিগ্ন নই, আমি নির্ভরতা পরিচালিত করতে আরও আগ্রহী (অবজেক্ট ওরিয়েন্টেড ডিজাইন অর্থে)। এটি যে অতিরিক্ত মেমোরি নয় এটি প্রথম সমাধানটি আমাকে উদ্বেগজনক করে তুলবে, এটি চক্রীয় নির্ভরতা যে আমি অবসর নিচ্ছি, যতটা আমি ও (1) সহ-সমন্বয়কারীকে পছন্দ করি। এছাড়াও, আমি জানি এখন প্রচুর গেমস পিক্সেল ভিত্তিক, তবে আমি টাইলস পছন্দ করি তাই এটি আমি ব্যবহার করছি। : পি
এজেএম

@ এজেএম, একইভাবে, আমি অ্যান্ড্রয়েডে প্রকাশিত অর্থ প্রদানের অ্যাপ্লিকেশনগুলি টাইলগুলি ব্যবহার করা হবে।
রায় ব্রিটনের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.