29. 3. 2010

Vodní cesty jako téma - podruhé

Na svůj článek "Vodní cesty jako téma" jsem dostal do emailu rozsáhlou a odbornou reakci. Její část, která je pro inspiraci gamedesignéru, jsem se dovolil zveřejnit s tím, že autor si nepřeje být jmenován. Dle referencí ale jde o odborníka na vodní cesty, nikoliv na hry - avšak i jeho postřehy jsou z hlediska herní inspirace poutavé. Neboli - nejsem autorem následujícího textu. Provedl jsem pouze minimální korekturu a kosmetickou úpravu.

Dovedu představit jiná témata z oblasti vodní dopravy, která by se dala upravit do docela zajímavé hry, podobné tomu Gordikonu. Pokusím si princip nastínit.

Prvá se týká proplavování velkou plavební komorou, např. v Gabčíkově. Na Dunaji plují plavidla a soupravy nejrůznější velikosti od malých osobních lodí po soupravy, vyplňující zcela plavební komoru. Ta připlouvají do rejd před komorou zcela náhodně – lépe řečeno: jejich počet za určitý časový interval se řídí Poissonovým rozdělením pravděpodobnosti, které se dá v počítači dost snadno modelovat, je-li k dispozic vhodný generátor náhodných čísel, který nemá sklon k degeneraci. Náhodný je i typ právě připlouvajícího plavidla (i když v dlouhém časovém období je pravděpodobnost výskytu daného typu dána jeho podílem na celkovém lodním parku na vodní cestě). Hráčem může být plavidelník, který obsluhuje plavební komoru a signalizací reguluje vjezd plavidel do ní, přičemž všeobecně platí, že „kdo dřív přijde, ten dřív maže“, což je běžná zásada v úlohách řešených podle teorie „hromadné obsluhy“. Plavidla v komoře tvoří určitý soubor, který může být úplný (plavidla společně zabírají celou půdorysnou plochu komory), nebo neúplný K neúplným souborům odchází velmi často, neboť nastávají situace, kdy je komora sice poloprázdná, plavidelník však musí zahájit proplavení, neboť další plavidlo není na obzoru a čekat nelze, protože se v opačném směru již vytváří dlouhá fronta čekajících na proplavení. Nebo nastávají situace, že v komoře je sice ještě místo, avšak následující plavidlo v řadě je příliš velké a nevejde se do něj.

Tahle otázka mne velmi zajímala, neboť z pravděpodobnosti výskytu každého souboru je možno určit velikost středního souboru a tedy i střední počet tun, připadajících na jedno proplavení, což je základní vstupní hodnota pro určení dopravní kapacity plavební komory, resp. vodní cesty. Dosavadní metody byly příliš nepřesné, resp. vycházely z nepřípustných zjednodušení. Tak jsem se do toho pustil (mj. v rámci širší práce, která měla zavést metody „traffic engineeringu“ do vodní dopravy a měla sloužit jako doktorská disertace, jenže rodná strana mne nedoporučila a nepřipustila, abych práci obhájil). Myslím, že jsem spolehlivou metodu odvodil. Připouštím, že je jednoduchá u malých plavebních komor, ale dosti pracná u velkých. V případě Gabčíkova např. vyšlo, že z plavidel (souprav) 7 typů lze sestavit 138 možných souborů a určit pravděpodobnost jejich výskytu dá trochu práce.

Pozor! Až potud to ale není hra, ale čisté uplatnění stochastických zákonů. Hra se z toho může stát v okamžiku, kdy připustíme (a to odpovídá praxi), že se plavidelník do procesu vloží a bude „pravděpodobnost“ upravovat vlastní strategií s cílem např. proplavit co nejvíce lodí (zvýšit kapacitu plavební komory), a to s minimálním počtem cyklů (s minimálními nároky na proplavovaní vodu, kterou „ujídá“ vodní elektrárně), snížit časové ztráty lodí čekáním před plavební komorou apod. Má k tomu několik možností:

• Porušit náhodné pořadí lodí, čekajících na proplavení tím, že dá přednost těm, které sice jsou na druhém či dalším místě ve frontě, s výhodou však využijí volné místo.
• Dát přednost osobním lodím, plujícím podle jízdního řádu (např. „raketám“ na lince Bratislava – Budapešť) před nákladními plavidly (což se skutečně děje).
• Vyčkat na plavidla blížící se ke komoře (o tom má perfektní přehled, neboť ta se hlásí vysílačkou a udávají svoji okamžitou polohu), resp. uvážit, zda zdržení plavidel, která už v komoře jsou (nebo která čekají v opačném směru) je snesitelné.
• Přikročit k „jalovému proplavení“, tj. k plnění nebo prázdnění plavební komory bez lodí, a tak uspokojit nároky v opačném směru. Je také možno určit časový limit (a to alternativně), jak dlouho má na plavidla vyčkávat.
• Vyzvat připlouvající plavidla ke zvýšení rychlosti, aby příliš nezdržovala plavidla nacházející se již v komoře, nebo naopak k jejímu snížení, aby zbytečně nečekala v rejdě (snížením rychlosti se uspoří palivo, ale pozor – při protiproudní plavbě nesmí snížení klesnout pod určitou mez, aby spotřeba naopak nestoupala V extrémním případě – blíží-li se rychlost protiproudní plavby k nule, měřeno vůči břehu, se vlastně spotřeba blíží nekonečnu, neboť loď stojí na místě, avšak motory pracují).

Je samozřejmé, že hustota provozu by měla být „nastavitelná“, stejně tak jako struktura lodního parku. Z teorie (i z praxe) vychází, že v okamžiku vyčerpání teoretické kapacity na 70 % se začnou tvořit dlouhé fronty a na 100% teoretickou kapacitu využít nelze – pak rostou fronty čekajících lodí nade všechny meze.

Úloha plavidelníka může být ztížena tím, že bude mít k dispozici dvě plavební komory (což v Gabčíkově platí, pokud není jedna z nich v opravě), nebo tím, že jsou komory sdružené, tj. při prázdnění jedné se přepouští část vody do druhé a tak se snižují nároky na vodu na 50 %. To je dost běžné (ovšem gabčíkovské komory sdružené nejsou), jenže to vyžaduje synchronizaci obou komor a tedy opět vhodnou strategii plavidelníka.

Druhá myšlenka se týká plavby kaskádou plavebních komor a dala by se aplikovat na úsek Mělník – Chvaletice (kdy byl kdysi slušný provoz, dnes to tam však chcípe). Jde o to, že při vhodném poměru mezi dobou, potřebnou na proplavení, a dobou potřebnou na plavbu danými zdržemi, by mohly všechny komor pracovat ve vhodném cyklu a plavidla, doplouvající k nim, by na proplavení nečekala. Tento poměr však při různých a náhodně volených délkách zdrží není dodržen, takže čekání na proplavení je zákonité a roste s hustotou provozu. Dá se mu zabránit tím, že vůdce plavidla podle potřeby zrychlí plavbu (za cenu zvýšení spotřeby paliva), nebo naopak (když vidí, že nedopluje včas) zpomalí a spotřebu sníží (specifická spotřeba roste s kvadrátem rychlosti!). Nebo přesvědčí plavidelníka, aby na něj počkal. Jeho strategie musí ovšem počítat s provozem v protisměru, který se opět dá modelovat Poissonovým rozdělením (Ovšem pozor! To platí pouze při vstupních bodech kaskády v Mělníce a ve Chvaleticích - na poměrně husté kaskádě se plavidla časem srovnají do „taktu“, zvlášť při vysokém zatížení. Proto se taky vlastně nikdy neosvědčil vyhlášeny grafikon plavby – pravidelnost se postupně vytvořila sama). Cílem vůdce plavidla (hráče) může být buď minimalizace doby průjezdu úsekem, nebo minimalizace spotřeb paliva, případně obojí (tj. docílení minimálních nákladů).

Za sebe ještě dodám, že v prvním konceptu si umím předsavit hru na enginu podobnému Trash Panic, akorát by šlo o pohled z ptačí perspektivy a gameplay by se dal přirovnat Tetrisu. Jako minihra ve Flashi - na začátek - proč ne?

5 komentářů:

  1. Z toho by mohla být hezká flashovka - jediná otázka by asi byla kdy by hra končila, tj. kdy by bylo možný prohrát. Jedna možnost je příliš velké nahromadění čekajících lodí jako v tetrisu, druhá možnost - každá loď by měla "náladu" a při příliš dlouhém čekání by se rozzuřila, s tím že třeba nákladní lodě by byly trpělivější a vydržely déle čekat...

    OdpovědětVymazat
  2. s obtížností by se mohlo pracovat tak, že jednotlivé levely by byly dány skutečnými přehradami, od malých a jednoduchých až po obří a složité.

    OdpovědětVymazat
  3. Píšeš to velice dobře. Taky by šlo pracovat s časovým limitem a kolik hráč "vydělá peněz". Nebo by se hrálo jen na nejvyšší score - přičemž game over by nastal v okamžiku, kdy by hráč pustil do komory loď (či více lodí), která se tam nevejde.

    Viděl bych to asi tak - udělá se 20-30 typů lodí. Budou mít svou velikost a také "náladu" - jak moc spěchá. Asi by byla blbost, aby se leď otočila (leda nějaké malé čluny), protože jinou cestu na vodě jen tak nenajdeš. Ale - délkou čekání by se snižovalo score, které za převoz dostaneš. A tak velké lodě budou za hodně bodů, ale spěchají-li, tak po dlouhém čekání získá hráč jen zlomek bodů nebo i žádné.

    A samozřejmě - počet lodí dělá násobič bodů za jedno převezení.

    Uděláš to? ;)

    OdpovědětVymazat
  4. jako jo, rád, je to prima námět. S časem to je trochu horší ale nějak to určitě půjde..
    Ještě jedna možná situace - čeká ti spousta lodí a najednou přijede speciální milionářská jachta za spoustu bodů (nebo peněz), když jí pustíš přednostně. Při protekci se ale nálada ostatním lodím zhorší a ty musíš odhadnout jestli ostatní lodě stihneš odbavit tak, aby se nenasraly úplně a ty jsi neprohrál...

    OdpovědětVymazat
  5. Pohled zvrchu, lodě z obou stran (přičemž složitější úrovně mohou mít více komor o různých velikostech). Hráč bude klikat na přibývající lodě (a to ať už aktivuje pohyb DO komory, tak může kliknout na loď v komoře a vyhodit ji VEN). Samo by tam byla nějaká jednoduchá AI, která by loď zaparkovala s efektivním využitím prostoru. Druhou možností je loďě skládat ručně (včetně rotace) a řešit jen detekci kolizí.

    OdpovědětVymazat