Lopen op een kaart in php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marijn Struijlaart

Marijn Struijlaart

19/05/2011 20:44:34
Quote Anchor link
Hallo allemaal

ik ben van plan om een spel te maken, maar ik weet niet hoe 1 essentieel punt zou moeten. ik zal het even uitleggen.
je hebt een raster van vierkanten,laten we zeggen van 10x10, wat de kaart is. daarin zitten 4 soorten plaatjes die in het script allemaal verschillende eignschappen krijgen: water, bergen, gras en een dorpje. de coordinaten van de dorpjes bergen etc. zou ik zelf willen kunnen bepalen, het liefst zonder database. als speler ben je een poppetje dat zich kan verplaatsen over de vlakken. dit wilde ik doe d.m.v. een soort van pijltjescirkel met omhoog, schuin naar rechts, naar rechts etc.
weten jullie misschien wat de makkelijkste/beste manier is om zo'n kaart te maken zodat de eigenschappen nog bewaard blijven. het liefst haal ik de coordinaten niet uit een databse

alvast bedankt
 
PHP hulp

PHP hulp

06/11/2024 03:51:49
 
- Mark -

- Mark -

19/05/2011 21:05:28
Quote Anchor link
Iets tegen databases? of in andere woorden, zie je er tegen op omdat het je te moeilijk is / lijkt?

Voor hoelang moeten de gegevens bewaard blijven? Als het tijdelijk is kun je het in een session stoppen. Als het voor langer is dan kan het in een txt bestandje maar dat zou ik niet doen. Via een database is dan velen malen sneller en makkelijker.
 
Wouter J

Wouter J

19/05/2011 21:52:47
Quote Anchor link
De posities van de dorpen bergen en zo kan je het best met PHP en SQL (databases) doen.

Het lopen van een poppetje kan je beter met JavaScript aanpassen.
 
Marijn Struijlaart

Marijn Struijlaart

19/05/2011 22:18:30
Quote Anchor link
Ik heb liever geen database omdat het voor een PO informatica over php is en het geen lange sessies zijn en ik liever geen login staten toevoeg, ookal heb ik er nog 1 liggen. doe dus ook levert geen javascript.omdat ik dat nog nooit heb gedaan en ik ook vooral php skills moet laten zien. Als iemand weggaat maak ik wel een cookie. Maar is het bijvoorbeeld mogelijk om aan een vakje een variabele te koppelen zodat ik een formule kan schrijven voor de positie.
 
Wouter J

Wouter J

19/05/2011 22:26:05
Quote Anchor link
Je zou eens kunnen kijken naar area's (HTML) of canvas (HTML+JS).
 
Marijn Struijlaart

Marijn Struijlaart

19/05/2011 22:53:34
Quote Anchor link
ow das een image map. ja daar kan ik misschien wel wat mee als ik die coordinaten variabel maak ofzo. ff wat uitdenken dan

edit: is het trouwens ook mogelijk om op de een of andere manier coordinaten van een gewone image te gebruiken. dan is het makkelijk omdat ik dan de variabele coordinaten van de speler en kaart kan vergelijken
Gewijzigd op 19/05/2011 23:01:42 door Marijn Struijlaart
 
- Mark -

- Mark -

19/05/2011 23:16:59
Quote Anchor link
Kort voorbeeldje.

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
<?php

    if($_SERVER['REQUEST_METHOD'] == 'POST'){
                
        echo 'Positie X = '.$_POST['map_position_x'].' en positie Y = '.$_POST['map_position_y'].'.';
        
    }



?>


<form method="post" action="">
  <input type="image" name="map_position" id="map_position" src="afbeelding.png" />
</form>


Je moet wel even linken naar een willekeurige afbeelding.
Gewijzigd op 19/05/2011 23:20:07 door - Mark -
 
Marijn Struijlaart

Marijn Struijlaart

19/05/2011 23:40:57
Quote Anchor link
dit volg ik even niet :p hoezo geef je de waardes map_position_x en map_position_y als die verder nergens worden verklaard. zou je niet iets van een array kunnen maken met de locaties. gewoon elk vakje een nummer geven ofzo en dan een array met waar de dorpjes enzo komen

Toevoeging op 20/05/2011 00:37:01:

ik heb nu even snel dit bedacht

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
<?php
$grass
= array(2,3,4,5,6,7,8,9);
$dorp = array(1,10,14,28);
for ($coordinates=1; $coordinates <=10; $coordinates++)
{

         if(in_array($coordinates, $grass))
            {

                      echo '<img src="grass.png" alt="grass" />';        
            }

        if(in_array($coordinates, $dorp))
            {

                      echo '<img src="dorp.png" alt="dorp" />';        
            }
}

?>


krijg alleen geen goede weergave

'; } if(in_array($coordinates,$dorp)) { echo ' // het plaatje hier doet het // '; } } ?>

volgens mij doet de herhalingsopdracht het sowieso niet en zit er wss nog iets van slordigheid in, maar ik zie het gewoonweg niet...
 
Erik van de Locht

Erik van de Locht

20/05/2011 08:44:42
Quote Anchor link
Waarom los je dit niet op met een multidimensionale array? :)
Daarna kun je met foreach loops er doorheen lopen en controleren welk type het is:

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
<?php
$map
= array(
  array('g', 'g', 'b'),
  array('b', 'b', 's'),
  array('w', 'g', 'g')
);


foreach($map as $regel) {
  foreach($regel as $vakje) {
    if ($vakje == 'g')
      // gras
    elseif ($vakje == 'b')
      // berg
  }
}[
/code]
Gewijzigd op 20/05/2011 08:45:37 door Erik van de Locht
 
- Mark -

- Mark -

20/05/2011 10:05:40
Quote Anchor link
@Marijn Ik dacht dat je zoiets bedoelde met "coordinaten van een gewone image te gebruiken" De _x en _y wordt er door de browser achter geplakt. Kijk maar naar de naam van de image button, die is map_position.
 
Marijn Struijlaart

Marijn Struijlaart

20/05/2011 11:44:02
Quote Anchor link
probleempje al opgelost. als htm opgelsagen ipv php...
ja ik had ook al iets over multidimensionakle array gelezen, maar heb ik zelf nog nooit gebruik. lijkt me wel handig. ik lees me ff in. maar dan is die eerste array die je noemt de eerste rij, daarna de 2de ofzo? want moet ook nog na elke regel een enter doen zodat je gewoon een vlak krijgt

edit: laat maar heb al een idee, gewoon in een array naar een <br /> verwijzen en die dan echo doen

edit2: volgens mij is dmv een waarde toch handiger met het lopen. of kan je makkelijk verwijzen naar een waarde in een array en die dan aanpassen, dan zou het wel gaan. voor de rest ziet het er al best goed uit!
Gewijzigd op 20/05/2011 12:29:14 door Marijn Struijlaart
 
Erik van de Locht

Erik van de Locht

20/05/2011 12:24:31
Quote Anchor link
Wat je zegt klopt inderdaad:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
array(
  regel 1 ( 'kolom 1 regel 1', 'kolom 2 regel 1', 'kolom 3 regel 1' ),
  regel 2 ( 'kolom 1 regel 2', 'kolom 2 regel 2', 'kolom 3 regel 2' )
)


Om na elke regel een nieuwe regel te plaatsen kun je aan het eind van de buitenste foreach loop een <br /> plaatsen.
 
Marijn Struijlaart

Marijn Struijlaart

20/05/2011 12:34:03
Quote Anchor link
ok nu nog een poppetje kunnen laten lopen. wat ik kan eigenlijk wil is door op een knop te drukken, in het geval van omlaag bijvoorbeeld dat de regel dan +1 wordt, maar er moet wel worden herkend dat de speler op gras, water in een dorp of in de bergen staat.
 
- Mark -

- Mark -

20/05/2011 12:52:55
Quote Anchor link
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
<?php
$map
= array(
  array('g', 'g', 'b'),
  array('b', 'b', 's'),
  array('w', 'g', 'g')
);



    /*--------------------------------------------------------------------------------------------------------------------------    
    (§) Poppetje omhoog laten lopen.
    --------------------------------------------------------------------------------------------------------------------------*/
    


        if($controleren_of_er_een_aanvraag_is_om_het_poppetje_omhoog_te_laten_lopen){
    
        # Als eerste gaan we kijken of we niet buiten de map komen.
    
            if(array_key_exists(($y_poppetje - 1), $map)){
            
                if($map[($y_poppetje - 1)][$x_poppetje] != 'g'){
                    
                    // het is geen gras dus we kunnen hier niet lopen.
                    
                }
                else{
                
                    $y_poppetje -= 1; // poppetje omhoog laten lopen.
                    
                }
                
            }
        }




    /*--------------------------------------------------------------------------------------------------------------------------    
    (§) Map weergeven.
    --------------------------------------------------------------------------------------------------------------------------*/
    

        foreach($map as $y => $regel){
            
            foreach($regel as $x => $vakje) {
                
                if($y == $y_poppetje and $x == $x_poppetje){
                    
                    // poppetje
                }
                
                
            if ($vakje == 'g')
              // gras
            elseif ($vakje == 'b')
              // berg
            }
          
        }



?>


EDIT: Er zaten een paar typ foutjes in.
Gewijzigd op 20/05/2011 12:59:06 door - Mark -
 
Marijn Struijlaart

Marijn Struijlaart

20/05/2011 16:13:53
Quote Anchor link
ik ben toch weer terug gegaan naar het oude model. werkt al best goed alleen het bewegen van het poppetje doet nog wat raars. het kan alleen maar bewegen rondom het beginpunt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<form action="" method="post"><br />
<input type="submit" name="up" value="up" /><br />
<input type="submit" name="left" value="left" />
<input type="submit" name="down" value="down" />
<input type="submit" name="right" value="right" />
</form>


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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<?php  
error_reporting(0);

$grasstappen = rand(1, 4);
$bergstappen = rand(0, 2);
$waterstappen = rand(0, 3);


echo "u kunt nog over: <br />$grasstappen grastegels lopen <br /> $waterstappen watertegels lopen <br /> $bergstappen bergtegels lopen <br />";

$player = 33;
$grass = array(2,3,8,9, 13, 16, 20, 22, 23, 24, 25, 30, 33, 34, 36, 40, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 60 );
$dorp = array(1, 10, 28, 41);
$berg = array(4, 5, 6, 11, 12, 14, 15, 26, 35, 42, 56, 58, 59);
$water = array(7, 17, 18, 19, 21, 27, 29, 31, 32, 37, 38, 39, 51, 57);

//bewegen

if($_POST['up'])
{

         $player = $player - 10;
        echo "$player <br />";
}

elseif($_POST['left'])
{

         $player = $player - 1;
        echo "$player <br />";    
}

elseif($_POST['down'])
{

         $player = $player + 10;
        echo "$player <br />";    
}

elseif($_POST['right'])
{

         $player = $player + 1;
        echo "$player <br />";    
}


//kaart tekenen

for ($coordinates=1; $coordinates <=100; $coordinates++)
{

         
                 if(in_array($coordinates, $grass))
         {

                  if ($coordinates == $player)
                                    echo '<img src="player.png" alt="player" />';
                                    else
                                    echo '<img src="grass.png" alt="grass" />';        
         }

         elseif(in_array($coordinates, $dorp))
         {

                                     if ($coordinates == $player)
                                    echo '<img src="player.png" alt="player" />';
                                    else
                  echo '<img src="dorp.png" alt="dorp" />';        
         }

                 elseif(in_array($coordinates, $berg))
         {

                              if ($coordinates == $player)
                                    echo '<img src="player.png" alt="player" />';
                                    else
                  echo '<img src="berg.png" alt="dorp" />';        
         }

                 elseif(in_array($coordinates, $water))
         {

                              if ($coordinates == $player)
                                    echo '<img src="player.png" alt="player" />';
                                    else
                  echo '<img src="water.png" alt="dorp" />';        
         }

                 switch($coordinates)
                 {
                                  case
10:
                                 case
20:
                                 case
30:
                                 case
40:
                                 case
50:
                                 case
60:
                                 echo "<br />";
                 }
}

[
size=xsmall][i]Toevoeging op 20/05/2011 16:15:53:[/i][/size]

[
quote="Marijn Struijlaart op 20/05/2011 16:13:53"]
ik ben toch weer terug gegaan naar het oude model. werkt al best goed alleen het bewegen van het poppetje doet nog wat raars. het kan alleen maar bewegen rondom het beginpunt

[code]
<
form action="" method="post"><br />
<
input type="submit" name="up" value="up" /><br />
<
input type="submit" name="left" value="left" />
<
input type="submit" name="down" value="down" />
<
input type="submit" name="right" value="right" />
<
/form>
[
/code]

[
code]<?php  
error_reporting(0);

$grasstappen = rand(1, 4);
$bergstappen = rand(0, 2);
$waterstappen = rand(0, 3);


echo "u kunt nog over: <br />$grasstappen grastegels lopen <br /> $waterstappen watertegels lopen <br /> $bergstappen bergtegels lopen <br />";

$player = 33;
$grass = array(2,3,8,9, 13, 16, 20, 22, 23, 24, 25, 30, 33, 34, 36, 40, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 60 );
$dorp = array(1, 10, 28, 41);
$berg = array(4, 5, 6, 11, 12, 14, 15, 26, 35, 42, 56, 58, 59);
$water = array(7, 17, 18, 19, 21, 27, 29, 31, 32, 37, 38, 39, 51, 57);

//bewegen

if($_POST['up'])
{

         $player = $player - 10;
        echo "$player <br />";
}

elseif($_POST['left'])
{

         $player = $player - 1;
        echo "$player <br />";    
}

elseif($_POST['down'])
{

         $player = $player + 10;
        echo "$player <br />";    
}

elseif($_POST['right'])
{

         $player = $player + 1;
        echo "$player <br />";    
}


//kaart tekenen

for ($coordinates=1; $coordinates <=100; $coordinates++)
{

         
                 if(in_array($coordinates, $grass))
         {

                  if ($coordinates == $player)
                                    echo '<img src="player.png" alt="player" />';
                                    else
                                    echo '<img src="grass.png" alt="grass" />';        
         }

         elseif(in_array($coordinates, $dorp))
         {

                                     if ($coordinates == $player)
                                    echo '<img src="player.png" alt="player" />';
                                    else
                  echo '<img src="dorp.png" alt="dorp" />';        
         }

                 elseif(in_array($coordinates, $berg))
         {

                              if ($coordinates == $player)
                                    echo '<img src="player.png" alt="player" />';
                                    else
                  echo '<img src="berg.png" alt="dorp" />';        
         }

                 elseif(in_array($coordinates, $water))
         {

                              if ($coordinates == $player)
                                    echo '<img src="player.png" alt="player" />';
                                    else
                  echo '<img src="water.png" alt="dorp" />';        
         }

                 switch($coordinates)
                 {
                                  case
10:
                                 case
20:
                                 case
30:
                                 case
40:
                                 case
50:
                                 case
60:
                                 echo "<br />";
                 }
}


heb de positie van de speler ff laten printen, krijg je dus alleen 43, 34, 23 en 32
Gewijzigd op 20/05/2011 17:03:27 door Marijn Struijlaart
 
Erik van de Locht

Erik van de Locht

20/05/2011 16:46:40
Quote Anchor link
Mag ik ten eerst vragen waarom je in hemelsnaam error reporting op 0 hebt gezet? :o
 
Marijn Struijlaart

Marijn Struijlaart

20/05/2011 16:54:47
Quote Anchor link
ja das was even irritant omdat ik de hele tijd een notice error kreeg :p
krijg je namelijk de hele tijd van die undefined index dingen van dat form. moet ik nog ff oplossen
Gewijzigd op 20/05/2011 16:56:36 door Marijn Struijlaart
 
PHP Scripter

PHP Scripter

20/05/2011 16:56:46
Quote Anchor link
Marijn, zorg dat je eerst errors oplost voordat je verder gaat. Variabelen niet gebruiken als ze niet bestaan!
 
Marijn Struijlaart

Marijn Struijlaart

20/05/2011 17:04:05
Quote Anchor link
heb eht al opgelost. gewoon even een isset in de if tags doen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if(isset($_POST['up']))
?>


maar iemand een idee hoe het komt dat ie maar om 1 punt heen beweegt.

edit: ok het komt dus doordat ie de hele code elke keer opnieuw moet uitvoeren. weet iemand hoe je als het ware een beginwaarde geeft en dan de berekende waarde voor de volgende keren gebruiken?

Toevoeging op 21/05/2011 00:59:22:

ik heb het bijna helemaal opgelost dmv een cookie. alleen geeft de cookie nog niet de jusite waarde aan, die loopt 1 actie achter. als ik echter terugkom staat mijn poppetje wel op de goede plaats en geeft het de goede waarde aan, maar als ik beweeg verandert de waarde de eerste keer niet. daarna wel

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
<?php  

$grasstappen
= rand(1, 4);
$bergstappen = rand(0, 2);
$waterstappen = rand(0, 3);


echo "u kunt nog over: <br />$grasstappen grastegels lopen <br /> $waterstappen watertegels lopen <br /> $bergstappen bergtegels lopen <br />";

if(isset($_COOKIE["playerposition"]))
{

             $player = $_COOKIE["playerposition"];
}

else
{
          $player = 33;
        setcookie("playerposition", $player);    
}



echo '<br />';
$grass = array(2,3,8,9, 13, 16, 20, 22, 23, 24, 25, 30, 33, 34, 36, 40, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 60 );
$dorp = array(1, 10, 28, 41);
$berg = array(4, 5, 6, 11, 12, 14, 15, 26, 35, 42, 56, 58, 59);
$water = array(7, 17, 18, 19, 21, 27, 29, 31, 32, 37, 38, 39, 51, 57);

//bewegen

    if(isset($_POST['up']))
    {

             $player = $player - 10;    
    }

    elseif(isset($_POST['left']))
    {

             $player = $player - 1;
    }

    elseif(isset($_POST['down']))
    {

             $player = $player + 10;
    }

    elseif(isset($_POST['right']))
    {

             $player = $player + 1;
                
    }

setcookie("playerposition", $player);
if (isset($_COOKIE["playerposition"]))
{

echo $_COOKIE["playerposition"];
echo "<br />";
}

?>


het script voor de kaart staat in een eerdere post maar is nu denk ik niet echt belangrijk
Gewijzigd op 21/05/2011 00:23:57 door Marijn Struijlaart
 



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.