Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Mapa do gry
michal16202
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.05.2014

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


Witam, od jakiegoś czasu robię grę ekonomiczną a'la plemiona i napotkałem problem. Nie mam zielonego pojęcia jak zrobić do niej mapę z podglądem na miasta (nie podgląd budynków w mieście). Wymyśliłem że podgląd mapy będzie miał rozmiar 10 miast na 10 miast czyli będzie widać ich jednorazowo maksymalnie 100 więc wpadłem na pomysł aby do każdej poziomej linijki dać pętlę for która sprawdzała by czy na danej pozycji znajduje się miasto czyli rekord w bazie ale niestety nie wiem jak to zrobić.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
daniel1302
post
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Masz 2 wyjścia(zawsze jest ich więcej) lepsze i gorsze i oba w zasadzie są jednakowo proste.

1) Albo tj ty to wymyśliłeś, że dla każdego pola na mapie pobierasz dane osobno w pętli i umieszczasz na mapie ale jest to czasochłonne i procesorzerne.

2) Pobierasz dane z bazy(miasta) które mają określoną pozycję w sposób jak niżej:
Załóżmy, że punktem odniesienia jest środek(albo jego okolice). Jeśli przeglądamy mapę od początku to będą widoczne pola X od 0 do 9 włącznie i w osi Y tak samo od 0 do 9.
Punkt odniesienia(np który przesuwa się po naciśnięciu strzałek) to będzie dla ww. danych np (X;Y) = (4;4)
Teraz obliczamy jakie pola widać:
Kod
Xmin = X-4 = 0,
Xmax = X+5 = 9

Ymin = Y-4 = 0
Ymax = = Y+5 = 9.


I teraz pobierasz wszystkie rekordy gdzie:
...
Kod
WHERE X BETWEN Xmin-1 AND Xmax+1 AND Y BETWEN Ymin-1 AND Ymax+1;


później w pętli sprawdzasz pobrane dane i umieszczasz je w tablicy mapy np
  1. $mapa = array();
  2. foreach ($results as $result) {
  3. $mapa[$result['x']][$resuls['y']] = $result['villageid'];
  4. }

A później w pętli rysujesz po jednym wierszu mapy i sprawdzasz czy istnieje w tablicy $mapa rysowane pole i jeśli istnieje to wstawiasz odpowiedni rysunek i jak na niego kliknie to coś tam się dzieje np uruchamia się skrypt ajax który pobierze kod z db o danej wiosce i wyświetli go w okienku albo cuś...
Go to the top of the page
+Quote Post
michal16202
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.05.2014

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


Właśnie zdałem sobie sprawe ile jeszcze muszę się nauczyć. Czy możesz mi to rozpisać troche jaśniej? Dla ciebie może się to wydawać banalne ale dla mnie jest wyższa filozofia.
Go to the top of the page
+Quote Post
daniel1302
post
Post #4





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Mam gdzieś mapę napisaną właśnie w oparicu o plemiona (obrazki widze), znalazłem ją teraz ale nie wiem kiedy została napisana, mam date utworzenia z 2012 ale to napewnie nie wtedy napisałem ją.

Tutaj link do mojego projektu(wyciąłem co uznałem za słuszne ale nie wiem czy wszystko): https://drive.google.com/folderview?id=0Bwb...amp;usp=sharing

A tutaj masz multum informacji na twoj problem: http://forum.gammo.pl/search.php?searchid=461219
Go to the top of the page
+Quote Post
michal16202
post
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.05.2014

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


Coś z tym porobię ale raczje wątpie że coś zrobie bo nie znam js a co do drugiego linka pisze mi "Niestety - brak wyników. Proszę spróbować użyć innych zwrotów". Dam znać za jakiś czas bo żadko siedze ostatni przy kompie.

Przejrzałem tą twoją mapkę i stwierdzam że nie mam zieolnego pojęcia jak ją odpalić a tym bardziej nie wiem jak działa jednym słowem czarna magia. Na tym foum co podałeś link znalazłem mapkę ale nie do końca o to mi chodziło, jest tam kod który dzieli mapę na "wyspy" a ja właśnie zamierzam uniknąć czegoś takiego.

Jest progress, postanowiłem jednak użyć tej mapy z forum z tego linka, oświeciło mnie jak siedziałem na kiblu ale niestety znowu wyszły jakieś błędy których nie wiem jak naprawić bo nawet print odmawia posluszeństwa. Błąd jest taki "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\WebServ\httpd\mapa.php on line 25" a kod natomiast jest taki.
  1. <?php require_once 'engine/init.php'; include '/modules/header.php';?>
  2. <?php
  3.  
  4. echo '<div id="drag"><div class="inside drag">'; //pobieramy z css'a wymiary itd.
  5.  
  6. $sql = mysql_query("SELECT * FROM miasta WHERE Gracz='Player'"); // pobieranie x i y mojego miasta i dodanie do petli ponizej "jak?"
  7. for ($i=0; $i<=9; $i++) //pętla która liczy współrzędne od 0 do 9 poziomo
  8. {
  9. $x = $i * 40 + 15; // liczymy co ile ma się pokazywać współrzędna
  10. echo "<div style='position:absolute; top:-20; left:$x'>$i</div>"; // pokazujemy wsółrzędną
  11. }
  12.  
  13. for ($i=0; $i<=9; $i++) //pętla która liczy współrzędne od 0 do 9 pionowo
  14. {
  15. $x = $i * 40 + 15;
  16. echo "<div style='position:absolute; top:$x; left:-20'>$i</div>";
  17. }
  18. $Xmin = 0 ; //------------------------------------------------//
  19. $Xmax = 10 ; // Pobieranie pozycji ze zmiennej $sql i //
  20. $Ymin = 0 ; // usuwanie 4 i dodawanie 5 żeby sprawdzić wioski //
  21. $Ymax = 10 ; //------------------------------------------------//
  22.  
  23. $kod = mysql_query("SELECT x, y FROM miasta WHERE x BETWEN " .$Xmin. " AND " .$Xmax. " AND Y BETWEN " .$Ymin. " AND " .$Ymax. "") ; //wybieramy tabelę wioski (zakładam że macie inną) i wynik gdzie wyspa jest tą co w get
  24. while ($wiersz = mysql_fetch_array($kod)) // robimy pętle która pobierze wszystkie wioski na mapę
  25. {
  26. $x = $wiersz['x']; // x wiosek
  27. $y = $wiersz['y']; // y wiosek
  28.  
  29. $a = $x*40; //tutaj mamy jaką ma mieć wielkość obrazka wioski i ile ma mieć odległość między współrzędnymi np 1 - 2 w moim przypadku 40px
  30. $b = $y*40;
  31. echo "<div style='position:absolute; top:$b; left:$a'><img src='/layouts/img/city.png'></div>"; //pokazujemy wioski na wyznaczonych współrzędnych
  32. }
  33. echo'</div></div><br>'; // zamykamy tagi html ;)
  34. ?>
  35. <?php include '/modules/footer.php'?>

I mam jeszcze pytanie, w 6 linijce mam zmienną $sql która chcę pobrać x i y "mojego" miasta żeby był punktem odniesienia do mapy, później to zamienie na pobieranie informacji z sesji ale nie o to chodzi, jak użyć zmiennej globalnej żebym mógł użyć tej zmiennej do petli w 7 linijce i 13?

Zamieniłem 23 linijkę na
  1. $kod = mysql_query("SELECT x, y FROM miasta WHERE x >= ".$Xmin." AND x <= ".$Xmax." AND y >= ".$Ymin." AND y <= ".$Ymax."");
i działa wyświetlanie miast ale nadal mam problem z tą zmienną globalną i doszedł kolejny problem, nie działa mi zwiększanie zmiennej Xmin z formularzu, kod:
  1. echo '<form method="POST">';
  2. echo '<button name="ok">+1</button>';
  3. echo '</form>';
  4. if(isset($_POST['ok']))
  5. {
  6. $Xmin = $Xmin + 1;
  7. }


Ten post edytował michal16202 21.05.2014, 22:49:31
Go to the top of the page
+Quote Post
daniel1302
post
Post #6





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Witam, przejdź na z przekzaywania danych za pomoca $_POST na $_GET bo to w twoim wypadku jest lepsze i prostrze.

na początku zrób tak:
  1. if (!isset($_GET['xvalue'])) { $_GET['xvalue'] = 0; }


i niżej daj

  1. <?php echo '<a href="'?xvalue='.$_GET['xvalue']+1 .'">+1</a>;
  2. $Xmin = $_GET['xvalue'];


Mniej więcej takie coś.
Go to the top of the page
+Quote Post
michal16202
post
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.05.2014

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


Już brałem pod uwagę $_GET ale nie wiem jak to zrobić dla 4 wartości, 2 dodające dla x i y i 2 odejmujące tak żeby można było jednocześnie dodawać i odejmować wartości przez co mapa będzie się przesówać. Wiesz jak użyć zmiennej $sql w pętli 7 i 13 linijce? Oraz mam jeszcze jedno pytanie jak zrobić żeby pętla for za pierwszym razem wykonała inny niż za każdym kolejnym wykonaniem?
Go to the top of the page
+Quote Post
johny_s
post
Post #8





Grupa: Zarejestrowani
Postów: 594
Pomógł: 122
Dołączył: 17.07.2005
Skąd: P-na

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


Dlaczego się bierzesz za takie rzeczy skoro podstaw nie znasz?
Go to the top of the page
+Quote Post
michal16202
post
Post #9





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.05.2014

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


Robię to po to żeby się nauczyć i zrobić coś w życiu z czego będę dumny.
Go to the top of the page
+Quote Post
daniel1302
post
Post #10





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Załóżmy, że masz linka
...../skrypt.php?imie=daniel&wiek=120&mzamieszkania=nycity

i teraz w php masz takie coś:
  1. echo $_GET['imie']; //daniel
  2. echo $_GET['wiek'].' lat'; //120 lat.
  3. .....


Ten post edytował daniel1302 24.05.2014, 11:04:03
Go to the top of the page
+Quote Post
michal16202
post
Post #11





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.05.2014

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


Wydaje mi się że ogarniam ale nie mam za bardzo czasu w tej chwili myśleć nad tym, jutro albo po jutrze odpisze czy coś uwskórałem.

@edit

Daniel, wziąłem twój kod kilka postów wyżej i nie działa, próbowałem naprawić ale nic to nie dawało. Szukałem na internecie czegoś na wzór tego i też nie działało. Taki error wyświetla "Parse error: syntax error, unexpected '=' in"


Przerobiłem co nie co ten kod, pozbyłem się jednego problemu i pojawił się kolejny. Kod wygląda tak:
  1. echo '<div class="poziomo">';
  2. for ($i=0; $i<=9; $i++) //pętla która liczy współrzędne od 0 do 9 poziomo
  3. {
  4. echo $i.'&nbsp'; // pokazujemy wsółrzędną
  5. }
  6. echo '</div>';

W tej chwili wygloda tak, http://prntscr.com/3mkyma ale kiedy wartości się zwiększą np do maksimum wszystko się rozjeżdża, http://prntscr.com/3mkz0c.
Próbowałem już to zablokować jakimś innym divem, próbowałem zostawić to tak jak było poprzednio ale wtedy tekst nasuwał się na mapę, próbowałem word-spacing i nic.
  1. .poziomo{
  2. float: left;
  3. margin-left: 14px;
  4. margin-top: -25px;
  5. word-spacing: 27px;
  6.  
  7. }

I jeszcze jedno, gdzy dodaję do pliku
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2.  

to wszystkie miasta znajdują się w lewym górnym rogu mapy, przetestowałem kilka żeczy i mogę stwierdzić że to coś wyłącza mi pobieranie stylów z pliku php.


@edit
Udało mi się zrobić bezbłędne wyświetlanie wiosek i współrzędnych, wszystko jest cacy. Pozostały mi tylko trzy problemy, funkcja GET, rozchodzące się górne współżędne i ten przeklęty doctype.

@edit

Napisałem coś takiego ale nie działa do końca jak chce. Jak klikam button odpowiedzialny za przesuwanie y lub x to działa bez zarzutów ale jak chcę przesunąć x i y to wraca mi do domyślnej wartości x lub y w zależności co piwersze się kliknęło. Czytałem na niecie że trzeba użyć pola hidden ale nie wiem jak.


  1. if (!isset($_GET['x'])) { $_GET['x'] = 0; }
  2. if (!isset($_GET['y'])) { $_GET['y'] = 0; }
  3.  
  4. echo'<div class=\'strzalki\'>';
  5. $y = (int)$_GET['y'] - 1;
  6. echo "<form action='' method='get'>";
  7. echo "<input type='hidden' name='y' value='$y' />";
  8. echo "<input type='submit' value='/\'>";
  9. echo "</form>";
  10. echo'</div>';
  11. echo'<div class=\'strzalki2\'>';
  12. $x = (int)$_GET['x'] - 1;
  13. echo "<form action='' method='get'>";
  14. echo "<input type='hidden' name='x' value='$x' />";
  15. echo "<input type='submit' value='<<'>";
  16. echo "</form>";
  17. echo'</div>';
  18. echo'<div class=\'strzalki3\'>';
  19. $x2 = (int)$_GET['x'] + 1;
  20. echo "</form>";
  21. echo "<form action='' method='get'>";
  22. echo "<input type='hidden' name='x' value='$x2' />";
  23. echo "<input type='submit' value='>>'>";
  24. echo "</form>";
  25. echo'</div>';
  26. echo'<div class=\'strzalki4\'>';
  27. $y2 = (int)$_GET['y'] + 1;
  28. echo "<form action='' method='get'>";
  29. echo "<input type='hidden' name='y' value='$y2' />";
  30. echo "<input type='submit' value='\/'>";
  31. echo "</form>";
  32. echo'</div>';
  33.  


@edit

Znalazłem rozwiązanie do tego get, w każdym buttonie zrobiłem nowe pole hidden i w zależności co button robił, czy zwiększał x czy y, czy zmniejszał dałem odpowiednia zmienną pobierającą x lub y w value i wszystko działa.
  1. $a = (int)$_GET['x'];
  2. $b = (int)$_GET['y'];



Pozostaje jeszcze tylko problem tego doctype i mapa będzie działała bez zarzutu.

Ten post edytował michal16202 29.05.2014, 18:27:03
Go to the top of the page
+Quote Post
kujol
post
Post #12





Grupa: Zarejestrowani
Postów: 324
Pomógł: 27
Dołączył: 21.07.2013

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


To wrzuć może jakieś demo jak skończysz, zobaczymy co z tego wyszło (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
michal16202
post
Post #13





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 17.05.2014

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


Demko gry czy mapy? Jeśli demko gry to napewno pojawi się tu jakiś temat ale nie prędko, prace idą powoli a na dodatek nie mam grafika i kasy żeby go połacić ale gra wystartuje.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 5.10.2025 - 04:48