
Rozřazování po skupinkách
Ahoj,
chystám funkci do jedné minihry na jednom serveru a řeším, jak to co nejefektivněji a nejlogičtěji provést.
O co jde:
Zkrátka, když se teď hráči do té minihry připojí, tak je server automaticky přidělí do jedné z osmi frakce - konkrétně do té, kde je nejmíň hráčů. Pokud je ve 2 nebo více frakcích stejný počet hráčů, server náhodně jednu z nich vybere.
No a já chci přidat funkci, že si hráči budou moci založit skupinu se svými přáteli - skupina bude velká 2-7 lidí - a pokud se ti hráči s danou skupinou do hry připojí, tak budou všichni ve stejné frakci. Nutno podotknout, že všichni hráči a všechny skupiny jsou do frakcí přidělení ve stejnou chvíli - na začátku kola.
Otázka zní, jak to naprogramovat tak, aby se server o přidělení automaticky postaral a to tak, že ve všech frakcích bude pokud možno stejně hráčů, nebo se to tomu bude hodně blížit. Skupin může být samozřejmě víc, platí, že každý hráč může být jen v jedné skupině naráz.
Takže bude třeba
20 jednotlivců
4 skupiny po dvou
3 skupiny po třech
6 skupin po čtyřech
atd...
a server to musí nějak rovnoměrně rozdělit mezi těch 8 frakcí, aby všude bylo pokud možno stejně hráčů.
Nějaké nápady? Budu moc rád, pokud mi pomůžete.
Díky :)
To náhodné přidělení do frakcí s nejméně lidmi bych ponechal, akorát bych při tom zařazování začal od skupin s nejvíce lidmi a pokračoval až k jednotlivcům.
To je v podstatě tohle:
Batoh
není to zbytečně složité?
V podstatě může nechat prvotní rozřazování, jen před něj vřadí ještě jeden proces - Seřadit jednotlivé "klany" podle počtu hráčů, těm největším osmi přidělit tým (pokud je klanů více než maximálních 8 týmů), zbylé klany přidat do týmu k menšímu klanu a zbytek ponechat na algoritmu původního rozdělení.
Teoreticky to může vygenerovat nerovnováhu v počtu hráčů jednotlivých týmů (pokud např. budou všichni klanoví, a jen pár neklanových), ale to by šlo ošetřit na úrovni rozřazování těch nejmenších klanů.