Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Dobrý den,
řeším problém generace náhodného rozmístění PC postav, hlavního hrdiny a překážek. Tedy potřebuji po ploše rozmístit tyto 3 akty. Jenže nikdo se s nikým nesmí překrývat (a bylo by lepší, kdyby PC postavy byly od překážek dál, než 1 pole) a současně musí být rozmístěni všichni. Každá skupina totiž dostane počet, kolik členů musí zastoupit. Vzal jsem tedy cyklus, kterým projíždím hrací plochu políčko po políčku. Jenže pod jakou podmínkou mám na dané políčko přidat nic, PC postavu, překážku, či hrdinu? (Hrdina 1, PC postav zatím 10, překážek rovněž 10.) Mohu použít náhodu - jenže pak bude riziko, že se nerozmístí všichni. Tudíž jak na to?
Děkuji.
Offline
↑ Matesax:
Ahoj, řešil bych to zhruba takto. Prvním cyklem bych projel všechna políčka a rozmístil překážky. Druhým cyklem bych si do nějakého pole vypsal adresy políček, které jsou volné a které vyhovují podmínce na vzdálenost. Pak je jen třeba doufat, že vyhovujících políčet bude alespoň tolik, co PC postav a hlavního hrdiny.
PS: Neříkám, že to je nejlepší a nejrychlejší řešení.
Offline
Kdybych chtěl používat více cyklů, tak to vyřeším efektivněji. Tedy udělal bych si list volných pozic a postupně mazal zaplněné plochy. Zde se ptám, zda-li neexistuje možnost jednoho pěkného, krátkého cyklu... (Podmínka vzdálenosti PC postav od překážek je v závorce, jelikož pro mě má přednost jednoduchý vzoreček)
Offline
Přišel jsem na jednoduchý vzoreček, který umožňuje dokonce i tu podmínku vzdálenosti mezi AI a překážkou. Asice mám 3 čísla - počet AI, počet překážek a rozlohu hrací plochy. Velikost hrací plochy snižuji při zvolení jakékoliv možnosti. V každém cyklu generuji náhodné číslo v rozmezí rozlohy zbývající plochy. Pak se ptám je-li náhodné číslo zmenšené o počet nevygenerovaných AI, překážek, či hrdiny menší než počet AI, generuj AI a sniž počet AI o 1 a tak pro každou možnost...
for(int x = 0; x < Console.WindowWidth; x++)
for(int y = 0; y < Console.WindowHeight; y++)
{
int randomNumber = NumberGenerator.New(consoleArea);
if(randomNumber < heroCount)
{
consoleArea--;
heroCount--;
Hero.X = x;
Hero.Y = y;
Hero.Draw();
break;
}
randomNumber -= heroCount;
if(randomNumber < barriersCount && randomNumber > 0)
{
consoleArea--;
barriersCount--;
Barriers.X[barriersCount] = x;
Barriers.Y[barriersCount] = y;
Barriers.Draw(barriersCount);
break;
}
randomNumber -= barriersCount;
if(randomNumber < aiCount && randomNumber > 0)
{
aiCount--;
AI.X[aiCount] = x;
AI.Y[aiCount] = y;
AI.Draw(aiCount);
}
consoleArea--;
}
Offline