Varsayarsak bir hexmap sahip n
toplam hücreleri ve p
oyuncuların, p <= n
bu mücadele için en iyi yol geçer, döner turnuva dağıtımı yoluyla hücresel otomat (CA).
Bafllatma
Rastgele (ve / veya harita merkezinden uzaklık gibi bir veya başka buluşsal yöntemler kullanarak) her oyuncu için bir başlangıç hücresi seçin. Çünkü p <= n
bu bir problem olmamalı.
Hücresel otomata
Altıgen hücreleriniz arasında tam bağlantıya ihtiyacınız vardır. Hücre başına 6 komşu dizi öneririm:
class Cell
{
//... other members...
Cell[6] neighbours = new Cell[6];
}
Sabit boyutlu dizilerin kullanılması, bir liste veya vektörün olmayacağı hücreler arasında topografik yönler kavramının var olmasını sağlar. Belirli gezinme işlemlerini kolaylaştırabileceği için bunu öneriyorum.
Ayrıca, hexmap'inizi satır başına ofsetleri olan bir 2D dizide saklayabilirsiniz. Bununla birlikte, bu, her diğer satırdaki geometrik ofset nedeniyle, hücre başına bir komşu dizi depolamaktan biraz daha az sezgisel olabilir.
Her hücrenin komşu olan her şeye bağlı olduğundan emin olun. Tam hexmap'i oluştururken bu satır satır, hücre hücre yapabilirsiniz. PS Sonuçta dikdörtgen olmayan bir şekilde sınırlanmış bir hexmap istiyorsanız, negatif boşluklar oluşturmak ve böylece organik harita taslağı oluşturmanıza izin vermek için tek tek hücreleri ve bu hücrelere referansları kaldırabilirsiniz.
Round-robin dağılımı
pseudocode:
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
Bu algoritma, oyuncunun topraklarının hala geçerli büyüme alanına sahip olması şartıyla, her oyuncuya toprağını birer teker artarak yetiştirme şansı verecektir . Belirli oyuncular ayrıca büyüyen engellenir ise, algoritma buna rağmen oyuncuların toprakları büyümeye devam edecektir yapmak hala geçerli büyüyen alana sahip. Bir oyuncu bir sınıra ulaştığında her oyuncuyu aynı sayıda hücreyle kolayca kısıtlayabilirsiniz, ancak istenirse bunu anlamanız için yeterince kolay olmalıdır.
Bu, her oyuncu için maksimum boyutta "ev bölgeleri" sağlayacaktır. Ek olarak "ada" bölgelerine sahip olmak istiyorsanız, o oyuncu için hücre sayım kotasını yerine getirmek için, bir oyuncu büyümek için yerel alan tükendiğinde, nötr hücreler listesinden yeni bir başlangıç hücresi seçebilir ve aynı "büyüme" süreci ile devam edin. Bu şekilde, her oyuncu için rastgele gürültü yerine güzel boyutlu, tutarlı adalar kümesiyle sonuçlanacaksınız.