Zkusil bych do google: rovnomerne rozmisteni v prostoru algoritmus
Z toho vypadne treba https://cent.felk.cvut.cz/…9/kap09.html
Obvykle to resim takto...
Hraci plocha
- seznam volnych policek ulozim do pole
- nahodne vyberu policko random(pocet)
- smazu policko z pole obsazenych (push, pop, nebo cyklem)
Plocha jako obrazek
- urcim volna policka jako kruhy v obrazku (tady se da vyuzit setiuhelnikove hledani; a nebo v dokonalejsim systemu hledani po kruhove draze od stredu v r+r/2 a tam hledat, zda lze umistit kruh)
- ulozim do pole volnych typu random a take ulozim take seznam sousedu (tim se mi zjednodusi random na pole a nemusim porad testovat, zda se do obrazku vejde ci nevejde potvora)
- pak si urcim, zda ta potvora ma letat nebo je zemni a udelam si pro kazdy typ potvor vlastni seznam volnych policek odkazujicich na id z uplneho seznamu (u pozemniho typu je nesmysl umistovat potvoru na pole ktere je ze vsech stran uzavrene a potvora se nemuze nikam hnout)
A pokud chces rozmistovat rovnomerne, tak bych prochazel pole volnych od 0 do max (postupoval bych podle sousedu daneho policka okolo) a nahodne vybral umistit ano/ne. Po rekneme 10 polickach bych spocital pocet obsazenych a volnych a podle toho pomeru pak vypnul obsazovani nebo vyrazne snizil pravdepodobnost.
0 1 2 3
4 5 x x
8 9 x x
// sousedy (prakticky treba herni planek http://mlich.zam.slu.cz/…rd/jbird.htm)
all[0] = [-1,-1,1,4,0] //vlevo nic, nahore nic, vpravo 1, dole 4, typ policka (zem, more, vzduch)
all[1] = [0,-1,2,5,0]
all[1] = [0,-1,2,5,1] ...
zem[0] = 0 (id z all)
zem[1] = 1
more[0] = 2
V tom prikladu to mam bez hledani, zda policko s nekym sousedi.
V te hre je to tahle cast kodu
f.all[l] = {char:d[k],coords:{x:x,y:y}};
if (d[k]==type[1])
{
f.space[f.space.length] = l;
}
else {if (d[k]==type[2])
{
f.space[f.space.length] = l;
f.wings[f.wings.length] = l;
}
else {if (d[k]==type[3])
{
f.ground[f.ground.length] = l;
}
else {if (d[k]==type[4])
{
f.space[f.space.length] = l;
f.wings[f.wings.length] = l;
f.monster[1][f.monster[1].length] = l; //ball
}
else {if (d[k]==type[5])
{
f.space[f.space.length] = l;
f.wings[f.wings.length] = l;
f.monster[1][f.monster[1].length] = l; //ball
f.monster[0][f.monster[0].length] = l; //snake_egg
f.monster[2][f.monster[2].length] = l; //unused
}
else {if (d[k]==type[6])
{
f.ground[f.ground.length] = l;
f.monster[3][f.monster[3].length] = l; //snake mutate
}
else {if (d[k]==type[7])
{
f.ground[f.ground.length] = l;
f.player[f.player.length] = l;
}
else {if (d[k]==type[8])
{
f.monster[4][f.monster[4].length] = l; //cat
}}}}}}}}
l++;
}}