Autor Zpráva
Alastor_Kopal
Profil
http://www.magic-quest.kx.cz/hra/dobro/51.php

na té stránce jsem si vytvořil takovou minihru (teď tam neuvidíte panáčka protože nejste přihlášení) ALE když si zobrazíte zdroják vidíte jak jsem to udělal (klasická tabulka se zobrazením polohy - když jste přihlášení)

posouvám jen tím že odečtu nebo přičtu k $radek a $sloupec jenže jak vidíte jsou tam různé terény přes které nechci aby se uživatel dostal a nechci to pracně vypisovat

if($misto == 5 and $sloupec == 6 and $vysledek1 ==  2){}
elseif($misto == 5 and $sloupec == 7 and $vysledek1 ==  2){}
elseif($misto == 5 and $sloupec == 8 and $vysledek1 ==  2){}
elseif($misto == 5 and $sloupec == 9 and $vysledek1 ==  2){}
elseif($misto == 5 and $sloupec == 2 and $vysledek1 ==  1){}


vysledek1 je výsledkem operace radek -/+ 1


EDIT - Jak bych si mohl ulehčit pracné vypisování ? viz.horek
panther
Profil
Alastor_Kopal
v celém tvém příspěvku jsem nenašel ani jeden otazník ani jiný náznak otázky. Zkus tedy napsat, s čím máš problém, s čím chceš poradit...
AM_
Profil
Tak si pomocí array vytvoř nějakou mapu, kam se šlápnout může a kam ne (vzhledem k tomu, že dle obrázku převažují pole, na která stoupnout nelze, ukládal bych pole, na která stoupnout lze, aby array bylo menší), a pak jednoduše ověř, zda se uživatel pohnul na povolené pole
Alastor_Kopal
Profil
Hmm jak ?

$povolene= array(“radek” => “1”,,“radek” => “2”,, “radek” => “3”,, “radek” => “4”,, “sloupec” => “1”,,“sloupec” => “2”,, “sloupec” => “3”,, “sloupec” => “4”,, )


vůbec nemám představu jak to udělat
Joker
Profil
Alastor_Kopal
A jak je uložená ta mapa? Tj. na kterém místě bude jaký terén?

Já bych mapu udělal nějak:
$mapa = array(
1, 2, 3, 3, 
2, 4, 3, 3, 
3, 5, 3, 3, 
3, 6, 7, 7);

...což by mohlo odpovídat 4x4 políčkům v levém horním rohu té mapy (terény v pořadí, v jakém se objevily na mapě: 1 = voda, 2 = voda s břehem na J a V, 3 = les, 4 = cesta ukončená na S, 5 = cesta S-J, 6 = T-křižovatka S-J-V, 7 = cesta V-Z)
Dál je potřeba definovat průchodnost terénu- řekněme, že průchodné jsou ty cesty, tj. terény 4, 5, 6, 7.

Potom stačí zjistit cílové políčko pohybu (vezme se aktuální políčko a podle směru pohybu se příslušná souřadnice posune o 1) a podívat se, jestli je na něm průchodný terén.

V dalším kroku by šlo pokročit na vícevrstvou mapu, tj. že by existovala mapa základního terénu a zvlášť mapa (nebo několik map) pro objekty, které se na tom terénu nacházejí.
AM_
Profil
Alastor_Kopal
zkus trochu zapojit hlavu, a opakuji, nastudovat si základy, jak můžeš mít pole o několika stejných klíčích?
co třeba:
$povolene = array(
  '1-1',
  '1-2',
  '1-3',
  '2-3',
  ...
);
if (in_array("$x-$y", $povolene)){
  //povolene policko
}
Joker
Profil
AM_
To mi nepřipadá ideální. Při každé kontrole musím projít všechny prvky až k tomu, který hledám (pokud tam vůbec není, tak všechna průchozí políčka celé mapy).
Kdyby to měl jako mapu, stačí mu se podívat na jeden konkrétní prvek pole.

Kdybych například na mapě 10x10 chtěl zjistit, které ze 4 základních směrů lze na daném políčku (pokud není na okraji mapy) použít, při téhle metodě budu číst z pole 10-1434x.
Pokud budu mít políčka uspořádaná do mapy, budu číst z pole 4x.

edit: v nejhorším případě to nebude 400x, ale 1434x (na mapě 10x10 je 64 políček se 4 možnými směry, 32 se 3 směry a 4 se 2 směry = 360 celkem, když hledané položky budou až na konci, je to 360+359+358+357 čtení).
Což souvisí i s tím problémem, že 1-2 a 2-1 je v drtivé většině her (kde nejsou jednosměrné průchody mezi políčky) ta samá cesta, ale v tom poli by musela být dvakrát
AM_
Profil
Záleží, co s tím chce dělat, pokud pouze zjišťovat, jestli může daným směrem, pak bude moje metoda možná efektivnější, jelikož pole bude řádově menší. Záleží na tom, jak si PHP ukládá pole, bylo by to na delší výpočty. ale u dynamického pole předem není známa adresa n-tého prvku v paměti, takže se stejně musí přečíst všechny předcházející. Samozřejmě pokud s tím bude chtít dělat další kousky jako složitější členění terénu nebo zjišťování, kudy může dál, bude mapa efektivnější, ale v prvním případě bych se klidně držel tohohle.
Joker
Profil
AM_
pokud pouze zjišťovat, jestli může daným směrem, pak bude moje metoda možná efektivnější, jelikož pole bude řádově menší
Nebude řádově menší. Respektive bude hodně záležet na průchodnosti té mapy.
Při uložení "mapa" totiž bude každé políčko (průchozí i neprůchozí) jeden záznam.
Při tomhle uložení se neprůchozí políčka nemusí evidovat vůbec, zato každé průchozí bude znamenat obvykle 4 záznamy (cesty ze všech okolních políček- na krajích mapy 3 záznamy, v rozích 2 záznamy). Čili pokud víc než 1/4 políček bude průchozích, může to už dát větší pole.

Ještě by ta metoda šla optimalizovat třeba tak, že by se řeklo, že nižší číslo musí být vždy první... tj. místo třeba 2-1 by se uložilo 1-2 a stejně by se upravilo i hledání. I to v závislosti na průchodnosti mapy ale může vyrobit větší pole, než uložení pomocí mapy.
MrVain
Profil
Ja mam jednoduchsie riesenie ;) Ked som ja robil 2D hry mapu som nikdy nepouzival. Jednoducho som zistil farbu pixelu na obrazovke a podla toho posunul. :D Samozrejme musis kontrolovat pixel to pixel ale jednoduche v tvojom pripade na vytvaranie map lebo to mas ako cele pozadie skopirovane s animehcy prophecy printscreenom ;)

Nikde netvrdim ze je to najoptimalnejsie riesenie ale v pripade mapy si budes musiet spravit z obrazka mriezku podla terenu a pouzit v stylopise.
var x,y=0;
function bubbleEvent(objekt)
{
if((e.target.class=='zem')&&(e.VK_RIGHT)) x++;
if((e.target.class=='zem')&&(e.VK_LEFT))  x--;
panacik.top=('w'.x.'-'.y).top;
panacik.left=('w'.x.'-'.y).left;
....
}
<table onKeyPress="bubbleEvent(this);">
<tr><td id=w1-1 class="zem"><td id=w1-2 class="zem"><td id=w1-3 class="voda"><td id=w=1-4 class="voda">
<tr><td id=w2-1 class="zem"><td  id=w2-2 class="zem"><td id=w2-3 class="zem"><td   id=w2-4 class="zem">
</table>

Posielat do PHP request pri kazdom pohybu panacika je dobry sposob ako si zrusit server. :D Najlepsie by bolo pouzit flash.

P.S. Ten kod je iba schematicky a v DOMe tusim na tabulky existuje aj vypocet cisla bunky bez ideciek(w1-1,...) podla objektu Table.rows*,Table.next*,... ale nie som zato plateny tak som lenivy pozriet do dokumentacky ;)
Alastor_Kopal
Profil
aha takže vy mi říkáte že takovou metodou jedině spadne server

s flashem jsem nikdy nepracoval a tak bych se jen chtěl zeptat na pár věcí
1) kde si o flashi přečíst ?
2) na přehrávání flashe potřebuje počítač nějaký program ?
3) může flash spolupracovat s databází ?
4) jak dlouho by asi trvalo vytvořit takovou hru (i se studiem ?)
5) není lepší použít JAVU - tu taky neumím ale jen chci vědět názor odborníků
AM_
Profil
MrVain
Posielat do PHP request pri kazdom pohybu panacika je dobry sposob ako si zrusit server. :D
až bude mít web pár set návštěv za sekundu, stojí to za zamyšlení.
Samozřejmě optimální je řešit pohyb přes JavaScript a komunikaci se serverem obstarat přes AJAX, ale (bez urážky) z příspěvku Alastora mám dojem, že na AJAXové aplikace zatím nemá... Každopádně stejně bych v JS použil mapu, ta kontrola "pixel po pixelu" mě v kombinaci s "nejjednodušším řešením" docela pobavila :)

Alastor_Kopal
aha takže vy mi říkáte že takovou metodou jedině spadne server
pokud nemáš stovky návštěv za sekundu, tak ne. a kdybys měl, řekl bych, že výkon pohoří na jiných věcech :)

na přehrávání flashe potřebuje počítač nějaký program ?
potřebuje flash modul v prohlížeči, ale ten drtivá většina lidí má

může flash spolupracovat s databází ?
přímo ne (pokud ano tak to není dobré), protože by ve flash aplikaci muselo být uložené heslo k databázi a jak by tam jednou bylo, šlo by jej ukrást. Ale může spolupracovat s PHP (vnitřně posílat požadavky podobně jako prohlížeč), ve kterém si vytvoříš rozhraní pro komunikaci s DB.

jak dlouho by asi trvalo vytvořit takovou hru (i se studiem ?)
tak to je dost nejasné, zkušený programátor v jiných jazycích by si zřejmě osvojil znalosti flashe potřebné k rozhýbání panáčka po obrázku během jednoho dne.

není lepší použít JAVU - tu taky neumím ale jen chci vědět názor odborníků
sice ji také neumím, ale vím asi toto: z principielního hlediska je velice podobná flashi (aplikace spustitelná v prostředí prohlížeče na speciální platformě), jen flash je určený pro tvorbu multimediálních aplikaci, proto to bude asi snazší v něm.

Samozřejmě se to dá udělat pomocí JavaScriptu, což má tu výhodu že to spustíš prakticky v jakémkoli prohlížeči, ale pokud neumíš aspoň trochu dobře ani JavaScript, asi pro účely hry bude lepší si nastudovat ten flash ;) Sice JS nemám moc rád, protože se blbě ladí a v každém prohlížeči se chová trochu jinak, ale s trochou dřiny to jde.
Alastor_Kopal
Profil
Takže chci udělat hru která - bude spolupracovat s databází tedy zobrazí ostatní uživatele,potvory a taky poklady a věci na zemi. Těmto požadavkům nejlépe odpovídá- flash - javascript&ajax - java nebo něco jinýho ?
AM_
Profil
flash

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: