Poppetje beweegt niet meer over kaart, nu actie in functie staat
Ik ben bezig met ene soort van spel, waarbij een onderdeel is dat je een dobbelsteen moet rollen en dan kan bewegen, afhankelijk van welk soort terrein en het aantal ogen.
ik heb de bewegingsactie nu in een functie gezet, maar dat werkt nog niet helemaal vlekkeloos. ik kan namelijk niet meer bewegen (kon eerst wel toen ik alles los had).
ik denk zelf dat het iets van een fout is met de return values. jullie een idee?
Code (php)
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
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
<?php
function moveplayer($player, $directionvalue, $stappen, $grass, $dorp, $berg, $water)
{
if(in_array($player + $directionvalue, $grass) or in_array($player + $directionvalue, $dorp)) //als je naar gras wilt bewegen
{
if($stappen > 0) //als er nog stappen beschikbaar zijn
{
$stappen = $stappen -1; //aantal stappen kost 1
$player = $player + $directionvalue; //coordinaat 10 omhoog
}
elseif(!$stappen) //als ie het aantal stappen niet kan bereken
{
echo "unable to calculate how many steps are left, please try again\n";
}
else //als er te weinig stappen zijn
{
echo "not enough steps left to make this move!, please choose another action or roll the dice!\n";
}
}
elseif(in_array($player + $directionvalue, $water)) //idem voor vorige
{
if($stappen > 1)
{
$stappen = $stappen - 2;
$player = $player + $directionvalue;
}
elseif(!$stappen)
{
echo "unable to calculate how many steps are left, please try again\n";
}
else
{
echo "not enough steps left to make this move!\n";
}
}
elseif(in_array($player + $directionvalue, $berg))
{
if($stappen > 2)
{
$stappen = $stappen - 3;
$player = $player + $directionvalue;
}
elseif(!$stappen)
{
echo "unable to calculate how many steps are left, please try again\n";
}
else
{
echo "not enough steps left to make this move!\n";
}
}
else
{
echo "you cannot move outside the map!\n";
}
return $player;
return $stappen;
}
if(isset($_POST['up'])) // omhoog bewegen
{
moveplayer($player, -10, $stappen, $grass, $dorp, $berg, $water);
}
elseif(isset($_POST['left'])) // naar links bewegen
{
moveplayer($player, -1, $stappen, $grass, $dorp, $berg, $water);
}
elseif(isset($_POST['down'])) //omlaag bewegen
{
moveplayer($player, 10, $stappen, $grass, $dorp, $berg, $water);
}
elseif(isset($_POST['right'])) //naar rechts bewegen
{
moveplayer($player, 1, $stappen, $grass, $dorp, $berg, $water);
}
setcookie("playerposition", $player); //bewerkte positie van de speler opslaan
?>
function moveplayer($player, $directionvalue, $stappen, $grass, $dorp, $berg, $water)
{
if(in_array($player + $directionvalue, $grass) or in_array($player + $directionvalue, $dorp)) //als je naar gras wilt bewegen
{
if($stappen > 0) //als er nog stappen beschikbaar zijn
{
$stappen = $stappen -1; //aantal stappen kost 1
$player = $player + $directionvalue; //coordinaat 10 omhoog
}
elseif(!$stappen) //als ie het aantal stappen niet kan bereken
{
echo "unable to calculate how many steps are left, please try again\n";
}
else //als er te weinig stappen zijn
{
echo "not enough steps left to make this move!, please choose another action or roll the dice!\n";
}
}
elseif(in_array($player + $directionvalue, $water)) //idem voor vorige
{
if($stappen > 1)
{
$stappen = $stappen - 2;
$player = $player + $directionvalue;
}
elseif(!$stappen)
{
echo "unable to calculate how many steps are left, please try again\n";
}
else
{
echo "not enough steps left to make this move!\n";
}
}
elseif(in_array($player + $directionvalue, $berg))
{
if($stappen > 2)
{
$stappen = $stappen - 3;
$player = $player + $directionvalue;
}
elseif(!$stappen)
{
echo "unable to calculate how many steps are left, please try again\n";
}
else
{
echo "not enough steps left to make this move!\n";
}
}
else
{
echo "you cannot move outside the map!\n";
}
return $player;
return $stappen;
}
if(isset($_POST['up'])) // omhoog bewegen
{
moveplayer($player, -10, $stappen, $grass, $dorp, $berg, $water);
}
elseif(isset($_POST['left'])) // naar links bewegen
{
moveplayer($player, -1, $stappen, $grass, $dorp, $berg, $water);
}
elseif(isset($_POST['down'])) //omlaag bewegen
{
moveplayer($player, 10, $stappen, $grass, $dorp, $berg, $water);
}
elseif(isset($_POST['right'])) //naar rechts bewegen
{
moveplayer($player, 1, $stappen, $grass, $dorp, $berg, $water);
}
setcookie("playerposition", $player); //bewerkte positie van de speler opslaan
?>
ik gebruik cookies ipv sessions, zodat je evt makkelijk later terug kan komen. het si voor een PO informatica over PHP, daarom heb ik ook geen mysql gebruikt
return $player;
return $stappen;
En dat werkt sowieso niet. Bij de eerste return wordt de functie verlaten, dus de tweede wordt nooit bereikt.
OK, is het dan misschien mogelijk een array te returnen met die 2 variabelen en dan die array splitten zegmaar in $player en $stappen?
Je doet nu trouwens helemaal niks met de returnwaarde.
function moveplayer(...)
{
return array($player, $stappen);
}
$array = moveplayer(...);
$player = $array[0];
$stappen = $array[1];
nee dat zit in een later stuk van het script. heb nu maar een stuk van de 400 regels gepakt. maar OK bedankt, dit moet denk ik wel werken, moet nu eerst even wat anders doen en daarna vul ik t ff in ;)
400 regels code gevuld met ifjes en elsjes, dat klinkt als 1) een zeer slechte structuur in je code en je bestandsstructuur en 2) lastig te debuggen en aan te passen. Dat is niet iets waar je trots op moet zijn ;).
nou valt allemaal nog wel mee, alles staat in 1 bestand, ook de html code en het is redelijk uitgebreid. daarnaast heb ik vrij veel witregels en voor 1 stuk was het gewoon wat makkelijker om het deels uit te schrijven ipv de functie te gebruiken voor 4 verschillende variabelen, maar dat laat ik nu even achterwege. zit ook aardig wat foutafhandeling in enzo dussss