Zdravim,
Robim jednu malu hru v ktorej ma hrac moznost pohybovat sa po roznych miestach. Chcem docielit to, ze medzi miestami bude nejaka vzdialenost a teda sa bude umerne zvysovat cas za ktory prejde hrac z bodu A do bodu B.
Na koniec som sa rozhodol ze najjednoduhsie to bude urobit formou 2D mriezky a pomocou suradnic X a Y. Teraz sa uz dostavame k mojmu problemu. Ako mam pocitat cestu z jednej suradnice, do suradnice druhej?
Obrazok:
http://fumpr.com/images/r9p1pyitd1tax0p66s1.jpg
Potrebujem sa dostat zo zeleneho pola do cerveneho (nie diagonalne).
Ak vas napada jednoduhsie riesenie pre mapu pre hru ako som vyssie popisoval, prosim podelte sa so mnou.
Pozn: Pouzivam databazu: tabulka players a v nej stlpce x,y;
tabulka world_map a v nej stlpce x,y;
Myslis jako spocitat cestu tak, ze obejdes prekazku? (jako ze nektere mista jsou nepruchodne)?
___
Jeslti to chapu spravne, tak beznou metodou, kdy zatacis u prekazek porad doprava nebo doleva to asi nepujde - zrejme budes muset interval pro zmereni vzdalenosti nejak rozdelit .. (na ktere pote budes moc pouzit klasiku se zatacenim/obchazenim zprava nebo zleva.. ) - jen me ted nenapada zadne konretni reseni :(
Chapes to spravne. Keby si ty niekedy robil podobnu hru, ako by si vyriesil moj problem? Teraz pust z hlavy moje navrhovane riesenie.
<HTML>No, jednoduše ;) Nebudu psát žádný PHP kód, ale v podstatě zhruba takto:
Na začátku umístíme do startu 0, všechna ostatní políčka jsou prázdná.
V každém dalším kroku vezmeme každé políčko s aktuálním číslem (0,1,2,3.. atd.) a umístíme číslo o jedničku vyšší na sousední políčka (pokud tam není překážka nebo pokud tam už nějaké číslo není). A zvýšíme aktuální číslo. (Takže v prvním kroku 0, v druhém kroku 1, v třetím 2 atd.)
Toto opakujeme, dokud neumístíme číslo do cíle.
Pokud jde pouze o vzdálenost, tu jsme našli - je to to číslo v cíli ;)
Pokud jde o cestu, tu lze dohledat zpětně - od cíle do startu je to vždy po políčkách, jejichž hodnota postupně klesá ;)</HTML>
<HTML>Svůj druhý příspěvek zaměřím na mapu do hry jako takovou. Pozice míst na mapě budou asi vždycky značeny souřadnicemi x,y. Její vykreslení je možné udělat pomocí GD, případně pomocí šikovně pozicovaných divů.
Pohyb po mapě - pokud se to nemusí animovat, neviděl bych v tom problém. Vzdálenost mezi dvěma body je podle pana Pythagora = sqrt(($ax-$bx)*($ax-$bx) + ($ay-$by)*($ay-$by)).
Pokud má dojít k animaci, je délka přímky samozřejmě důležitá. Animace by musela probíhat podle rovnice přímky bod_X = bod_A + (bod_B - bod_A) * t, kde t je mezi 0 (na začátku) a 1 (na konci).</HTML>
<HTML>Třetím příspěvkem svoje nápady uzavřu. Pokud jsou na mapě překážky a chceme používat nějaký přímý pohyb, asi nejlepší řešení je vytvoření sítě možných pohybů (ideálně mezi předdefinovanými body, např. městy, planetami apod.) a z té buď dávat hráči na výběr (hráč si vybere cestu), nebo z toho ten pohyb poskládat (hráč si vybere cíl). Pak už je to hledání cesty v tzv. grafu, doporučuju nastudovat <a href="http://en.wikipedia.org/wiki/Dijkstra's_algorithm">Dijkstru</a> nebo něco takového.
Snad jsem to pochopil dobře. Pro tvůj případ je nejvíc platný můj první příspěvek, pokud uvažuješ nad jiným celkovým řešením, věnuj pozornost těm zbylým dvěma.</HTML>
http://fumpr.com/images/0ccft2mmzhhlzk769rjz.jpg
Pochopil som to spravne?
Poznamka c.1: Si dobry
Poznamka c.2: Si dobry
Poznamka c.3: Pomohol by si mi prosim s PHP kodom? Nemusi byt cely len nejaky zaklad.
Este jeden maly dotaz na koniec: Uplne si ma tou metodou ohromil, doma som nad tym sedel hodinu-dve a stale ma nenapadalo komplexne riesenie. Kde si na to prisiel?
<HTML>Ten způsob řešení: to je taková všeobecná programátorská vědomost (osobně jsem o něm poprvé slyšel na jedné soutěži) ;) A pochopils to správně (proto ti taky vyšla nejkratší cesta).
Ad 3 - Co se týče množství cest od bodu A do bodu B - to nehodlám řešit, v databázi to není problém uložit (id_cesty, id_bodA, id_bodB, vzdalenost). Co se týče implementace hledání nejkratší cesty z bodu A do bodu C, použití Dijkstry je velmi šikovné - dobře vysvětlené a v několika programovacích jazycích najdeš na http://en.giswiki.net/wiki/Dijkstra's_algorithm.</HTML>