Matematické Fórum

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

#1 05. 08. 2013 10:25 — Editoval Matesax (05. 08. 2013 10:26)

Matesax
Zelenáč
Příspěvky: 9
Škola: Zdravotnická
Reputace:   
 

Algoritmus generace hrací plochy

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

 

#2 05. 08. 2013 10:49

rleg
Místo: Ostrava
Příspěvky: 921
Škola: VŠB FMMI (10-16, Ing.)
Reputace:   46 
 

Re: Algoritmus generace hrací plochy

↑ 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í.


Radim, tedy jsem.

Dobrá rada je drahá, ta moje je zdarma.

Offline

 

#3 05. 08. 2013 10:59 — Editoval Matesax (05. 08. 2013 11:01)

Matesax
Zelenáč
Příspěvky: 9
Škola: Zdravotnická
Reputace:   
 

Re: Algoritmus generace hrací plochy

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

 

#4 05. 08. 2013 14:04 — Editoval Matesax (05. 08. 2013 14:16)

Matesax
Zelenáč
Příspěvky: 9
Škola: Zdravotnická
Reputace:   
 

Re: Algoritmus generace hrací plochy

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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson