ধরে নেওয়া যাক আপনার একটি hexmap আছে n
মোট কোষ, এবং p
প্লেয়ার, যেখানে p <= n
, সবচেয়ে ভালো উপায় এই মোকাবেলা করার মাধ্যমে হয় রাউন্ড-রবিন বন্টন মাধ্যমে সেলুলার অটোমাটা (সিএ)।
Initialisation
এলোমেলোভাবে (এবং / অথবা কিছু বা অন্যান্য তাত্ত্বিক ব্যবহার যেমন মানচিত্রের কেন্দ্র থেকে দূরত্ব) প্রতিটি প্লেয়ারের জন্য একটি প্রারম্ভিক সেল বাছাই করে। যেহেতু p <= n
, এটি কোনও সমস্যা হওয়া উচিত নয়।
সেলুলার অটোমেটা
আপনার হেক্স সেলগুলির মধ্যে আপনার সম্পূর্ণ সংযোগের প্রয়োজন। আমি প্রতি ঘরে প্রতি 6-প্রতিবেশী অ্যারে প্রস্তাব করব:
class Cell
{
//... other members...
Cell[6] neighbours = new Cell[6];
}
স্থির আকারের অ্যারেগুলির ব্যবহারের ফলে কোষগুলির মধ্যে টপোগ্রাফিক দিকনির্দেশের ধারণা বিদ্যমান থাকতে পারে, যা কোনও তালিকা বা ভেক্টর না করে। আমি এটির প্রস্তাব দিচ্ছি, কারণ এটি নির্দিষ্ট কিছু নেভিগেশনকে সহজতর করতে পারে।
আপনি প্রতি সারি অফসেট সহ আপনার হেক্সম্যাপটি 2 ডি অ্যারেতেও সঞ্চয় করতে পারেন। এটি প্রতি প্রতি সারিতে জ্যামিতিক অফসেটের কারণে, প্রতি ঘরে প্রতিবেশী অ্যারে সংরক্ষণ করার চেয়ে কিছুটা স্বজ্ঞাত হতে পারে।
প্রতি কক্ষটি প্রতিবেশী যে কোনও কিছুর সাথে সংযুক্ত রয়েছে তা নিশ্চিত করুন। আপনি পুরো হেক্সম্যাপটি তৈরি করার সাথে সাথে আপনি এই সারিটি সারিতে, ঘরে ঘরে সেল করতে পারেন। পিএস যদি আপনি শেষ পর্যন্ত কোনও আয়তক্ষেত্রাকার দিকের সীমাবদ্ধ হেক্সম্যাপ চান, তবে আপনি কেবল সেই ঘরের জন্য পৃথক কোষ এবং রেফারেন্সগুলি সরাতে পারেন, নেতিবাচক স্থান তৈরি করতে, আপনাকে জৈব মানচিত্রের বাহ্যরেখা তৈরি করতে দেয়।
রাউন্ড-রবিন বিতরণ
সুডোকোড:
count number of neutral cells in entire map, minus those starting cells taken by players
while neutral cells remain (or while true)
for each player
if player has not yet reached expected territory size in cells
for each cell already constituting this player's territory
if territory can grow by one cell into a neutral neighbour
grow into neighbour
reduce neutral cell count for entire map by one
if no more neutral cells remain in map
break out of outermost while loop immediately
else
continue to next player immediately
begin game
এই অ্যালগরিদম প্রতিটি খেলোয়াড়কে একের পর এক তার অঞ্চল বাড়ানোর সুযোগ দেবে, তবে শর্ত থাকে যে খেলোয়াড়ের অঞ্চলটিতে এখনও বৈধ বর্ধমান স্থান রয়েছে। নির্দিষ্ট খেলোয়াড়দের আরও ক্রমবর্ধমান থেকে অবরুদ্ধ হয়, অ্যালগরিদম এই সত্বেও খেলোয়াড় যারা অঞ্চল বৃদ্ধি অব্যাহত থাকবে না এখনও বৈধ ক্রমবর্ধমান স্থান আছে। আপনি যে কোনও খেলোয়াড়ের সীমাবদ্ধতার সাথে সাথে হিট হওয়ার সাথে সাথে আপনি সহজেই প্রতিটি খেলোয়াড়কে একই সংখ্যক কোষে সীমাবদ্ধ করতে পারেন, তবে ইচ্ছা করলে আপনার পক্ষে এটি নির্ধারণের পক্ষে যথেষ্ট সহজ হওয়া উচিত।
এটি প্রতিটি প্লেয়ারের জন্য সর্বাধিক আকারের "হোম টেরিটরিজ" সরবরাহ করবে। যদি আপনি সেই খেলোয়াড়ের জন্য সেল গণনা কোটা পূরণের জন্য "দ্বীপ" অঞ্চলও যুক্ত করতে চান তবে কোনও খেলোয়াড় যখন স্থানীয় জায়গার বাইরে চলে যায়, তখন আপনি নিরপেক্ষ কোষের তালিকা থেকে একটি নতুন শুরু কক্ষ চয়ন করতে পারেন এবং সেখান থেকে একই "বৃদ্ধি" প্রক্রিয়াটি নিয়ে এগিয়ে যান। এইভাবে, আপনি এলোমেলো গোলমাল না করে প্রতিটি খেলোয়াড়ের জন্য সুন্দর আকারের, সুসংগত দ্বীপগুলি সমাপ্ত করবেন।