Autor Zpráva
PHP_Nemaster
Profil
Dobrý den,
jako mnoho lidí se pokouším udělat browser hru, a k ní patří i mapa.

Chci ji udělat jednoduše, tak jsem podíval jak ji mají udělanou v DK ( Die-staemme.de ), tam ji mají řešenou jako obyčejnou tabulku, kde TD má jako pozadí obrázek vesnice, nebo trávy atd.

Ukázka:

Mapa

-------------------------------------------------------
Pokusil jsem se něco takového udělat, ale nepovedlo se:

DATABÁZE
pole_ id    hrac_id    typ
1               1             vesnice
2               0             prazdne
...


Podle typ se rozhoduje, zda bude pozadí vesnice.gif, nebo prazdne.gif.

------------------------------------------------------

Chci to gerenerovat jako čtverec 25 x 25, tedy 25 sloupců v jednom řádku a 25 řádků tabulky, ale nevím jak...


<table cellspacing="0">
<?php
 $select_mapa = "SELECT ... LIMIT 0, 625"
 
 while( $row = mysql_fetch_array( $result_mapa ) ) { ?>
 
         <tr>
           <td>... ??? 


A ted nevím, jak pokračovat, vygeneruje mi to bud 625 řádků, a nebo 625 sloupců, jak to napsat tak, aby to dělalo čtverec 25 sloupců x 25 řádků?

Poradte prosím

Předem děkuji za odpověd
xmark
Profil
Chceš tvořit hru a nezvládáš dva vnořené cykly? Nechceš začít něčím jednodušším?

for ($i = 1; $i <= 25; $i++) {
  echo "<tr>";
  for ($j = 1; $j <= 25; $j++) {
    echo "<td>x</td>";
  }
  echo "</tr>";
}
PHP_Nemaster
Profil
Dík, zkusím to.
Jenom ted nevím - kam mám dát ten cyklus while?

Já už mám tu hru hotovou, jenom jsem nevěděl jak na tu mapu.
Trsak
Profil
mohl bych se podívat na tu hru?
xmark
Profil
PHP_Nemaster:

Jestli chceš do tabulky vypisovat něco z databáze, musíš na to jít jinak.
Začni tím, že vypíšeš <table> a <tr>
V cyklu while při každém průchodu vypíšeš <td>xxx</td> a k nějaké pomocné proměnné přičteš jedničku.
Pak ověříš, jestli ta pomocná proměnná není šestnáct. Když není, jdeš dál. Když je, ukončíš řádek, začneš nový, vynuluješ tu pomocnou proměnnou a pak jdeš dál.
Keeehi
Profil
xmark:
Klidně by mohl použít ten kód z [#2].
for ($i = 1; $i <= 25; $i++) {
  echo "<tr>";
  for ($j = 1; $j <= 25; $j++) {
    $row = mysql_fetch_array( $result_mapa );
    echo "<td>$row</td>";
  }
  echo "</tr>";
}

PHP_Nemaster:
Mě by docela zajímalo, jak víš, na kterých souřadnicích je třeba pole s id 426. Pokud tvůj svět mám 625 polí a ty jich v mapě zobrazuješ 625, tak to by šlo. Ve většině her jsem ale viděl větší světy a na mapě se zobrazovala jen část. Je pravda, že i jenom s id to neřešitelné není, ale výsledek není to pěkné řešení. Příklad:
//svět 1000x1000, zobrazit 10x10, levý horní má id 324574
$select_mapa = "SELECT * FROM tabulka WHERE
(id BETWEEN 324574 AND 324583) or
(id BETWEEN 325574 AND 325583) or
(id BETWEEN 326574 AND 326583) or
(id BETWEEN 327574 AND 327583) or
(id BETWEEN 328574 AND 328583) or
(id BETWEEN 329574 AND 329583) or
(id BETWEEN 330574 AND 330583) or
(id BETWEEN 331574 AND 331583) or
(id BETWEEN 332574 AND 332583) or
(id BETWEEN 333574 AND 333583)";

Toto opravdu není hezký dotaz. Proto se mi zdá lepší, přidat do tabulky dva sloupce x a y. Dotaz při stejném zadání by pak vypadal takto:
$select_mapa = "SELECT * FROM tabulka WHERE (x BETWEEN 574 AND 583) AND (y BETWEEN 324 AND 333)";
Což je o hodně hezčí.

Za další mi přijde zbytečnost ukládat do databáze prázdná pole. V databázi bych měl uloženy jen vesnice. A je jasné, že tam kde není záznam pro vesnici tam je prázdno. Tím se zmenší počet záznamů v databázi. (v nejhorším případě jich bude stejně)
xmark
Profil
Keeehi:
Klidně by mohl použít ten kód z [#2].

Jasně, mohl. Jen by to chtělo, aby přesně věděl, co a v jakém pořadí z tabulky vytahuje. A musel by mít jakousi principielní jistotu, že těch 625 řádků tam opravdu je.
PHP_Nemaster
Profil
Děkuji všem, zkusím to.

xmark:
V cyklu while při každém průchodu vypíšeš <td>xxx</td> a k nějaké pomocné proměnné přičteš jedničku.

Tohle jsem zkoušel, ale nevěděl jsem jak to udělat s tou proměnnou. Mohl byste prosím ukázat nějaký příklad?

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:

0