Een kaart in PHP met aanklikbare steden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter  Flos

Peter Flos

28/02/2014 09:16:56
Quote Anchor link
Hallo,

Ik ben bezig met een browsergame. Echter wil ik daar een kaart bij hebben met steden erop. Op PHP.net had ik deze link gevonden: http://php.net/manual/en/function.imageline.php

Verder heb ik op internet rond gezocht, maar ben ik niet gekomen waar ik wil zijn. Weet iemand hoe ik een kaart maak waar steden op komen als spelers zich registreren?
 
PHP hulp

PHP hulp

25/12/2024 07:17:39
 
- Ariën  -
Beheerder

- Ariën -

28/02/2014 09:38:17
Quote Anchor link
Is het een bestaande kaart die al getekend is?
 
Peter  Flos

Peter Flos

28/02/2014 09:46:57
Quote Anchor link
Ik zou een kaart kunnen tekenen, het gaat enkel om vierkante hokjes in 1 groot vierkant hok.
 
- Ariën  -
Beheerder

- Ariën -

28/02/2014 09:52:33
Quote Anchor link
Als een afbeelding gewoon statisch is, dan kan je deze toch ook zelf tekenen?
Misschien met enig hulp van Canvas.
 
Peter  Flos

Peter Flos

28/02/2014 10:14:42
Quote Anchor link
Ik kan zelf een afbeelding tekenen, maar als er 1 lid bij komt, moet er 1 stad bij komen op een random positie.
 
Erwin H

Erwin H

28/02/2014 11:12:18
Quote Anchor link
Achtergrond gewoon een statisch plaatje. De 'steden' op de kaart zijn divjes (of andere html elementen) die je met behulp van een absolute position in css op een bepaalde plek op de kaart plaatst. Die elementen kan je dan ook aanklikbaar maken via ofwel gewoon hyperlinks, ofwel via een javascript afhandeling.
 
Peter  Flos

Peter Flos

28/02/2014 16:22:39
Quote Anchor link
Erwin,

Ondertussen ben ik zover dat de "Steden" er staan. Echter op de telefoon gaan deze overlappen. Wat kan ik daartegen doen? Ook als ik op de PC mijn scherm kleiner maak gebeurt hetzelfde.
 
Peter  Flos

Peter Flos

01/03/2014 16:23:08
Quote Anchor link
Bump.

Plaatje:

http://i.imgur.com/1PFeRQS.png

Op de telefoon gaan de rondjes met S over elkaar heen schuiven. CSS:

(1e 10 plaatjes):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#kaart{
position:relative;
left:33%;
top:16%;
width:400px;
height:400px;
min-height:400px;
min-width:400px;
}
#locatie1{
position:absolute;
left:33%;
top:16%;
width:20px;
height:20px;
min-height:20px;
min-width:20px;
display: inline;
}
#locatie2{
position:absolute;
left:36%;
top:16%;
width:20px;
height:20px;
min-height:20px;
min-width:20px;
display: inline;
}
#locatie3{
position:absolute;
left:39%;
top:16%;
width:20px;
height:20px;
min-height:20px;
min-width:20px;
}
#locatie4{
position:absolute;
left:42%;
top:16%;
min-height:20px;
min-width:20px;
}
#locatie5{
position:absolute;
left:45%;
top:16%;
min-height:20px;
min-width:20px;
}
#locatie6{
position:absolute;
left:48%;
top:16%;
min-height:20px;
min-width:20px;
}
#locatie7{
position:absolute;
left:51%;
top:16%;
min-height:20px;
min-width:20px;
}
#locatie8{
position:absolute;
left:54%;
top:16%;
min-height:20px;
min-width:20px;
}
#locatie9{
position:absolute;
left:57%;
top:16%;
min-height:20px;
min-width:20px;
}
#locatie10{
position:absolute;
left:60%;
top:16%;
min-height:20px;
min-width:20px;
}
 
Milo S

Milo S

01/03/2014 20:56:04
Quote Anchor link
Ik denk dat ik het zo zou doen dat je een lijst hebt met een statische achtergrond. Ieder lid heeft zijn eigen stad nummer, dat correspondeert met een lijst item nummer. Vervolgens zet je er dan een extra class in, bijvoorbeeld cityOn. Met die class er in wordt er een plaatje weergegeven.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<ul id="map">
<?php
$i
= 1;
while( $rec = mysqli_fetch_assoc( $res ) )
{

    $cityOn = ( $rec['stadID'] == $i ) ? 'class="cityOn" ' : '';
    echo '<li><a '.$cityOn.'href=""></a></li>';

$i++;
}

?>

</ul>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ul.map {
    width: 500px;
    height: 500px;

    background: url('statischekaart.jpg');
}
ul.map li {
    width: 25px;
    height: 25px;
    float: left;
}
ul.map li a.cityOn {
    background: url('stad.jpg');
}


Stel je hebt dus een kaart met max 400 steden. Dan zou je bij het laten registreren een plek kunnen kiezen. Zo kom je dan aan het stadID. Die sla je dus bij de gebruiker op.
Gewijzigd op 01/03/2014 21:01:04 door Milo S
 
Peter  Flos

Peter Flos

03/03/2014 20:52:36
Quote Anchor link
Ik heb nu eigenlijk exact hetzelfde als jou gedaan, enkel benaming veranderd. Volgende script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<style>
ul.map {
    width: 500px;
    height: 500px;

    background: url('kaart.png');
}
ul.map li {
    width: 25px;
    height: 25px;
    float: left;
}
ul.map li a.cityOn {
    background: url('stad.png');
}
</style>
<ul id="map">
<?php
include '../conn.php';
$res = mysql_query("SELECT kaart_nr FROM S1_Steden")or die(mysql_error());
$i = 1;
while( $rec = mysql_fetch_assoc( $res ) )
{

    $cityOn = ( $rec['kaart_nr'] == $i ) ? 'class="cityOn" ' : '';
    echo '<li><a '.$cityOn.'href=""></a></li>';
$i++;
}

?>

</ul>


(Heb ik voor nu even in Mysql veranderd).
Nu krijg ik het volgende resultaat:
http://i.imgur.com/rrwsRVe.png

Tabel S1_Steden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
|ID|Username|kaart_nr|Punten| ->> Verder met alle grondstoffen etc.
|1 |Trivium.|4       |225   |
|2 |Godin   |1       |225   |
|3 |POTG    |2       |225   |


Beter gezegd: De plaatsen 1,2,3,4 en 6 zijn bezet. Waarom krijg ik nu niet de steden te zien met de kaart?
 
Peter  Flos

Peter Flos

04/03/2014 22:06:27
Quote Anchor link
Bump.
 
Milo S

Milo S

06/03/2014 19:55:20
Quote Anchor link
Ten eerste heb ik een foutje gemaakt met de benaming id of class. In de HTML heb ik het id gebruikt en in de CSS class. In de html moet je regel 1 vervangen voor <ul class="map">.

Verder was dit een duw in de goede richting en moet je de rest zeker nog zelf bedenken. Nu zul je waarschijnlijk alle steden naast elkaar krijgen. Wat je niet wilt uiteraard.

Hiertegen kun je 2 dingen doen. Of allemaal lege list items aan gaan maken voor de nog niet bezette plekken. Of je gaat een combinatie maken van jou en mijn idee. Dat laatste zou inhouden dat je met php coördinaten gaat berekenen om de list item op de goede plek te krijgen.

Voorbeeld voor het laatste
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$per_rij
  = 20;
$city_id  = 27;
$aantalpx = 25;



$topmargin  = floor( $city_id / $per_rij ) * $aantalpx;

$leftmargin = $city_id - ( floor( $city_id / $per_rij ) * $per_rij );
$leftmargin = $leftmargin * $aantalpx;
?>



Topmargin is de naarbeneden afgeronde uitkomst van je stad id gedeelt door het aantal rijen maal het aantal pixels.
Je leftmargin is je stad id min de naarbeneden afgeronde uitkomst maal het aantal rijen waarvan het totaal ook weer keer het aantal pixels word gedaan.

Oh en voor ik het vergeet nog een opmerking over jou geplaatste code, ik mis een correcte foutafhandeling.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.