Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mapa, układ współrzędnych
MagnuM
post 23.04.2006, 20:38:27
Post #1





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

Ostrzeżenie: (0%)
-----


Witam, chciałbym utworzyć mapę na potrzeby gry.

Prowizorycznie powinna wyglądać następująco.


Kod
y\x     -2       -1      -0      1       2
-2   (-2,-2)  (-1,-2)  (0,-2)  (1,-2)  (2,-2)
-1   (-2,-1)  (-1,-1)  (0,-1)  (1,-1)  (2,-1)
0     (-2,0)   (-1,0)   (0,0)   (1,0)   (2,0)
1     (-2,1)   (-1,1)   (0,1)   (1,1)   (2,1)
2     (-2,2)   (-1,2)   (0,2)   (1,2)   (2,2)


Każdy punkt zawiera osobne właściwości.

1. Jak powinna wyglądać struktura tabeli dla takiej mapy ? (id?, os_x, os_y, [inne])
2. Jak napisać pętlę która będzie wyświetlała bazę dla określonego punktu środkowego (na przykładzie [0,0], lecz chciałbym aby on był zależny od miejsca jakie zajmuje użytkownik na mapie).
3. Jak powinno wyglądać zapytanie do takiej pętli ?

Pozdrawiam.


--------------------
Go to the top of the page
+Quote Post
Master Miko
post 23.04.2006, 20:50:22
Post #2





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


też się kiedyś nad tym zastanawiałem.. może popristu każdej komórce dać inne id, a algorytm odczytywałby ich położenie na podstawie id..

tylko chcesz to zrobić w tabeli html, obrazku gd czy w bazie danych?


--------------------
Go to the top of the page
+Quote Post
MagnuM
post 23.04.2006, 20:56:36
Post #3





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

Ostrzeżenie: (0%)
-----


? wszelkie dane mają być w bazie, chciałbym je dynamnicznie wczytywać za pomocą zapytania do bazy, tworzyłaby się tabela(html) z polami a w nich dane na temat danego pola


--------------------
Go to the top of the page
+Quote Post
Master Miko
post 23.04.2006, 21:01:13
Post #4





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No to tak... ja bym najpierw zdefiniował:
ilość kolumn i wtedy wsadzał do nich id

powiedzmy... że chcesz 200 pól - które będą zamknięte w np. 10 kolumnach. Wyjdzie że będzie 20 wierszy.

Każda komórka w tabeli miałaby własny id także w bazie danych. No i w ten sposób do każdego id mógłbyś przypisać odzielne parametry

id | wartosc
1 | ....
... | ...
200 | ...


1 zapytanie mysql:

"SELECT * FROM mapa ASC"

no i robisz fetch...

dla każdej serii 10 pól robisz 1 TR...


----- edit --------

Jeśli to maiałaby być "interaktywna mapa" do grania... ciężkoby się obliczało odległości... np. między id 40 a 74...

pomysł Bonza też jest dobry... ale np. mi tak bybyło lepiej

Ten post edytował Master Miko 23.04.2006, 21:03:03


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 23.04.2006, 21:02:29
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Hmm...
Kod
x | y | pozostale_parametry

indeksy na x i y

user jest w punkcie: (100, 30), mape chcesz miec o wymiarach: 5x5, czyli od (98,28) (lewy gorny) do (102, 32) (prawy dolny rog).

  1. SELECT x, y, ...
  2. FROM tabela
  3. WHERE x BETWEEN 98 AND 102 AND y BETWEEN 28 AND 32 ORDER BY y ASC, x ASC


Nie wiem jak to wypadnie z wydajnoscia.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
MagnuM
post 23.04.2006, 21:04:42
Post #6





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

Ostrzeżenie: (0%)
-----


Chodzi o to żeby ta mapa była dynamiczna, tzn. mogę z każdej strony mapy dodawać kolumny itd. dlatego użyłem układ współrzędnych, tzn w bazie jest os_x i os_y. Problem jest tego typu że ciężko to wyświetlić.


--------------------
Go to the top of the page
+Quote Post
Master Miko
post 23.04.2006, 21:06:38
Post #7





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(MagnuM @ 2006-04-23 20:04:42)
Chodzi o to żeby ta mapa była dynamiczna, tzn. mogę z każdej strony mapy dodawać kolumny itd. dlatego użyłem układ współrzędnych, tzn w bazie jest os_x i os_y. Problem jest tego typu że ciężko to wyświetlić.

no właśnie... mój sposób nie spełnia Twoich warunków, natomiast dobry sposób bonza jest trudny do wyświetlenia :/



---edit----

Wygląda na to że musisz szukać najniższych wartości, a potem je dodawać... ale trudno zrobić zapytanie mysql do tego blink.gif


---edit---

musiałbyś dać

SELECT y FROM map where x = -2 ASC

no i tak dla każdego x :/

Ten post edytował Master Miko 23.04.2006, 21:09:48


--------------------
Go to the top of the page
+Quote Post
NuLL
post 23.04.2006, 21:12:56
Post #8





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Panowie - zadne tam tabelki - DIVy i nakladanie przezroczystych divow na obrazek - przeciez divovi mozna ustawic x i y.

http://www.flickr.com/photos/peterjlambert/128938562/ - zobaczcie co sie dzieje jak sie najedzie na zdjecie.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Master Miko
post 23.04.2006, 21:17:43
Post #9





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


dobry pomysł... ale czy div w tym momencie będzie obsługiwał wartości ujemne snitch.gif , czy poprostu będzie trzeba dodać do niego wartość i do innecyh też?


--------------------
Go to the top of the page
+Quote Post
MagnuM
post 23.04.2006, 21:23:44
Post #10





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

Ostrzeżenie: (0%)
-----


Rozwiązałem częściowo problem.

  1. <?php
  2. $x = mysql_query("SELECT * FROM mapa WHERE os_x BETWEEN -2 AND 2 AND os_y BETWEEN -2 AND 2 ORDER BY os_x ASC, os_y ASC LIMIT 5");
  3.  
  4. echo '<table>';
  5.  
  6. while ($sqlArray = mysql_fetch_array($x)) {
  7.  
  8. echo '<tr>';
  9.  
  10. $y = mysql_query("SELECT * FROM mapa WHERE os_y = ". $sqlArray['os_y'] ." ORDER BY os_x");
  11.  
  12. while ($sqlArrayX = mysql_fetch_array($y)) {
  13.  
  14. echo '<td class=glowna>('.$sqlArrayX['os_x'].','.$sqlArray['os_y'].')</td>';
  15. }
  16. echo '</tr>';
  17.  
  18. }
  19.  
  20. echo '</table>';
  21. ?>


Tylko że to jest... straszne ;p

Ten post edytował MagnuM 23.04.2006, 21:24:09


--------------------
Go to the top of the page
+Quote Post
ActivePlayer
post 23.04.2006, 21:26:39
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


http://travian.com/

zarejestruj sie, tam jest wlasnie taka mapka, ogolnie duzo tego tam jest...
Go to the top of the page
+Quote Post
Master Miko
post 23.04.2006, 21:27:09
Post #12





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


oczywiście chodzi o to żeby było jak najmniej zapytań mysql... najlepiej byłoby wtedy selectować wszystko jednym polecaniem, a co do wyboru zostawić to skryptowi...


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 23.04.2006, 21:28:58
Post #13





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A co bylo zlego w mojej wersji -- dostajesz jedno wymiarowa tabele, znasz ilosc kolumn w wierszu (5) i dzielisz ta tablice na wiersze po 5 kolumn w kazdym.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
MagnuM
post 23.04.2006, 21:33:45
Post #14





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

Ostrzeżenie: (0%)
-----


Cytat(dr_bonzo @ 2006-04-23 22:28:58)
A co bylo zlego w mojej wersji -- dostajesz jedno wymiarowa tabele, znasz ilosc kolumn w wierszu (5) i dzielisz ta tablice na wiersze po 5 kolumn w kazdym.

No dobrze, a napisz do tego tabele w htmlu, w której komórki są odpowiednio wypełnione danymi z tego zapytania, prosze.


--------------------
Go to the top of the page
+Quote Post
ActivePlayer
post 23.04.2006, 21:35:52
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


hmm
  1. ?><table><?
  2. $i=0;
  3. while($row=mysql_fetch_assoc($res)){
  4. if($i%5==0){?><tr><?}
  5. ?><td><?echo $row['x'];?> - <?echo $row['y'];
  6. $i++;
  7. }
  8. ?></table><?

?
Go to the top of the page
+Quote Post
MagnuM
post 29.04.2006, 18:35:22
Post #16





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

Ostrzeżenie: (0%)
-----


Witam ponownie.

Cytat
y\x    -2      -1      -0      1      2
-2  (-2,-2)  (-1,-2)  (0,-2)  (1,-2)  (2,-2)
-1  (-2,-1)  (-1,-1)  (0,-1)  (1,-1)  (2,-1)
0    (-2,0)  (-1,0)  (0,0)  (1,0)  (2,0)
1    (-2,1)  (-1,1)  (0,1)  (1,1)  (2,1)
2    (-2,2)  (-1,2)  (0,2)  (1,2)  (2,2)



Mapa wygląda w sposób następujący. Pogrubione pole oznajmia, że znajduje się na nim jakaś dodatkowa wartość. Chciałbym wykonać zapytanie które wybierze mi pole które będzie odległe o przynajmniej jedno pole od tego które ma jakąkolwiek wartość.

Struktura bazy: os_x, os_y, wartosc

pozdrawiam

Ten post edytował MagnuM 29.04.2006, 18:38:07


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:16